tx · 6eC4RBnryeTDBUxEMp7BurvJGySvR1jMgtPk8VQsRrDq 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.05500000 Waves 2024.11.22 17:02 [3382767] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "6eC4RBnryeTDBUxEMp7BurvJGySvR1jMgtPk8VQsRrDq", "fee": 5500000, "feeAssetId": null, "timestamp": 1732284140195, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "gJKGV3mDAyBaw9PxR1HcMV5PoNaDjXMLSMtRNUAS6oVBLWH6qxGt76CRc6BvT7enDfsGivRQ9QHpjx2YYFuzE1C" ], "script": "base64:BgKqAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSBAoCCAgSBAoCCAgSAwoBCBIAEgQKAggIEgQKAggIEgQKAgEIEgQKAgEIEgQKAggIEgASAwoBARIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIAEgASAwoBCBIDCgEIvwEAFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkHABNLU19BTExPV19ST0JPX0RVQ0tTBwAKREFZX01JTExJUwCAuJkpABRPTERfU1RBS0lOR19ERUFETElORQCA87jCsTIABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAANwdWIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDADBRZLU19TRVBBUkFURV9QVUJMSUNfS0VZASCrF1ePFWfjWVRBsNZy62abxKPTZl7VmYZQ35g3H7IJCAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgDCQAAAgEBVAUHJG1hdGNoMAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgJAAIBAg1Vbmtub3duIGNoYWluAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgAQYWNyZXMyQWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1A0VUgzVDluWHBNTnBVbVNtUWpQbUV6M0c4NXQzem42ZUEDCQAAAgEBVAUHJG1hdGNoMAIjM05CUHgxRmNpdTNKUU5FR1oyMWpTblRkdXRMTkdHQlVTWGgJAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAASdG91cm5hbWVudENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnVG91cm5hbWVudERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgIPZmluaXNoQmxvY2tGb3JfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCWNvbnRpbmVudAkArAICAhRyZXNUeXBlc0J5Q29udGluZW50XwUJY29udGluZW50ARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgITbGFzdFdlZWtUeElkQnlVc2VyXwUEYWRkcgEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBGFkZHIJAKwCAgISY3VyV2Vla1R4SWRCeVVzZXJfBQRhZGRyAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJANQWAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQEJZmluYWxUaW1lAAkAlwMBCQDMCAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIFFE9MRF9TVEFLSU5HX0RFQURMSU5FBQNuaWwACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sAC1JPQk9fUFJFRklYAgRST0JPAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSABkAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwAVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAoAF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTAAAAGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAICEr18ACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwkAzAgCAgdNaW5lIEwxCQDMCAICB01pbmUgTDIJAMwIAgIHTWluZSBMMwkAzAgCAgdUcmFwIEwxCQDMCAICB1RyYXAgTDIJAMwIAgIHVHJhcCBMMwkAzAgCAgtCb29tLURvZyBMMQkAzAgCAgtCb29tLURvZyBMMgkAzAgCAgtCb29tLURvZyBMMwUDbmlsABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIlOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8xMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzIwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfMzBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIqNF8xM18yMl80XzM1XzIyXzIzXzBfNTAsMSwwXzAsMCwwLDAsMCwwLDBfCQDMCAICKjRfMTNfMjJfNF8zNV8yMl80Nl8wXzUwLDEsMV8wLDIsNSwwLDAsMCwwXwkAzAgCAis0XzEzXzIyXzRfMzVfMjJfNjlfMF81MCwyLDFfMCw1LDEwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV8yMF8xXzMwLDEsMV8wLDAsMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNDBfMV8zMCwxLDJfMiwxLDMsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzYwXzFfMzAsMSwzXzUsMiw4LDAsMCwwLDBfCQDMCAICJzIzXzIzXzVfMjBfMjNfNl8zNV8yXzEwMF8wLDAsMCwwLDAsMCwwXwkAzAgCAicyM18yM181XzIwXzIzXzZfNzBfMl8xNTBfMCwwLDAsMCwwLDAsMF8JAMwIAgIoMjNfMjNfNV8yMF8yM182XzEwNV8yXzIwMF8wLDAsMCwwLDAsMCwwXwUDbmlsAAlySWR4Q29lZmYABgAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgNub18FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICBWxjbmFfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICA2xhcwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBnN0dGFvXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICA3doXwULbGFuZEFzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4BDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIBDmtleVNhdmVkSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgxzYXZlZEhlYWx0aF8FC2R1Y2tBc3NldElkARBrZXlTYXZlZExvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg5zYXZlZExvY2F0aW9uXwULZHVja0Fzc2V0SWQBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQtkdWNrQXNzZXRJZAkArAICAhl0b3RhbERlbGl2ZXJ5Q291bnRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBGFkZHIJAKwCAgISdXNlckRlbGl2ZXJ5Q291bnRfBQRhZGRyARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQRhZGRyCQCsAgICFHVzZXJMYXN0RGVsaXZlcnlEYXlfBQRhZGRyAAd4cENsYWltAJBOAAx4cEN1c3RvbU5hbWUAwIQ9AAl4cE9uYm9hcmQAwIQ9AQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwACURBWU1JTExJUwCAuJkpARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAPUFJFU0FMRU5VTUxBTkRTAPQDARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAgRsY25fBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgEOcHJvZFN0clRvQnl0ZXMBB3Byb2RTdHIEBXBMaXN0AwkAAAIFB3Byb2RTdHICAAUDbmlsCQC8CQIFB3Byb2RTdHICAV8KAQR0b0JWAgNhY2MGcmVjaXBlBAFqCQBpAgkAyAEBBQNhY2MACAQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAkAywECBQNhY2MJAJoDAQUEY3VycgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQR0b0JWAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDmJ5dGVzVG9Qcm9kU3RyAQJidgoBBmZyb21CVgIDYWNjBnJlY2lwZQQBagkAkAMBBQNhY2MEAWIJAMkBAgkAygECBQJidgkAaAIACAUBagAICQDNCAIFA2FjYwkApAMBCQCxCQEFAWIJALoJAgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZmcm9tQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgIBXwEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAglkdWNrU3RhdHMEcmVxcwoBBWNoZWNrAgNhY2MBagQEYnVmZgMJAGYCCQCQAwEFCWR1Y2tTdGF0cwkAZAIABwUBagkAkQMCBQlkdWNrU3RhdHMJAGQCAAcFAWoAAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEcmVxcwUBagkAZAIJAJEDAgUJZHVja1N0YXRzBQFqBQRidWZmCQACAQkArAICAhtSZXF1aXJlbWVudCBub3Qgc2F0aXNmaWVkOiAJAJEDAgUMcmVxdWlyZW1lbnRzBQFqBgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNoZWNrAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcBCGFkZFByb2RCBwZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEc2xvdAlkdWNrU3RhdHMEBXBhcnRzCQC1CQIFBmlkeENudAIBOgMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleDphbW91bnQDAwkBASEBBQppc1Bvc2l0aXZlCQECIT0CCQCxAgEJAJEDAgUFcGFydHMAAAACBwkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgFc3RhdHMDCQECIT0CBQFnAgAEBXNsb3RzCQC1CQIFAWcCASwDCQBmAgkAkAMBBQVzbG90cwUITUFYU0xPVFMJAAIBAhJXcm9uZyBzbG90cyBmb3JtYXQEAnMwCQCRAwIFBXNsb3RzAAAEAnMxAwkAZgIJAJADAQUFc2xvdHMAAQkAkQMCBQVzbG90cwABAgADAwkAAAIFAnMwAgAJAAACBQJzMQIABwUEYnBJbgQFdG1wUzADCQECIT0CBQJzMAIACQEIYWRkUHJvZEIHBQJzMAUEYnBJbgUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAAABQVzdGF0cwkAlAoCBQRicEluBwMJAQIhPQIFAnMxAgADCAUFdG1wUzACXzIJAAIBAh5CaWcgaXRlbSBhbHJlYWR5IG9jY3VwaWVzIHNsb3QICQEIYWRkUHJvZEIHBQJzMQgFBXRtcFMwAl8xBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAEFBXN0YXRzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQVzdGF0cwoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEEB21haW5BdXgJALUJAgUDc2VnAgE7AwkBAiE9AgkAkAMBBQdtYWluQXV4BQpOVU1NQUlOQVVYCQACAQIUV3Jvbmcgc2VnbWVudCBmb3JtYXQEAW0JAJEDAgUHbWFpbkF1eAAABAFhCQCRAwIFB21haW5BdXgAAQMDCQAAAgUBbQIACQAAAgUBYQIABwkAlAoCCQBkAgUBagABCAUDYWNjAl8yBAR0bXBNCQELc2xvdHNHcm91cEIGBQFtCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQFqAAAFBXN0YXRzCQCUCgIJAGQCBQFqAAEJAQtzbG90c0dyb3VwQgYFAWEFBHRtcE0FCmlzUG9zaXRpdmUFAWoAAQUFc3RhdHMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEPdmlydENsYWltQWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgEDHRvdGFsUmVzVHlwZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUJAJQKAgkAzQgCCAUDYWNjAl8xBQx0b3RhbFJlc1R5cGUJAGQCCAUDYWNjAl8yBQx0b3RhbFJlc1R5cGUKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwx0ZXJyYWluQ291bnQECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTBQx0ZXJyYWluQ291bnQFDWxhbmRTaXplSW5kZXgJAJQKAgkAzQgCCAUDYWNjAl8xBQlyZXNPZlR5cGUJAGQCCAUDYWNjAl8yBQlyZXNPZlR5cGUKAAIkbAUNdGVycmFpbkNvdW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhhZGRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIFAXICAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8KAQxhZGRQYXJ0TGlzdHMCA2FjYwFpBAZ3aFBhcnQJAGsDCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCQCUCgIJAM0IAggFA2FjYwJfMQkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQUGd2hQYXJ0CQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFBndoUGFydAQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZFBhcnRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCgEJc3VtUmVzTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgEHc3VtUHJvZAIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQEcGtncwkAaQIJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQ5QUk9EVUNUUEtHU0laRQABBQ5QUk9EVUNUUEtHU0laRQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECndoR29vZHNWb2wDCQAAAgUFZ29vZHMCAAAACAoAAiRsCQC8CQIFBWdvb2RzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yCQBkAgkAZAIFCHdoUmVzVm9sBQh3aE1hdFZvbAUKd2hHb29kc1ZvbAEMZ2V0V2FyZWhvdXNlAwV3aEtleQlsYW5kSW5kZXgKaW5mcmFMZXZlbAQJdm9sUHJlZml4CQCsAgIJAKwCAgkApAMBBQlsYW5kSW5kZXgCAV8JAKQDAQUKaW5mcmFMZXZlbAQHd2hUb3RhbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzNDI0NzM0Nzg2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDM0MjQ3MzQ3ODYCXzEEBmR1Y2tJZAgFDSR0MDM0MjQ3MzQ3ODYCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIJAQlmaW5hbFRpbWUACAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgosIGZpbmFsID0gCQCkAwEJAQlmaW5hbFRpbWUABAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAgkBCWZpbmFsVGltZQAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM3MTU2MzgwMjcDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM3MTU2MzgwMjcCXzEEBWJwUmVzCAUNJHQwMzcxNTYzODAyNwJfMgQFbG9mdE8IBQ0kdDAzNzE1NjM4MDI3Al8zBAVsb2Z0RggFDSR0MDM3MTU2MzgwMjcCXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAgkBCWZpbmFsVGltZQAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkARN1cGRhdGVTdGF0c0ludGVybmFsBAZsdmxLZXkFeHBLZXkJcG9pbnRzS2V5B2RlbHRhWFAEAnhwCQELdmFsdWVPckVsc2UCCQCfCAEFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCfCAEFBmx2bEtleQAABQVuZXdYUAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcG9pbnRzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwb2ludHNLZXkAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULZHVja0Fzc2V0SWQEBGFkZHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDAwUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMHCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQULUk9CT19QUkVGSVgHCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEJa2V5VXNlclhQAQUEYWRkcgkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgUHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQFB2RlbHRhWFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAETdW5zdGFrZUxhbmRJbnRlcm5hbAIEYWRkcgtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQIbGFuZEluZm8JALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAtkZXNjcmlwdGlvbgIBXwQIbGFuZFNpemUJAJEDAgUIbGFuZEluZm8FC3JlY0xhbmRTaXplBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQhsYW5kSW5mbwULcmVjVGVycmFpbnMECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBEUBleHRyTmF0aXZlKDEwNTUpAQUHdGltZUtleQQJZGVsdGFUaW1lCQBlAgkBCWZpbmFsVGltZQAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIKLCBmaW5hbCA9IAkApAMBCQEJZmluYWxUaW1lAAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMEDXJlc0FmdGVyQ2xhaW0JAQ92aXJ0Q2xhaW1BZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQPYWNyZXNGcm9tUGllY2VzCQBkAgkAaAIFBnBpZWNlcwUFTVVMVDgJAGkCCQBoAgkAZAIJAGgCBQZwaWVjZXMFCmluZnJhTGV2ZWwFCWFydFBpZWNlcwUFTVVMVDgABQQMYWNyZXNGcm9tUmVzCQBoAgkAawMIBQ1yZXNBZnRlckNsYWltAl8yBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCgEGc3VtTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAV3aE1hdAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGc3VtTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAxhY3Jlc0Zyb21NYXQJAGgCCQBrAwUFd2hNYXQJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BRVVU0RUMkFDUkVTX01VTFRJUExJRVIEBXByb2RzAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8KAQdzdW1Qcm9kAgNhY2MEaXRlbQQBaggFA2FjYwJfMgQLcmVjaXBlQ29lZmYJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUBagIBXwUJcklkeENvZWZmCQCUCgIJAGQCCAUDYWNjAl8xCQBoAgkAaAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQULcmVjaXBlQ29lZmYFBU1VTFQ2CQBkAgUBagABBAZ3aFByb2QKAAIkbAUFcHJvZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1Qcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAQNYWNyZXNGcm9tUHJvZAkAaAIJAGsDCAUGd2hQcm9kAl8xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSCQCWCgQFD2FjcmVzRnJvbVBpZWNlcwUMYWNyZXNGcm9tUmVzBQxhY3Jlc0Zyb21NYXQFDWFjcmVzRnJvbVByb2QBE3Vuc3Rha2VEdWNrSW50ZXJuYWwCBGFkZHILZHVja0Fzc2V0SWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQNuaWwECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCXRlbXBQcm9kQgoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQFYnBSZXMKAAIkbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAxhY3Jlc0Zyb21SZXMJAGgCCQBrAwUFYnBSZXMFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BRVVU0RUMkFDUkVTX01VTFRJUExJRVIEBWJwTWF0CgACJGwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQMYWNyZXNGcm9tTWF0CQBoAgkAawMFBWJwTWF0CQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAVwcm9kcwMJAAACBQpuZXdQcm9kU3RyAgAFA25pbAkAvAkCBQpuZXdQcm9kU3RyAgFfCgEHc3VtUHJvZAIDYWNjBGl0ZW0EAWoIBQNhY2MCXzIEC3JlY2lwZUNvZWZmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FCXJJZHhDb2VmZgkAlAoCCQBkAggFA2FjYwJfMQkAaAIJAGgCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FC3JlY2lwZUNvZWZmBQVNVUxUNgkAZAIFAWoAAQQGYnBQcm9kCgACJGwFBXByb2RzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjQJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgEDWFjcmVzRnJvbVByb2QJAGgCCQBrAwgFBmJwUHJvZAJfMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgFFVVTRFQyQUNSRVNfTVVMVElQTElFUgkAlQoDBQxhY3Jlc0Zyb21SZXMFDGFjcmVzRnJvbU1hdAUNYWNyZXNGcm9tUHJvZCEBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQUEYWRkcgAABQ5hcmJpdHJhZ2VEZWxheQMJAGYCBQ5hcmJSZWxlYXNlVGltZQUDbm93CQACAQkArAICAj9Zb3VyIHN0YWtlZCBsYW5kcyB0b29rIHBhcnQgaW4gYXJiaXRyYWdlLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOYXJiUmVsZWFzZVRpbWUECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECW5ld1BpZWNlcwMJAGYCBQZwaWVjZXMFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzBQZwaWVjZXMECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFBGFkZHIFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpARN1bnN0YWtlTGFuZENhbGxiYWNrAgtsYW5kQXNzZXRJZARhZGRyAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIFEGFjcmVzMkFkZHJlc3NTdHIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNdW5zdGFrZVJlc3VsdAkBE3Vuc3Rha2VMYW5kSW50ZXJuYWwCBQRhZGRyBQtsYW5kQXNzZXRJZAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIFA25pbAkAlwoFCAUNdW5zdGFrZVJlc3VsdAJfMQgFDXVuc3Rha2VSZXN1bHQCXzIIBQ11bnN0YWtlUmVzdWx0Al8zCAUNdW5zdGFrZVJlc3VsdAJfNAUJd2xnUmVzdWx0AWkBE3Vuc3Rha2VMYW5kUkVBRE9OTFkCC2xhbmRBc3NldElkBGFkZHIEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlTGFuZEludGVybmFsAgUEYWRkcgULbGFuZEFzc2V0SWQJAJQKAgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBHHVuc3Rha2VMYW5kc0ZpbmFsaXplQ2FsbGJhY2sBBGFkZHIDCQECIT0CCQClCAEIBQFpBmNhbGxlcgUQYWNyZXMyQWRkcmVzc1N0cgkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBQNuaWwAAAFpARRjb252ZXJ0VW5zdGFrZWRMYW5kcwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAthY3Jlc0Ftb3VudAkAZAIJAGgCBQZwaWVjZXMFBU1VTFQ4CQBpAgkAaAIJAGQCCQBoAgUGcGllY2VzBQppbmZyYUxldmVsBQlhcnRQaWVjZXMFBU1VTFQ4AAUEA3JlcQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCBQthY3Jlc0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUDcmVxBQNyZXEEBWNhbGxiCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEGFjcmVzMkFkZHJlc3NTdHICEnN0YWtlQWNyZXNDYWxsYmFjawkAzAgCBQdhZGRyZXNzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGFjcmVzQXNzZXRJZAULYWNyZXNBbW91bnQFA25pbAMJAAACBQVjYWxsYgUFY2FsbGIJAJQKAgkAzAgCCQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQUDbmlsAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETdW5zdGFrZUR1Y2tDYWxsYmFjawILZHVja0Fzc2V0SWQEYWRkcgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyBRBhY3JlczJBZGRyZXNzU3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlRHVja0ludGVybmFsAgUEYWRkcgULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEJANkEAQULZHVja0Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtkdWNrQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAULZHVja0Fzc2V0SWQFBGFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBE3Vuc3Rha2VEdWNrUkVBRE9OTFkCC2R1Y2tBc3NldElkBGFkZHIEDXVuc3Rha2VSZXN1bHQJARN1bnN0YWtlRHVja0ludGVybmFsAgUEYWRkcgULZHVja0Fzc2V0SWQJAJQKAgUDbmlsBQ11bnN0YWtlUmVzdWx0AWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtmaW5pc2hCbG9jawFpAQxyZXZlYWxSYW5kb20BCG1heFZhbHVlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQEYWRkcgkApQgBCAUBaQZjYWxsZXIECWZpbmlzaEtleQkBCWtleUNvbW1pdAEFBGFkZHIEC2ZpbmlzaEJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUJZmluaXNoS2V5AiRZb3UgaGF2ZSB0byBjb21taXRGb3JSYW5kb20oKSBmaXJzdCEDCQBmAgULZmluaXNoQmxvY2sFBmhlaWdodAkAAgEJAKwCAgI0UmFuZG9tIG51bWJlciBpcyBub3QgcmVhZHkgeWV0LCB3YWl0IHVudGlsIGhlaWdodCA9IAkApAMBBQtmaW5pc2hCbG9jawQHZW50cm9weQkBBXZhbHVlAQgJAQV2YWx1ZQEJAO0HAQULZmluaXNoQmxvY2sDdnJmBARzYWx0CQCbAwEJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFWtleUxhc3RXZWVrVHhJZEJ5VXNlcgEFBGFkZHICAAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgMFCG1heFZhbHVlBQRzYWx0BQdlbnRyb3B5CQCUCgIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkFA25pbAUNcHJvbG9nQWN0aW9ucwUEcmFuZAFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM4IAgUGcmVzdWx0BQ1wcm9sb2dBY3Rpb25zAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwMJAGYCAAAFBWxvZnRGCQACAQIwT3BlcmF0aW9uIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgd2FyZWhvdXNlIHNwYWNlBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDXByb2xvZ0FjdGlvbnMAAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIECm5ld2JpZUFkZHIJAKYIAQUJbmV3UGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQUKbmV3YmllQWRkcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQJb2xkTGFzdFR4CQCiCAEJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRMYXN0VHgJAAIBAiJvbGRQbGF5ZXIgZGlkbid0IGRvIGFueSB0eCBpbiBnYW1lAwkAZwIAAAgJAO8HAQkBBXZhbHVlAQUKbmV3YmllQWRkcglhdmFpbGFibGUJAAIBAhZuZXdQbGF5ZXIgaGFzIG5vIFdBVkVTBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA8kdDAxMDAyNDQxMDA2MzQDCQBnAgAABQ12aXJ0V2xnUG9pbnRzCQCUCgIAAAUDbmlsBAdkZWx0YVhQCQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0Agl0YWtlV2xnWHAJAMwIAgUEYWRkcgUDbmlsBQNuaWwDCQAAAgUHZGVsdGFYUAUHZGVsdGFYUAkAlAoCBQ12aXJ0V2xnUG9pbnRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMa2V5VXNlckxldmVsAQUEYWRkcgkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5VXNlclhQAQUEYWRkcgkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQACBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECXdsZ1BvaW50cwgFDyR0MDEwMDI0NDEwMDYzNAJfMQQKd2xnQWN0aW9ucwgFDyR0MDEwMDI0NDEwMDYzNAJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBE2luaXREdWNrVG91ckF0dGVtcHQBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAx0b3VyTG9jYXRpb24JAKwCAgkApAMBBQZsYXN0SWQCBF9UXzAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDHRvdXJMb2NhdGlvbgUDbmlsBQx0b3VyTG9jYXRpb24BaQEMYnJlYWtBdHRlbXB0AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAQIhPQIJAJEDAgkAtQkCBQtjdXJMb2NhdGlvbgIBXwUKbG9jSWR4VHlwZQIBVAkAAgECIllvdXIgZHVjayBpcyBub3QgaW4gdGhlIHRvdXJuYW1lbnQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDXNhdmVkTG9jYXRpb24FC2N1ckxvY2F0aW9uAWkBFGJyZWFrQXR0ZW1wdENhbGxiYWNrAAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFA25pbAIUYnJlYWtBdHRlbXB0Q2FsbGJhY2sBaQEWZXhpdFRvdXJuYW1lbnRJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwHAWkBD3Byb2Nlc3NEZWxpdmVyeQELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAADCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQlmdW5kVG90YWwJAAIBCQCsAgICIERlbGl2ZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGZ1bmQ9CQEKZml4ZWRQb2ludAIFCWZ1bmRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhjb3VudEtleQkBFGtleVVzZXJEZWxpdmVyeUNvdW50AQUEYWRkcgQHbGFzdERheQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBGFkZHIAAAQFdG9kYXkJAGkCBQNub3cFCURBWU1JTExJUwQFY291bnQDCQAAAgUHbGFzdERheQUFdG9kYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAAABAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEEWFsbG93ZWREZWxpdmVyaWVzCQBkAgUXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMJAGkCBQVhY3JlcwUaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQDCQBnAgUFY291bnQFEWFsbG93ZWREZWxpdmVyaWVzCQACAQkArAICCQCsAgICEVlvdSBhbHJlYWR5IHVzZWQgCQCkAwEFEWFsbG93ZWREZWxpdmVyaWVzAhwgZGVsaXZlcnkgYXR0ZW1wdHMgZm9yIHRvZGF5BA5nbG9iYWxDb3VudEtleQkBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQULZHVja0Fzc2V0SWQEBnJld2FyZAkA/AcEBQ9lY29ub215Q29udHJhY3QCEnNlbmREZWxpdmVyeVJld2FyZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIFBWNvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUEYWRkcgUFdG9kYXkJAMwIAgkBDEludGVnZXJFbnRyeQIFDmdsb2JhbENvdW50S2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ5nbG9iYWxDb3VudEtleQAAAAEFA25pbAUGcmV3YXJkAGOvk0s=", "height": 3382767, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ExNkxWVaSZSQ2JM1yerLrYL2yBkzLXpmVbwtjpf2Cj36 Next: 45MEatBMriNwvV7iNPWMo7VUycqPKfiHjaKbtTSUcxg6 Diff:
Old | New | Differences | |
---|---|---|---|
185 | 185 | func ak () = "contractsBlocked" | |
186 | 186 | ||
187 | 187 | ||
188 | - | func al (am) = (" | |
188 | + | func al (am) = ("lastWeekTxIdByUser_" + am) | |
189 | 189 | ||
190 | 190 | ||
191 | - | func an (ao,ap) = { | |
192 | - | let aq = pow(10, 0, ap, 0, 0, DOWN) | |
193 | - | let ar = toString((ao % aq)) | |
194 | - | let as = drop(toString(aq), (1 + size(ar))) | |
195 | - | (((toString((ao / aq)) + ".") + as) + ar) | |
191 | + | func an (am) = ("curWeekTxIdByUser_" + am) | |
192 | + | ||
193 | + | ||
194 | + | func ao (ap,aq) = { | |
195 | + | let ar = pow(10, 0, aq, 0, 0, DOWN) | |
196 | + | let as = toString((ap % ar)) | |
197 | + | let at = drop(toString(ar), (1 + size(as))) | |
198 | + | (((toString((ap / ar)) + ".") + at) + as) | |
196 | 199 | } | |
197 | 200 | ||
198 | 201 | ||
199 | - | func | |
202 | + | func au (av,aw,ax) = if ((0 >= av)) | |
200 | 203 | then throw("maxValue should be > 0") | |
201 | 204 | else { | |
202 | - | let | |
203 | - | (toInt( | |
205 | + | let ay = sha256_16Kb((aw + ax)) | |
206 | + | (toInt(ay) % av) | |
204 | 207 | } | |
205 | 208 | ||
206 | 209 | ||
207 | - | func | |
210 | + | func az () = min([lastBlock.timestamp, d]) | |
208 | 211 | ||
209 | 212 | ||
210 | - | let | |
213 | + | let aA = "LAND" | |
211 | 214 | ||
212 | - | let | |
215 | + | let aB = "DUCK" | |
213 | 216 | ||
214 | - | let | |
217 | + | let aC = "ROBO" | |
215 | 218 | ||
216 | - | let | |
219 | + | let aD = "PRESALE" | |
217 | 220 | ||
218 | - | let | |
221 | + | let aE = 6 | |
219 | 222 | ||
220 | - | let | |
223 | + | let aF = 25 | |
221 | 224 | ||
222 | - | let | |
225 | + | let aG = 3456000 | |
223 | 226 | ||
224 | - | let | |
227 | + | let aH = 10000000000 | |
225 | 228 | ||
226 | - | let | |
229 | + | let aI = "Africa_F_Africa" | |
227 | 230 | ||
228 | - | let | |
231 | + | let aJ = 39637 | |
229 | 232 | ||
230 | - | let | |
233 | + | let aK = 50000 | |
231 | 234 | ||
232 | - | let | |
235 | + | let aL = 10 | |
233 | 236 | ||
234 | - | let | |
237 | + | let aM = 0 | |
235 | 238 | ||
236 | - | let | |
239 | + | let aN = 200000000 | |
237 | 240 | ||
238 | - | let | |
241 | + | let aO = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
239 | 242 | ||
240 | - | let | |
243 | + | let aP = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
241 | 244 | ||
242 | - | let | |
245 | + | let aQ = 6 | |
243 | 246 | ||
244 | - | let aQ = 9 | |
245 | - | ||
246 | - | let aR = 10 | |
247 | + | let aR = 9 | |
247 | 248 | ||
248 | 249 | let aS = 10 | |
249 | 250 | ||
250 | - | let aT = | |
251 | + | let aT = 10 | |
251 | 252 | ||
252 | - | let aU = | |
253 | + | let aU = 0 | |
253 | 254 | ||
254 | - | let aV = | |
255 | + | let aV = 1 | |
255 | 256 | ||
256 | - | let aW = | |
257 | + | let aW = 2 | |
257 | 258 | ||
258 | - | let aX = | |
259 | + | let aX = 3 | |
259 | 260 | ||
260 | - | let aY = | |
261 | + | let aY = 4 | |
261 | 262 | ||
262 | - | let aZ = | |
263 | + | let aZ = 0 | |
263 | 264 | ||
264 | - | let ba = | |
265 | + | let ba = 1 | |
265 | 266 | ||
266 | - | let bb = | |
267 | + | let bb = 2 | |
267 | 268 | ||
268 | - | let bc = | |
269 | + | let bc = 3 | |
269 | 270 | ||
270 | - | let bd = | |
271 | + | let bd = 0 | |
271 | 272 | ||
272 | - | let be = | |
273 | + | let be = 1 | |
273 | 274 | ||
274 | - | let bf = | |
275 | + | let bf = 2 | |
275 | 276 | ||
276 | - | let bg = | |
277 | + | let bg = 3 | |
277 | 278 | ||
278 | - | let bh = | |
279 | + | let bh = 1 | |
279 | 280 | ||
280 | - | func bi (bj) = ("no_" + bj) | |
281 | + | let bi = 2 | |
282 | + | ||
283 | + | func bj (bk) = ("no_" + bk) | |
281 | 284 | ||
282 | 285 | ||
283 | - | func | |
286 | + | func bl (bk) = ("lcna_" + bk) | |
284 | 287 | ||
285 | 288 | ||
286 | - | func | |
289 | + | func bm (bk) = ("st_" + bk) | |
287 | 290 | ||
288 | 291 | ||
289 | - | func | |
292 | + | func bn (bo,bk) = makeString(["las", bo, bk], "_") | |
290 | 293 | ||
291 | 294 | ||
292 | - | func | |
295 | + | func bp (bq,bk,ab) = ((((("sttao_" + bq) + "_") + bk) + "_") + ab) | |
293 | 296 | ||
294 | 297 | ||
295 | - | func | |
298 | + | func br (bs) = ("wh_" + bs) | |
296 | 299 | ||
297 | 300 | ||
298 | - | func | |
301 | + | func bt (bk) = ("infraLevel_" + bk) | |
299 | 302 | ||
300 | 303 | ||
301 | - | func | |
304 | + | func bu (bk) = ("duckCustomNameByAssetId_" + bk) | |
302 | 305 | ||
303 | 306 | ||
304 | - | func | |
307 | + | func bv (am) = ("accountCustomNameByAddr_" + am) | |
305 | 308 | ||
306 | 309 | ||
307 | - | func | |
310 | + | func bw (am) = ("accRefBy_" + am) | |
308 | 311 | ||
309 | 312 | ||
310 | - | func | |
313 | + | func bx (by) = ("onboardArtActivatedOnDuck_" + by) | |
311 | 314 | ||
312 | 315 | ||
313 | - | func | |
316 | + | func bz (am) = ("onboardArtActivatedDuckBy_" + am) | |
314 | 317 | ||
315 | 318 | ||
316 | - | func | |
319 | + | func bA (am) = ("accReferrals_" + am) | |
317 | 320 | ||
318 | 321 | ||
319 | - | func | |
322 | + | func bB (bk) = ("duckOwner_" + bk) | |
320 | 323 | ||
321 | 324 | ||
322 | - | func | |
325 | + | func bC (ab) = ("stakedDuckByOwner_" + ab) | |
323 | 326 | ||
324 | 327 | ||
325 | - | func | |
328 | + | func bD (by) = ("backPack_" + by) | |
326 | 329 | ||
327 | 330 | ||
328 | - | func | |
331 | + | func bE (by) = ("duckLocation_" + by) | |
329 | 332 | ||
330 | 333 | ||
331 | - | func | |
334 | + | func bF (bG) = ("%s%s__userGwlReleaseTime__" + bG) | |
332 | 335 | ||
333 | 336 | ||
334 | - | let | |
337 | + | let bH = "deliveryFund" | |
335 | 338 | ||
336 | - | let | |
339 | + | let bI = "%s__lastTourId" | |
337 | 340 | ||
338 | - | let | |
341 | + | let bJ = 100000000 | |
339 | 342 | ||
340 | - | let | |
343 | + | let bK = 3200 | |
341 | 344 | ||
342 | - | let | |
345 | + | let bL = 4000 | |
343 | 346 | ||
344 | - | let | |
347 | + | let bM = 3 | |
345 | 348 | ||
346 | - | let | |
349 | + | let bN = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
347 | 350 | ||
348 | - | let | |
351 | + | let bO = 0 | |
349 | 352 | ||
350 | - | let | |
353 | + | let bP = 1 | |
351 | 354 | ||
352 | - | let | |
355 | + | let bQ = 2 | |
353 | 356 | ||
354 | - | let | |
357 | + | let bR = 3 | |
355 | 358 | ||
356 | - | let bR = 4 | |
357 | - | ||
358 | - | let bS = 2 | |
359 | + | let bS = 4 | |
359 | 360 | ||
360 | 361 | let bT = 2 | |
361 | 362 | ||
362 | - | let bU = | |
363 | + | let bU = 2 | |
363 | 364 | ||
364 | - | func bV (bx) = ("duckHealth_" + bx) | |
365 | + | let bV = 30 | |
366 | + | ||
367 | + | func bW (by) = ("duckHealth_" + by) | |
365 | 368 | ||
366 | 369 | ||
367 | - | func | |
370 | + | func bX (by) = ("duckChars_" + by) | |
368 | 371 | ||
369 | 372 | ||
370 | - | func | |
373 | + | func bY (by) = ("duckXP_" + by) | |
371 | 374 | ||
372 | 375 | ||
373 | - | func | |
376 | + | func bZ (by) = ("duckLevel_" + by) | |
374 | 377 | ||
375 | 378 | ||
376 | - | func | |
379 | + | func ca (by) = ("duckFreePoints_" + by) | |
377 | 380 | ||
378 | 381 | ||
379 | - | func | |
382 | + | func cb (by) = ("duckEquipment_" + by) | |
380 | 383 | ||
381 | 384 | ||
382 | - | func | |
385 | + | func cc (am) = ("userXP_" + am) | |
383 | 386 | ||
384 | 387 | ||
385 | - | func | |
388 | + | func cd (am) = ("userLevel_" + am) | |
386 | 389 | ||
387 | 390 | ||
388 | - | func | |
391 | + | func ce (am) = ("userFreePoints_" + am) | |
389 | 392 | ||
390 | 393 | ||
391 | - | func | |
394 | + | func cf (by) = ("savedHealth_" + by) | |
392 | 395 | ||
393 | 396 | ||
394 | - | func | |
397 | + | func cg (by) = ("savedLocation_" + by) | |
395 | 398 | ||
396 | 399 | ||
397 | - | func | |
400 | + | func ch (by) = ("totalDeliveryCountByDuck_" + by) | |
398 | 401 | ||
399 | 402 | ||
400 | - | func | |
403 | + | func ci (am) = ("userDeliveryCount_" + am) | |
401 | 404 | ||
402 | 405 | ||
403 | - | func | |
406 | + | func cj (am) = ("userLastDeliveryDay_" + am) | |
404 | 407 | ||
405 | 408 | ||
406 | - | let cj = 10000 | |
407 | - | ||
408 | - | let ck = 1000000 | |
409 | + | let ck = 10000 | |
409 | 410 | ||
410 | 411 | let cl = 1000000 | |
411 | 412 | ||
412 | - | func cm (cn) = fraction(bJ, pow(cn, 4, bK, 4, 4, DOWN), bI) | |
413 | + | let cm = 1000000 | |
414 | + | ||
415 | + | func cn (co) = fraction(bK, pow(co, 4, bL, 4, 4, DOWN), bJ) | |
413 | 416 | ||
414 | 417 | ||
415 | - | func | |
418 | + | func cp (cq) = (100 + cq) | |
416 | 419 | ||
417 | 420 | ||
418 | - | func | |
419 | - | let | |
420 | - | [ | |
421 | + | func cr (cs,ct) = { | |
422 | + | let cu = cn(ct) | |
423 | + | [cu, (bM * (cu - cs))] | |
421 | 424 | } | |
422 | 425 | ||
423 | 426 | ||
424 | - | let | |
427 | + | let cv = 86400000 | |
425 | 428 | ||
426 | - | func | |
429 | + | func cw (am) = ("lastArbTimeUser_" + am) | |
427 | 430 | ||
428 | 431 | ||
429 | - | func | |
432 | + | func cx (am) = ("acresStakedAmountByUser_" + am) | |
430 | 433 | ||
431 | 434 | ||
432 | - | let | |
435 | + | let cy = 5000000 | |
433 | 436 | ||
434 | - | let | |
437 | + | let cz = 50 | |
435 | 438 | ||
436 | - | let | |
439 | + | let cA = 500 | |
437 | 440 | ||
438 | - | func | |
441 | + | func cB (cC) = ("lcn_" + cC) | |
439 | 442 | ||
440 | 443 | ||
441 | - | func | |
444 | + | func cD (bk,ab) = ((("ilao_" + bk) + "_") + ab) | |
442 | 445 | ||
443 | 446 | ||
444 | - | func | |
447 | + | func cE (cF) = ("lo_" + cF) | |
445 | 448 | ||
446 | 449 | ||
447 | - | func | |
450 | + | func cG (cC) = ("duckByCustomName_" + cC) | |
448 | 451 | ||
449 | 452 | ||
450 | - | func | |
453 | + | func cH (cC) = ("accountByCustomName_" + cC) | |
451 | 454 | ||
452 | 455 | ||
453 | - | func | |
456 | + | func cI () = "oldiesList" | |
454 | 457 | ||
455 | 458 | ||
456 | - | let | |
459 | + | let cJ = 0 | |
457 | 460 | ||
458 | - | let | |
461 | + | let cK = 1 | |
459 | 462 | ||
460 | - | let | |
463 | + | let cL = 2 | |
461 | 464 | ||
462 | - | func | |
463 | - | let | |
464 | - | if ((0 >= | |
465 | + | func cM (cN,cO) = { | |
466 | + | let cP = (((((cO[0] + cO[1]) + cO[2]) + cO[3]) + cO[4]) + cO[5]) | |
467 | + | if ((0 >= cP)) | |
465 | 468 | then throw("Zero weights sum") | |
466 | 469 | else { | |
467 | - | let | |
468 | - | func | |
470 | + | let cQ = fraction(cN, m, cP) | |
471 | + | func cR (cS,cT) = (cS :+ fraction(cT, cQ, m)) | |
469 | 472 | ||
470 | - | let | |
471 | - | let | |
472 | - | let | |
473 | - | func | |
474 | - | then | |
475 | - | else | |
473 | + | let cU = cO | |
474 | + | let cV = size(cU) | |
475 | + | let cW = nil | |
476 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
477 | + | then cY | |
478 | + | else cR(cY, cU[cZ]) | |
476 | 479 | ||
477 | - | func | |
478 | - | then | |
480 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
481 | + | then cY | |
479 | 482 | else throw("List size exceeds 6") | |
480 | 483 | ||
481 | - | | |
484 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
482 | 485 | } | |
483 | 486 | } | |
484 | 487 | ||
485 | 488 | ||
486 | - | func | |
487 | - | let | |
488 | - | if ((size( | |
489 | + | func db (cN) = { | |
490 | + | let dc = split(value(getString(X())), "_") | |
491 | + | if ((size(dc) != aE)) | |
489 | 492 | then throw("Wrong proportions data") | |
490 | 493 | else { | |
491 | - | let | |
492 | - | | |
494 | + | let dd = [parseIntValue(dc[0]), parseIntValue(dc[1]), parseIntValue(dc[2]), parseIntValue(dc[3]), parseIntValue(dc[4]), parseIntValue(dc[5])] | |
495 | + | cM(cN, dd) | |
493 | 496 | } | |
494 | 497 | } | |
495 | 498 | ||
496 | 499 | ||
497 | - | func | |
498 | - | let | |
500 | + | func de (df) = { | |
501 | + | let dg = if ((df == "")) | |
499 | 502 | then nil | |
500 | - | else split_4C( | |
501 | - | func | |
502 | - | let | |
503 | - | let | |
504 | - | then parseIntValue( | |
503 | + | else split_4C(df, "_") | |
504 | + | func dh (cS,di) = { | |
505 | + | let dj = (size(cS) / 8) | |
506 | + | let dk = if ((size(dg) > dj)) | |
507 | + | then parseIntValue(dg[dj]) | |
505 | 508 | else 0 | |
506 | - | ( | |
509 | + | (cS + toBytes(dk)) | |
507 | 510 | } | |
508 | 511 | ||
509 | - | let | |
510 | - | let | |
511 | - | let | |
512 | - | func | |
513 | - | then | |
514 | - | else | |
512 | + | let cU = aP | |
513 | + | let cV = size(cU) | |
514 | + | let cW = base58'' | |
515 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
516 | + | then cY | |
517 | + | else dh(cY, cU[cZ]) | |
515 | 518 | ||
516 | - | func | |
517 | - | then | |
519 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
520 | + | then cY | |
518 | 521 | else throw("List size exceeds 50") | |
519 | 522 | ||
520 | - | | |
523 | + | da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
521 | 524 | } | |
522 | 525 | ||
523 | 526 | ||
524 | - | func | |
525 | - | func | |
526 | - | let | |
527 | - | let | |
528 | - | ( | |
527 | + | func dl (dm) = { | |
528 | + | func dn (cS,di) = { | |
529 | + | let dj = size(cS) | |
530 | + | let do = take(drop(dm, (8 * dj)), 8) | |
531 | + | (cS :+ toString(toInt(do))) | |
529 | 532 | } | |
530 | 533 | ||
531 | 534 | makeString_2C({ | |
532 | - | let | |
533 | - | let | |
534 | - | let | |
535 | - | func | |
536 | - | then | |
537 | - | else | |
535 | + | let cU = aP | |
536 | + | let cV = size(cU) | |
537 | + | let cW = nil | |
538 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
539 | + | then cY | |
540 | + | else dn(cY, cU[cZ]) | |
538 | 541 | ||
539 | - | func | |
540 | - | then | |
542 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
543 | + | then cY | |
541 | 544 | else throw("List size exceeds 50") | |
542 | 545 | ||
543 | - | | |
546 | + | da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
544 | 547 | }, "_") | |
545 | 548 | } | |
546 | 549 | ||
547 | 550 | ||
548 | - | func | |
549 | - | func | |
550 | - | let | |
551 | - | then | |
551 | + | func dp (dq,dr) = { | |
552 | + | func ds (cS,dj) = { | |
553 | + | let dt = if ((size(dq) > (7 + dj))) | |
554 | + | then dq[(7 + dj)] | |
552 | 555 | else 0 | |
553 | - | if ((parseIntValue( | |
554 | - | then throw(("Requirement not satisfied: " + | |
556 | + | if ((parseIntValue(dr[dj]) > (dq[dj] + dt))) | |
557 | + | then throw(("Requirement not satisfied: " + bN[dj])) | |
555 | 558 | else true | |
556 | 559 | } | |
557 | 560 | ||
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | func | |
562 | - | then | |
563 | - | else | |
561 | + | let cU = [0, 1, 2, 3, 4, 5, 6] | |
562 | + | let cV = size(cU) | |
563 | + | let cW = false | |
564 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
565 | + | then cY | |
566 | + | else ds(cY, cU[cZ]) | |
564 | 567 | ||
565 | - | func | |
566 | - | then | |
568 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
569 | + | then cY | |
567 | 570 | else throw("List size exceeds 7") | |
568 | 571 | ||
569 | - | | |
572 | + | da(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7) | |
570 | 573 | } | |
571 | 574 | ||
572 | 575 | ||
573 | - | func | |
574 | - | let | |
575 | - | if ((size( | |
576 | + | func du (dv,dg,dw,dx,dy,dz,dq) = { | |
577 | + | let dA = split(dv, ":") | |
578 | + | if ((size(dA) != 2)) | |
576 | 579 | then throw("Incorrect format, should be index:amount") | |
577 | - | else if (if (!( | |
578 | - | then (size( | |
580 | + | else if (if (!(dw)) | |
581 | + | then (size(dA[0]) != 2) | |
579 | 582 | else false) | |
580 | 583 | then throw("Product idx should be 2 digits, zero padded") | |
581 | 584 | else { | |
582 | - | let | |
583 | - | let | |
584 | - | if (if ((0 > | |
585 | + | let dB = parseIntValue(dA[0]) | |
586 | + | let dC = parseIntValue(dA[1]) | |
587 | + | if (if ((0 > dB)) | |
585 | 588 | then true | |
586 | - | else ( | |
589 | + | else (dB >= size(aP))) | |
587 | 590 | then throw("Unknown product idx") | |
588 | - | else if ((0 > | |
591 | + | else if ((0 > dC)) | |
589 | 592 | then throw("Count can't be negative") | |
590 | - | else if (( | |
591 | - | then throw(((("Can't put more than " + toString( | |
592 | - | else if (( | |
593 | - | then $Tuple2( | |
593 | + | else if ((dC > bV)) | |
594 | + | then throw(((("Can't put more than " + toString(bV)) + " of ") + aO[dB])) | |
595 | + | else if ((dC == 0)) | |
596 | + | then $Tuple2(dg, false) | |
594 | 597 | else { | |
595 | - | let | |
596 | - | let | |
597 | - | let | |
598 | - | let | |
599 | - | if (if (!( | |
600 | - | then ( | |
598 | + | let dD = take(dg, (8 * dB)) | |
599 | + | let dk = toInt(take(drop(dg, (8 * dB)), 8)) | |
600 | + | let dE = drop(dg, (8 * (dB + 1))) | |
601 | + | let di = split(aP[dB], "_") | |
602 | + | if (if (!(dw)) | |
603 | + | then (dC > dk) | |
601 | 604 | else false) | |
602 | - | then throw(((((("You have " + toString( | |
605 | + | then throw(((((("You have " + toString(dk)) + " of ") + aO[dB]) + ", but tried to use ") + toString(dC))) | |
603 | 606 | else { | |
604 | - | let | |
605 | - | then | |
607 | + | let dF = if (if (!(dw)) | |
608 | + | then dp(dq, split(di[aR], ",")) | |
606 | 609 | else false) | |
607 | 610 | then { | |
608 | - | let | |
609 | - | if (( | |
611 | + | let dG = di[aS] | |
612 | + | if ((dG == "")) | |
610 | 613 | then throw("Item cannot be equipped") | |
611 | 614 | else { | |
612 | - | let | |
613 | - | let | |
614 | - | if (( | |
615 | + | let dH = parseIntValue(dG) | |
616 | + | let dI = (dH / 100) | |
617 | + | if ((dx != dI)) | |
615 | 618 | then throw("Segment incompatible") | |
616 | 619 | else { | |
617 | - | let | |
618 | - | if (( | |
620 | + | let dJ = ((dH % 100) / 10) | |
621 | + | if ((dy != dJ)) | |
619 | 622 | then throw("Slot incompatible") | |
620 | 623 | else { | |
621 | - | let | |
622 | - | if (if (( | |
623 | - | then ( | |
624 | + | let dK = (dH % 10) | |
625 | + | if (if ((dz != 0)) | |
626 | + | then (dK > 1) | |
624 | 627 | else false) | |
625 | 628 | then throw("Big items should occupy slot 0") | |
626 | - | else ( | |
629 | + | else (dK > 1) | |
627 | 630 | } | |
628 | 631 | } | |
629 | 632 | } | |
630 | 633 | } | |
631 | 634 | else false | |
632 | - | $Tuple2((( | |
633 | - | then | |
634 | - | else -( | |
635 | + | $Tuple2(((dD + toBytes((dk + (if (dw) | |
636 | + | then dC | |
637 | + | else -(dC))))) + dE), dF) | |
635 | 638 | } | |
636 | 639 | } | |
637 | 640 | } | |
638 | 641 | } | |
639 | 642 | ||
640 | 643 | ||
641 | - | func | |
644 | + | func dL (dM,dN,dw,dx,dy,dO) = if ((dM != "")) | |
642 | 645 | then { | |
643 | - | let | |
644 | - | if ((size( | |
646 | + | let dP = split(dM, ",") | |
647 | + | if ((size(dP) > bU)) | |
645 | 648 | then throw("Wrong slots format") | |
646 | 649 | else { | |
647 | - | let | |
648 | - | let | |
649 | - | then | |
650 | + | let dQ = dP[0] | |
651 | + | let dR = if ((size(dP) > 1)) | |
652 | + | then dP[1] | |
650 | 653 | else "" | |
651 | - | if (if (( | |
652 | - | then ( | |
654 | + | if (if ((dQ == "")) | |
655 | + | then (dR == "") | |
653 | 656 | else false) | |
654 | - | then | |
657 | + | then dN | |
655 | 658 | else { | |
656 | - | let | |
657 | - | then | |
658 | - | else $Tuple2( | |
659 | - | if (( | |
660 | - | then if ( | |
659 | + | let dS = if ((dQ != "")) | |
660 | + | then du(dQ, dN, dw, dx, dy, 0, dO) | |
661 | + | else $Tuple2(dN, false) | |
662 | + | if ((dR != "")) | |
663 | + | then if (dS._2) | |
661 | 664 | then throw("Big item already occupies slot") | |
662 | - | else | |
663 | - | else | |
665 | + | else du(dR, dS._1, dw, dx, dy, 1, dO)._1 | |
666 | + | else dS._1 | |
664 | 667 | } | |
665 | 668 | } | |
666 | 669 | } | |
667 | - | else | |
670 | + | else dN | |
668 | 671 | ||
669 | 672 | ||
670 | - | func | |
671 | - | func | |
672 | - | let | |
673 | - | let | |
674 | - | if ((size( | |
673 | + | func dT (dU,dV,dw,dO) = { | |
674 | + | func dx (cS,dW) = { | |
675 | + | let dj = cS._1 | |
676 | + | let dy = split(dW, ";") | |
677 | + | if ((size(dy) != bT)) | |
675 | 678 | then throw("Wrong segment format") | |
676 | 679 | else { | |
677 | - | let | |
678 | - | let | |
679 | - | if (if (( | |
680 | - | then ( | |
680 | + | let dX = dy[0] | |
681 | + | let dY = dy[1] | |
682 | + | if (if ((dX == "")) | |
683 | + | then (dY == "") | |
681 | 684 | else false) | |
682 | - | then $Tuple2(( | |
685 | + | then $Tuple2((dj + 1), cS._2) | |
683 | 686 | else { | |
684 | - | let | |
685 | - | $Tuple2(( | |
687 | + | let dZ = dL(dX, cS._2, dw, dj, 0, dO) | |
688 | + | $Tuple2((dj + 1), dL(dY, dZ, dw, dj, 1, dO)) | |
686 | 689 | } | |
687 | 690 | } | |
688 | 691 | } | |
689 | 692 | ||
690 | - | ( let | |
691 | - | let | |
692 | - | let | |
693 | - | func | |
694 | - | then | |
695 | - | else | |
693 | + | ( let cU = dU | |
694 | + | let cV = size(cU) | |
695 | + | let cW = $Tuple2(0, dV) | |
696 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
697 | + | then cY | |
698 | + | else dx(cY, cU[cZ]) | |
696 | 699 | ||
697 | - | func | |
698 | - | then | |
700 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
701 | + | then cY | |
699 | 702 | else throw("List size exceeds 6") | |
700 | 703 | ||
701 | - | | |
704 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6))._2 | |
702 | 705 | } | |
703 | 706 | ||
704 | 707 | ||
705 | - | func | |
708 | + | func ea (eb,ec,ed,ee) = if ((size(eb) != aE)) | |
706 | 709 | then throw("Wrong proportions data") | |
707 | 710 | else { | |
708 | - | func | |
709 | - | let | |
710 | - | if ((0 > | |
711 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
712 | - | else ( | |
711 | + | func ef (cS,eg) = { | |
712 | + | let eh = (parseIntValue(eb[eg]) + ((ee * ec[eg]) * ed)) | |
713 | + | if ((0 > eh)) | |
714 | + | then throw(((((((("Panic! Pieces of type=" + toString(eg)) + ", sign=") + toString(ee)) + ", terrainCounts[i]=") + toString(ec[eg])) + ", landSizeIndex=") + toString(ed))) | |
715 | + | else (cS :+ toString(eh)) | |
713 | 716 | } | |
714 | 717 | ||
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | func | |
719 | - | then | |
720 | - | else | |
718 | + | let cU = t | |
719 | + | let cV = size(cU) | |
720 | + | let cW = nil | |
721 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
722 | + | then cY | |
723 | + | else ef(cY, cU[cZ]) | |
721 | 724 | ||
722 | - | func | |
723 | - | then | |
725 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
726 | + | then cY | |
724 | 727 | else throw("List size exceeds 6") | |
725 | 728 | ||
726 | - | | |
729 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
727 | 730 | } | |
728 | 731 | ||
729 | 732 | ||
730 | - | func | |
731 | - | let | |
732 | - | makeString( | |
733 | + | func ei (ec,ed,ee) = { | |
734 | + | let eb = split(valueOrElse(getString(X()), "0_0_0_0_0_0"), "_") | |
735 | + | makeString(ea(eb, ec, ed, ee), "_") | |
733 | 736 | } | |
734 | 737 | ||
735 | 738 | ||
736 | - | func | |
739 | + | func ej (ek) = [(size(split(ek, "A")) - 1), (size(split(ek, "B")) - 1), (size(split(ek, "C")) - 1), (size(split(ek, "D")) - 1), (size(split(ek, "E")) - 1), (size(split(ek, "F")) - 1)] | |
737 | 740 | ||
738 | 741 | ||
739 | - | func | |
740 | - | func | |
741 | - | let | |
742 | - | ( | |
742 | + | func el (em,ec,en,ed,eo) = { | |
743 | + | func ep (cS,eg) = { | |
744 | + | let eq = ((fraction(en, eo, cv) * ec[eg]) * ed) | |
745 | + | (cS :+ toString((parseIntValue(em[eg]) + eq))) | |
743 | 746 | } | |
744 | 747 | ||
745 | - | let | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | func | |
750 | - | then | |
751 | - | else | |
748 | + | let dd = { | |
749 | + | let cU = t | |
750 | + | let cV = size(cU) | |
751 | + | let cW = nil | |
752 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
753 | + | then cY | |
754 | + | else ep(cY, cU[cZ]) | |
752 | 755 | ||
753 | - | func | |
754 | - | then | |
756 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
757 | + | then cY | |
755 | 758 | else throw("List size exceeds 6") | |
756 | 759 | ||
757 | - | | |
760 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
758 | 761 | } | |
759 | - | makeString( | |
762 | + | makeString(dd, "_") | |
760 | 763 | } | |
761 | 764 | ||
762 | 765 | ||
763 | - | func | |
764 | - | func | |
765 | - | let | |
766 | - | let | |
767 | - | $Tuple2(( | |
766 | + | func er (em,ec,en,ed,eo) = { | |
767 | + | func ep (cS,eg) = { | |
768 | + | let eq = ((fraction(en, eo, cv) * ec[eg]) * ed) | |
769 | + | let es = (parseIntValue(em[eg]) + eq) | |
770 | + | $Tuple2((cS._1 :+ es), (cS._2 + es)) | |
768 | 771 | } | |
769 | 772 | ||
770 | - | let | |
771 | - | let | |
772 | - | let | |
773 | - | func | |
774 | - | then | |
775 | - | else | |
773 | + | let cU = t | |
774 | + | let cV = size(cU) | |
775 | + | let cW = $Tuple2(nil, 0) | |
776 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
777 | + | then cY | |
778 | + | else ep(cY, cU[cZ]) | |
776 | 779 | ||
777 | - | func | |
778 | - | then | |
780 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
781 | + | then cY | |
779 | 782 | else throw("List size exceeds 6") | |
780 | 783 | ||
781 | - | | |
784 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
782 | 785 | } | |
783 | 786 | ||
784 | 787 | ||
785 | - | func | |
786 | - | func | |
787 | - | let | |
788 | - | $Tuple2(( | |
788 | + | func et (ec,en,ed,eo) = { | |
789 | + | func ep (cS,eu) = { | |
790 | + | let eq = ((fraction(en, eo, cv) * eu) * ed) | |
791 | + | $Tuple2((cS._1 :+ eq), (cS._2 + eq)) | |
789 | 792 | } | |
790 | 793 | ||
791 | - | let | |
792 | - | let | |
793 | - | let | |
794 | - | func | |
795 | - | then | |
796 | - | else | |
794 | + | let cU = ec | |
795 | + | let cV = size(cU) | |
796 | + | let cW = $Tuple2(nil, 0) | |
797 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
798 | + | then cY | |
799 | + | else ep(cY, cU[cZ]) | |
797 | 800 | ||
798 | - | func | |
799 | - | then | |
801 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
802 | + | then cY | |
800 | 803 | else throw("List size exceeds 6") | |
801 | 804 | ||
802 | - | | |
805 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
803 | 806 | } | |
804 | 807 | ||
805 | 808 | ||
806 | - | func | |
807 | - | let | |
808 | - | let | |
809 | - | if (( | |
810 | - | then $Tuple2(makeString( | |
811 | - | else if (( | |
809 | + | func ev (ew,ex,ey,ez) = { | |
810 | + | let eA = ey._1 | |
811 | + | let eB = ey._2 | |
812 | + | if ((eB == 0)) | |
813 | + | then $Tuple2(makeString(ew, "_"), makeString(ex, "_")) | |
814 | + | else if ((ez >= eB)) | |
812 | 815 | then { | |
813 | - | func | |
816 | + | func eC (cS,eg) = (cS :+ toString((parseIntValue(ew[eg]) + eA[eg]))) | |
814 | 817 | ||
815 | - | let | |
816 | - | let | |
817 | - | let | |
818 | - | let | |
819 | - | func | |
820 | - | then | |
821 | - | else | |
818 | + | let dd = { | |
819 | + | let cU = t | |
820 | + | let cV = size(cU) | |
821 | + | let cW = nil | |
822 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
823 | + | then cY | |
824 | + | else eC(cY, cU[cZ]) | |
822 | 825 | ||
823 | - | func | |
824 | - | then | |
826 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
827 | + | then cY | |
825 | 828 | else throw("List size exceeds 6") | |
826 | 829 | ||
827 | - | | |
830 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
828 | 831 | } | |
829 | - | $Tuple2(makeString( | |
832 | + | $Tuple2(makeString(dd, "_"), makeString(ex, "_")) | |
830 | 833 | } | |
831 | 834 | else { | |
832 | - | func | |
833 | - | let | |
834 | - | $Tuple2(( | |
835 | + | func eD (cS,eg) = { | |
836 | + | let eE = fraction(eA[eg], ez, eB) | |
837 | + | $Tuple2((cS._1 :+ toString((parseIntValue(ew[eg]) + eE))), (cS._2 :+ toString(((parseIntValue(ex[eg]) + eA[eg]) - eE)))) | |
835 | 838 | } | |
836 | 839 | ||
837 | - | let | |
838 | - | let | |
839 | - | let | |
840 | - | let | |
841 | - | func | |
842 | - | then | |
843 | - | else | |
840 | + | let dd = { | |
841 | + | let cU = t | |
842 | + | let cV = size(cU) | |
843 | + | let cW = $Tuple2(nil, nil) | |
844 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
845 | + | then cY | |
846 | + | else eD(cY, cU[cZ]) | |
844 | 847 | ||
845 | - | func | |
846 | - | then | |
848 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
849 | + | then cY | |
847 | 850 | else throw("List size exceeds 6") | |
848 | 851 | ||
849 | - | | |
852 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
850 | 853 | } | |
851 | - | $Tuple2(makeString( | |
854 | + | $Tuple2(makeString(dd._1, "_"), makeString(dd._2, "_")) | |
852 | 855 | } | |
853 | 856 | } | |
854 | 857 | ||
855 | 858 | ||
856 | - | func | |
857 | - | let | |
858 | - | [toString(valueOrElse(parseInt( | |
859 | - | then | |
860 | - | else "0_0_0_0_0_0", if ((size(split( | |
861 | - | then | |
862 | - | else "0_0_0_0_0_0", | |
859 | + | func eF (eG) = { | |
860 | + | let eH = split(valueOrElse(getString(eG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
861 | + | [toString(valueOrElse(parseInt(eH[bd]), 0)), if ((size(split(eH[be], "_")) == aE)) | |
862 | + | then eH[be] | |
863 | + | else "0_0_0_0_0_0", if ((size(split(eH[bf], "_")) == aE)) | |
864 | + | then eH[bf] | |
865 | + | else "0_0_0_0_0_0", eH[bg]] | |
863 | 866 | } | |
864 | 867 | ||
865 | 868 | ||
866 | - | func | |
867 | - | let | |
868 | - | (( | |
869 | + | func eI (eJ) = { | |
870 | + | let dA = split(eJ, "_") | |
871 | + | ((aH * (parseIntValue(dA[1]) + 1)) * parseIntValue(dA[0])) | |
869 | 872 | } | |
870 | 873 | ||
871 | 874 | ||
872 | - | func | |
873 | - | let | |
874 | - | func | |
875 | + | func eK (eL) = { | |
876 | + | let eM = eL[aX] | |
877 | + | func eN (cS,eO) = (cS + parseIntValue(eO)) | |
875 | 878 | ||
876 | - | func | |
877 | - | let I = | |
878 | - | let | |
879 | - | $Tuple2((I + 1), ( | |
879 | + | func eP (cS,eO) = { | |
880 | + | let I = cS._1 | |
881 | + | let eQ = (((parseIntValue(eO) + aT) - 1) / aT) | |
882 | + | $Tuple2((I + 1), (cS._2 + (eQ * n))) | |
880 | 883 | } | |
881 | 884 | ||
882 | - | let | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
886 | - | func | |
887 | - | then | |
888 | - | else | |
885 | + | let eR = { | |
886 | + | let cU = split(eL[aV], "_") | |
887 | + | let cV = size(cU) | |
888 | + | let cW = 0 | |
889 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
890 | + | then cY | |
891 | + | else eN(cY, cU[cZ]) | |
889 | 892 | ||
890 | - | func | |
891 | - | then | |
893 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
894 | + | then cY | |
892 | 895 | else throw("List size exceeds 6") | |
893 | 896 | ||
894 | - | | |
897 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
895 | 898 | } | |
896 | - | let | |
897 | - | let | |
898 | - | let | |
899 | - | let | |
900 | - | func | |
901 | - | then | |
902 | - | else | |
899 | + | let eS = { | |
900 | + | let cU = split(eL[aW], "_") | |
901 | + | let cV = size(cU) | |
902 | + | let cW = 0 | |
903 | + | func eT (cY,cZ) = if ((cZ >= cV)) | |
904 | + | then cY | |
905 | + | else eN(cY, cU[cZ]) | |
903 | 906 | ||
904 | - | func | |
905 | - | then | |
907 | + | func eU (cY,cZ) = if ((cZ >= cV)) | |
908 | + | then cY | |
906 | 909 | else throw("List size exceeds 6") | |
907 | 910 | ||
908 | - | eT( | |
911 | + | eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6) | |
909 | 912 | } | |
910 | - | let | |
913 | + | let eV = if ((eM == "")) | |
911 | 914 | then 0 | |
912 | - | else ( let | |
913 | - | let | |
914 | - | let | |
915 | - | func | |
916 | - | then | |
917 | - | else | |
915 | + | else ( let cU = split_4C(eM, "_") | |
916 | + | let cV = size(cU) | |
917 | + | let cW = $Tuple2(0, 0) | |
918 | + | func eW (cY,cZ) = if ((cZ >= cV)) | |
919 | + | then cY | |
920 | + | else eP(cY, cU[cZ]) | |
918 | 921 | ||
919 | - | func | |
920 | - | then | |
922 | + | func eX (cY,cZ) = if ((cZ >= cV)) | |
923 | + | then cY | |
921 | 924 | else throw("List size exceeds 50") | |
922 | 925 | ||
923 | - | eW( | |
924 | - | (( | |
926 | + | eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
927 | + | ((eR + eS) + eV) | |
925 | 928 | } | |
926 | 929 | ||
927 | 930 | ||
928 | - | func | |
929 | - | let | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | let | |
934 | - | let | |
935 | - | then makeString(["0", toString( | |
931 | + | func eY (eZ,fa,fb) = { | |
932 | + | let eJ = ((toString(fa) + "_") + toString(fb)) | |
933 | + | let fc = eI(eJ) | |
934 | + | let fd = valueOrElse(getString(eZ), (eJ + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
935 | + | let fe = split_4C(fd, ":") | |
936 | + | let ff = eK(fe) | |
937 | + | let fg = if ((5 > size(fe))) | |
938 | + | then makeString(["0", toString(ff), toString((fc - ff)), toString(fc)], "_") | |
936 | 939 | else { | |
937 | - | let | |
938 | - | let | |
939 | - | let | |
940 | - | then parseIntValue( | |
941 | - | else | |
942 | - | makeString([toString( | |
940 | + | let fh = split(fe[aY], "_") | |
941 | + | let fi = parseIntValue(fh[aZ]) | |
942 | + | let fj = if ((size(fh) > 1)) | |
943 | + | then parseIntValue(fh[ba]) | |
944 | + | else ff | |
945 | + | makeString([toString(fi), toString(fj), toString(((fc - fi) - fj)), toString(fc)], "_") | |
943 | 946 | } | |
944 | - | [ | |
945 | - | then | |
946 | - | else "0_0_0_0_0_0", if ((size(split( | |
947 | - | then | |
948 | - | else "0_0_0_0_0_0", | |
947 | + | [fe[aU], if ((size(split(fe[aV], "_")) == aE)) | |
948 | + | then fe[aV] | |
949 | + | else "0_0_0_0_0_0", if ((size(split(fe[aW], "_")) == aE)) | |
950 | + | then fe[aW] | |
951 | + | else "0_0_0_0_0_0", fe[aX], fg] | |
949 | 952 | } | |
950 | 953 | ||
951 | 954 | ||
952 | - | func | |
953 | - | let | |
954 | - | let | |
955 | - | let | |
956 | - | let | |
957 | - | (( | |
955 | + | func fk (bs,fl) = { | |
956 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
957 | + | let fm = valueOrElse(getInteger(bn(aD, bs)), 0) | |
958 | + | let fn = (fb / 6) | |
959 | + | let fo = (fb / 7) | |
960 | + | ((aG + fraction(aG, ((fb + fn) + (2 * fo)), 5)) + fraction(aG, fm, (fl * 5))) | |
958 | 961 | } | |
959 | 962 | ||
960 | 963 | ||
961 | - | func | |
962 | - | let | |
963 | - | then $Tuple2( | |
964 | + | func fp (am,fq,fr) = { | |
965 | + | let fs = if ((fq == cJ)) | |
966 | + | then $Tuple2(fr, valueOrElse(getString(bC(am)), "")) | |
964 | 967 | else { | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | if (( | |
969 | - | then throw((("Duck location type is " + | |
970 | - | else $Tuple2( | |
968 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
969 | + | let ft = valueOrElse(getString(bE(by)), aI) | |
970 | + | let fu = split(value(ft), "_") | |
971 | + | if ((fu[bh] != "L")) | |
972 | + | then throw((("Duck location type is " + fu[bh]) + ", but should be L")) | |
973 | + | else $Tuple2(fu[bi], by) | |
971 | 974 | } | |
972 | - | let | |
973 | - | let | |
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | if (( | |
979 | - | then throw(( | |
975 | + | let bs = fs._1 | |
976 | + | let fv = fs._2 | |
977 | + | let fw = value(assetInfo(fromBase58String(bs))) | |
978 | + | let fx = bm(bs) | |
979 | + | let fy = valueOrErrorMessage(getInteger(fx), (("Land " + fw.name) + " is not staked")) | |
980 | + | let fz = valueOrErrorMessage(getString(bj(bs)), (("NFT " + fw.name) + " is orphaned")) | |
981 | + | if ((fz != am)) | |
982 | + | then throw((aA + " is not yours")) | |
980 | 983 | else { | |
981 | - | let | |
982 | - | $Tuple4( | |
984 | + | let fA = split(fw.description, "_") | |
985 | + | $Tuple4(fv, bs, fA, fy) | |
983 | 986 | } | |
984 | 987 | } | |
985 | 988 | ||
986 | 989 | ||
987 | - | func | |
990 | + | func fB (am,fC,fq,fr) = if ((0 > fC)) | |
988 | 991 | then throw("Negative amount") | |
989 | 992 | else { | |
990 | - | let | |
991 | - | let aj = | |
992 | - | let | |
993 | - | let | |
994 | - | if ((0 > | |
995 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
993 | + | let dH = fp(am, fq, fr) | |
994 | + | let aj = dH._3[Q] | |
995 | + | let ec = ej(dH._3[R]) | |
996 | + | let en = (az() - dH._4) | |
997 | + | if ((0 > en)) | |
998 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dH._4)) + ", final = ") + toString(az()))) | |
996 | 999 | else { | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | if (( | |
1001 | - | then throw(((("Not enough resources, available = " + toString( | |
1000 | + | let fl = ai(aj) | |
1001 | + | let fD = fk(dH._2, fl) | |
1002 | + | let fE = fraction(en, (fD * fl), cv) | |
1003 | + | if ((fC > fE)) | |
1004 | + | then throw(((("Not enough resources, available = " + toString(fE)) + ", requested = ") + toString(fC))) | |
1002 | 1005 | else { | |
1003 | - | let | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | let | |
1012 | - | if (if (( | |
1013 | - | then ( | |
1006 | + | let fF = fraction((fE - fC), cv, (fD * fl)) | |
1007 | + | let fG = (az() - fF) | |
1008 | + | let fa = (fl / o) | |
1009 | + | let ey = et(ec, (en - fF), fa, fD) | |
1010 | + | let eZ = br(dH._2) | |
1011 | + | let fb = valueOrElse(getInteger(bt(dH._2)), 0) | |
1012 | + | let eL = eY(eZ, fa, fb) | |
1013 | + | let fh = split(eL[aY], "_") | |
1014 | + | let ez = parseIntValue(fh[bb]) | |
1015 | + | if (if ((fq == cJ)) | |
1016 | + | then (fC > ez) | |
1014 | 1017 | else false) | |
1015 | - | then throw((("Only " + toString( | |
1018 | + | then throw((("Only " + toString(ez)) + " space left in warehouse")) | |
1016 | 1019 | else { | |
1017 | - | let | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | then $Tuple4( | |
1023 | - | else if (( | |
1024 | - | then $Tuple4( | |
1020 | + | let eG = bD(dH._1) | |
1021 | + | let fH = eF(eG) | |
1022 | + | let ex = split(fH[be], "_") | |
1023 | + | let ew = split(eL[aV], "_") | |
1024 | + | let fI = if ((fq == cJ)) | |
1025 | + | then $Tuple4(el(ew, ec, (en - fF), fa, fD), fH[be], (parseIntValue(fh[ba]) + ey._2), (parseIntValue(fh[bb]) - ey._2)) | |
1026 | + | else if ((fq == cK)) | |
1027 | + | then $Tuple4(eL[aV], el(ex, ec, (en - fF), fa, fD), parseIntValue(fh[ba]), parseIntValue(fh[bb])) | |
1025 | 1028 | else { | |
1026 | - | let | |
1027 | - | let | |
1028 | - | $Tuple4( | |
1029 | + | let fJ = ev(ew, ex, ey, ez) | |
1030 | + | let fK = min([parseIntValue(fh[bb]), ey._2]) | |
1031 | + | $Tuple4(fJ._1, fJ._2, (parseIntValue(fh[ba]) + fK), (parseIntValue(fh[bb]) - fK)) | |
1029 | 1032 | } | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1034 | - | $Tuple5([IntegerEntry( | |
1033 | + | let fL = fI._1 | |
1034 | + | let fM = fI._2 | |
1035 | + | let fN = fI._3 | |
1036 | + | let fO = fI._4 | |
1037 | + | $Tuple5([IntegerEntry(bm(dH._2), fG), IntegerEntry(bp(aA, dH._2, am), fG)], eG, [fH[bd], fM, fH[bf], fH[bg]], eZ, [eL[aU], fL, eL[aW], eL[aX], makeString([fh[aZ], toString(fN), toString(fO), fh[bc]], "_")]) | |
1035 | 1038 | } | |
1036 | 1039 | } | |
1037 | 1040 | } | |
1038 | 1041 | } | |
1039 | 1042 | ||
1040 | 1043 | ||
1041 | - | func | |
1042 | - | let | |
1043 | - | let | |
1044 | - | let | |
1045 | - | | |
1044 | + | func fP (am,bs,fl,fq) = { | |
1045 | + | let fx = bm(bs) | |
1046 | + | let fy = value(getInteger(fx)) | |
1047 | + | let fE = (fraction((az() - fy), fk(bs, fl), cv) * fl) | |
1048 | + | fB(am, fE, fq, bs) | |
1046 | 1049 | } | |
1047 | 1050 | ||
1048 | 1051 | ||
1049 | - | func | |
1050 | - | let | |
1051 | - | let | |
1052 | - | let | |
1053 | - | $Tuple2([IntegerEntry( | |
1052 | + | func fQ (fR,fS,fT,fU) = { | |
1053 | + | let co = valueOrElse(getInteger(fS), 0) | |
1054 | + | let ct = (co + fU) | |
1055 | + | let fV = cr(valueOrElse(getInteger(fR), 0), ct) | |
1056 | + | $Tuple2([IntegerEntry(fR, fV[0]), IntegerEntry(fS, ct), IntegerEntry(fT, (valueOrElse(getInteger(fT), 0) + fV[1]))], ct) | |
1054 | 1057 | } | |
1055 | 1058 | ||
1056 | 1059 | ||
1057 | - | func | |
1058 | - | let | |
1059 | - | let am = valueOrErrorMessage(getString( | |
1060 | + | func fW (by,fU) = { | |
1061 | + | let fw = value(assetInfo(fromBase58String(by))) | |
1062 | + | let am = valueOrErrorMessage(getString(bB(by)), (("NFT " + fw.name) + " is orphaned")) | |
1060 | 1063 | if (if (if (b) | |
1061 | - | then ( | |
1064 | + | then (fw.issuer == this) | |
1062 | 1065 | else false) | |
1063 | - | then contains( | |
1066 | + | then contains(fw.name, aC) | |
1064 | 1067 | else false) | |
1065 | - | then | |
1066 | - | else | |
1068 | + | then fQ(cd(am), cc(am), ce(am), fU) | |
1069 | + | else fQ(bZ(by), bY(by), ca(by), fU) | |
1067 | 1070 | } | |
1068 | 1071 | ||
1069 | 1072 | ||
1070 | - | func | |
1073 | + | func fX (am,fU) = fQ(cd(am), cc(am), ce(am), fU) | |
1071 | 1074 | ||
1072 | 1075 | ||
1073 | - | func | |
1074 | - | let | |
1075 | - | let | |
1076 | - | let | |
1077 | - | if (!(isDefined( | |
1076 | + | func fY (am) = { | |
1077 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
1078 | + | let fZ = bw(am) | |
1079 | + | let ga = getString(fZ) | |
1080 | + | if (!(isDefined(ga))) | |
1078 | 1081 | then throw("You are not eligible for ONBOARD artifact") | |
1079 | 1082 | else { | |
1080 | - | let | |
1081 | - | let | |
1082 | - | if (isDefined( | |
1083 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1083 | + | let gb = bz(am) | |
1084 | + | let gc = getString(gb) | |
1085 | + | if (isDefined(gc)) | |
1086 | + | then throw(("You already used your ONBOARD artifact on duck " + value(gc))) | |
1084 | 1087 | else { | |
1085 | - | let | |
1086 | - | let | |
1087 | - | if (isDefined( | |
1088 | - | then throw(((("The duck " + | |
1089 | - | else ([StringEntry( | |
1088 | + | let gd = bx(by) | |
1089 | + | let ge = getString(gd) | |
1090 | + | if (isDefined(ge)) | |
1091 | + | then throw(((("The duck " + by) + " already got points from ONBOARD artifact from user ") + value(ge))) | |
1092 | + | else ([StringEntry(gb, by), StringEntry(gd, am)] ++ fW(by, cm)._1) | |
1090 | 1093 | } | |
1091 | 1094 | } | |
1092 | 1095 | } | |
1093 | 1096 | ||
1094 | 1097 | ||
1095 | - | func | |
1096 | - | let | |
1097 | - | let | |
1098 | - | let | |
1099 | - | let | |
1100 | - | if ((valueOrElse(getInteger( | |
1098 | + | func gf (am,fr) = { | |
1099 | + | let dH = fp(am, cL, fr) | |
1100 | + | let bs = dH._2 | |
1101 | + | let fl = ai(dH._3[Q]) | |
1102 | + | let gg = bn(aD, bs) | |
1103 | + | if ((valueOrElse(getInteger(gg), 0) > 0)) | |
1101 | 1104 | then throw("Presale artifact is already activated") | |
1102 | - | else if ((parseIntValue( | |
1103 | - | then throw(((( | |
1105 | + | else if ((parseIntValue(dH._3[P]) > cA)) | |
1106 | + | then throw((((aA + " ") + bs) + " is not eligible for presale artifact")) | |
1104 | 1107 | else { | |
1105 | - | let | |
1106 | - | ((( | |
1108 | + | let gh = fP(am, bs, fl, cL) | |
1109 | + | (((gh._1 :+ IntegerEntry(gg, fl)) :+ StringEntry(gh._2, makeString(gh._3, ":"))) :+ StringEntry(gh._4, makeString(gh._5, ":"))) | |
1107 | 1110 | } | |
1108 | 1111 | } | |
1109 | 1112 | ||
1110 | 1113 | ||
1111 | - | func | |
1114 | + | func gi (eg) = if (if ((eg.originCaller != J)) | |
1112 | 1115 | then valueOrElse(getBoolean(ak()), false) | |
1113 | 1116 | else false) | |
1114 | 1117 | then throw("Contracts are under maintenance") | |
1115 | - | else [StringEntry( | |
1118 | + | else [StringEntry(an(toString(eg.originCaller)), toBase58String(eg.transactionId))] | |
1116 | 1119 | ||
1117 | 1120 | ||
1118 | - | func | |
1119 | - | let | |
1120 | - | let | |
1121 | - | let aj = | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | let | |
1127 | - | let | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | if ((0 > | |
1132 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1121 | + | func gj (am,bs) = { | |
1122 | + | let eZ = br(bs) | |
1123 | + | let gk = split(value(assetInfo(fromBase58String(bs))).description, "_") | |
1124 | + | let aj = gk[Q] | |
1125 | + | let fl = ai(aj) | |
1126 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1127 | + | let fa = (fl / o) | |
1128 | + | let ec = ej(gk[R]) | |
1129 | + | let eL = eY(eZ, fa, fb) | |
1130 | + | let ew = split(eL[aV], "_") | |
1131 | + | let fx = bm(bs) | |
1132 | + | let fy = getIntegerValue(fx) | |
1133 | + | let en = (az() - fy) | |
1134 | + | if ((0 > en)) | |
1135 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fy)) + ", final = ") + toString(az()))) | |
1133 | 1136 | else { | |
1134 | - | let | |
1135 | - | let | |
1136 | - | let | |
1137 | - | let | |
1138 | - | let | |
1139 | - | func | |
1137 | + | let fD = fk(bs, fl) | |
1138 | + | let gl = er(ew, ec, en, fa, fD) | |
1139 | + | let fm = valueOrElse(getInteger(bn(aD, bs)), 0) | |
1140 | + | let gm = ((fl * n) + ((((fl * fb) + fm) * n) / 5)) | |
1141 | + | let gn = (fraction(gl._2, aJ, n) * aL) | |
1142 | + | func go (cS,eO) = (cS + parseIntValue(eO)) | |
1140 | 1143 | ||
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | func | |
1146 | - | then | |
1147 | - | else | |
1144 | + | let gp = { | |
1145 | + | let cU = split(eL[aW], "_") | |
1146 | + | let cV = size(cU) | |
1147 | + | let cW = 0 | |
1148 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
1149 | + | then cY | |
1150 | + | else go(cY, cU[cZ]) | |
1148 | 1151 | ||
1149 | - | func | |
1150 | - | then | |
1152 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
1153 | + | then cY | |
1151 | 1154 | else throw("List size exceeds 6") | |
1152 | 1155 | ||
1153 | - | | |
1156 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
1154 | 1157 | } | |
1155 | - | let | |
1156 | - | let | |
1158 | + | let gq = (fraction(gp, (2 * aJ), n) * aL) | |
1159 | + | let gr = if ((eL[aX] == "")) | |
1157 | 1160 | then nil | |
1158 | - | else split_4C( | |
1159 | - | func | |
1160 | - | let | |
1161 | - | let | |
1162 | - | $Tuple2(( | |
1161 | + | else split_4C(eL[aX], "_") | |
1162 | + | func eP (cS,eO) = { | |
1163 | + | let dj = cS._2 | |
1164 | + | let gs = parseIntValue(split(aP[dj], "_")[aQ]) | |
1165 | + | $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1)) | |
1163 | 1166 | } | |
1164 | 1167 | ||
1165 | - | let | |
1166 | - | let | |
1167 | - | let | |
1168 | - | let | |
1169 | - | func | |
1170 | - | then | |
1171 | - | else | |
1168 | + | let gt = { | |
1169 | + | let cU = gr | |
1170 | + | let cV = size(cU) | |
1171 | + | let cW = $Tuple2(0, 0) | |
1172 | + | func eT (cY,cZ) = if ((cZ >= cV)) | |
1173 | + | then cY | |
1174 | + | else eP(cY, cU[cZ]) | |
1172 | 1175 | ||
1173 | - | func | |
1174 | - | then | |
1176 | + | func eU (cY,cZ) = if ((cZ >= cV)) | |
1177 | + | then cY | |
1175 | 1178 | else throw("List size exceeds 24") | |
1176 | 1179 | ||
1177 | - | eT( | |
1180 | + | eU(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
1178 | 1181 | } | |
1179 | - | let | |
1180 | - | $Tuple4( | |
1182 | + | let gu = (fraction(gt._1, (2 * aJ), n) * aL) | |
1183 | + | $Tuple4(gm, gn, gq, gu) | |
1181 | 1184 | } | |
1182 | 1185 | } | |
1183 | 1186 | ||
1184 | 1187 | ||
1185 | - | func | |
1186 | - | let | |
1187 | - | let | |
1188 | - | let | |
1189 | - | let | |
1190 | - | let | |
1191 | - | let | |
1192 | - | func | |
1188 | + | func gv (am,by) = { | |
1189 | + | let gw = cb(by) | |
1190 | + | let gx = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1191 | + | let eG = bD(by) | |
1192 | + | let fH = eF(eG) | |
1193 | + | let gy = dT(gx, de(fH[bg]), true, nil) | |
1194 | + | let gz = dl(gy) | |
1195 | + | func eN (cS,eO) = (cS + parseIntValue(eO)) | |
1193 | 1196 | ||
1194 | - | let | |
1195 | - | let | |
1196 | - | let | |
1197 | - | let | |
1198 | - | func | |
1199 | - | then | |
1200 | - | else | |
1197 | + | let fM = { | |
1198 | + | let cU = split(fH[be], "_") | |
1199 | + | let cV = size(cU) | |
1200 | + | let cW = 0 | |
1201 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
1202 | + | then cY | |
1203 | + | else eN(cY, cU[cZ]) | |
1201 | 1204 | ||
1202 | - | func | |
1203 | - | then | |
1205 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
1206 | + | then cY | |
1204 | 1207 | else throw("List size exceeds 6") | |
1205 | 1208 | ||
1206 | - | | |
1209 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
1207 | 1210 | } | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let | |
1211 | - | let | |
1212 | - | let | |
1213 | - | func | |
1214 | - | then | |
1215 | - | else | |
1211 | + | let gn = (fraction(fM, aJ, n) * aL) | |
1212 | + | let gA = { | |
1213 | + | let cU = split(fH[bf], "_") | |
1214 | + | let cV = size(cU) | |
1215 | + | let cW = 0 | |
1216 | + | func eT (cY,cZ) = if ((cZ >= cV)) | |
1217 | + | then cY | |
1218 | + | else eN(cY, cU[cZ]) | |
1216 | 1219 | ||
1217 | - | func | |
1218 | - | then | |
1220 | + | func eU (cY,cZ) = if ((cZ >= cV)) | |
1221 | + | then cY | |
1219 | 1222 | else throw("List size exceeds 6") | |
1220 | 1223 | ||
1221 | - | eT( | |
1224 | + | eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6) | |
1222 | 1225 | } | |
1223 | - | let | |
1224 | - | let | |
1226 | + | let gq = (fraction(gA, (2 * aJ), n) * aL) | |
1227 | + | let gr = if ((gz == "")) | |
1225 | 1228 | then nil | |
1226 | - | else split_4C( | |
1227 | - | func | |
1228 | - | let | |
1229 | - | let | |
1230 | - | $Tuple2(( | |
1229 | + | else split_4C(gz, "_") | |
1230 | + | func eP (cS,eO) = { | |
1231 | + | let dj = cS._2 | |
1232 | + | let gs = parseIntValue(split(aP[dj], "_")[aQ]) | |
1233 | + | $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1)) | |
1231 | 1234 | } | |
1232 | 1235 | ||
1233 | - | let | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let | |
1237 | - | func | |
1238 | - | then | |
1239 | - | else | |
1236 | + | let gB = { | |
1237 | + | let cU = gr | |
1238 | + | let cV = size(cU) | |
1239 | + | let cW = $Tuple2(0, 0) | |
1240 | + | func eW (cY,cZ) = if ((cZ >= cV)) | |
1241 | + | then cY | |
1242 | + | else eP(cY, cU[cZ]) | |
1240 | 1243 | ||
1241 | - | func | |
1242 | - | then | |
1244 | + | func eX (cY,cZ) = if ((cZ >= cV)) | |
1245 | + | then cY | |
1243 | 1246 | else throw("List size exceeds 24") | |
1244 | 1247 | ||
1245 | - | eW( | |
1248 | + | eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
1246 | 1249 | } | |
1247 | - | let | |
1248 | - | $Tuple3( | |
1250 | + | let gu = (fraction(gB._1, (2 * aJ), n) * aL) | |
1251 | + | $Tuple3(gn, gq, gu) | |
1249 | 1252 | } | |
1250 | 1253 | ||
1251 | 1254 | ||
1252 | - | @Callable( | |
1253 | - | func constructorV1 ( | |
1255 | + | @Callable(eg) | |
1256 | + | func constructorV1 (gC) = if ((eg.caller != this)) | |
1254 | 1257 | then throw("Permission denied") | |
1255 | - | else [StringEntry(D(), | |
1258 | + | else [StringEntry(D(), gC)] | |
1256 | 1259 | ||
1257 | 1260 | ||
1258 | 1261 | ||
1259 | - | @Callable( | |
1260 | - | func saveInteger (w, | |
1262 | + | @Callable(eg) | |
1263 | + | func saveInteger (w,fC) = if ((eg.caller != this)) | |
1261 | 1264 | then throw("saveInteger is not public method") | |
1262 | - | else [IntegerEntry(w, | |
1265 | + | else [IntegerEntry(w, fC)] | |
1263 | 1266 | ||
1264 | 1267 | ||
1265 | 1268 | ||
1266 | - | @Callable( | |
1267 | - | func setBlocked ( | |
1269 | + | @Callable(eg) | |
1270 | + | func setBlocked (gD) = if ((eg.caller != this)) | |
1268 | 1271 | then throw("permission denied") | |
1269 | - | else [BooleanEntry(ak(), | |
1272 | + | else [BooleanEntry(ak(), gD)] | |
1270 | 1273 | ||
1271 | 1274 | ||
1272 | 1275 | ||
1273 | - | @Callable( | |
1276 | + | @Callable(eg) | |
1274 | 1277 | func stakeLand () = { | |
1275 | - | let | |
1276 | - | if ((size( | |
1278 | + | let gE = gi(eg) | |
1279 | + | if ((size(eg.payments) != 1)) | |
1277 | 1280 | then throw("Exactly one payment required") | |
1278 | 1281 | else { | |
1279 | - | let | |
1280 | - | let | |
1281 | - | let v = toString( | |
1282 | - | if (( | |
1283 | - | then throw((("NFT " + | |
1282 | + | let gF = value(eg.payments[0]) | |
1283 | + | let bk = value(gF.assetId) | |
1284 | + | let v = toString(eg.caller) | |
1285 | + | if ((gF.amount != 1)) | |
1286 | + | then throw((("NFT " + aA) + " token should be attached as payment")) | |
1284 | 1287 | else { | |
1285 | - | let | |
1286 | - | if (( | |
1288 | + | let fw = value(assetInfo(bk)) | |
1289 | + | if ((fw.issuer != this)) | |
1287 | 1290 | then throw("Unknown issuer of token") | |
1288 | - | else if (!(contains( | |
1289 | - | then throw((("Only NFT " + | |
1291 | + | else if (!(contains(fw.name, aA))) | |
1292 | + | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
1290 | 1293 | else { | |
1291 | - | let | |
1292 | - | let | |
1293 | - | then dropRight( | |
1294 | - | else if (contains( | |
1295 | - | then dropRight( | |
1296 | - | else dropRight( | |
1297 | - | if (!(isDefined(parseInt( | |
1298 | - | then throw(("Cannot parse land number from " + | |
1294 | + | let gG = drop(fw.name, 4) | |
1295 | + | let cF = if (contains(gG, "XXL")) | |
1296 | + | then dropRight(gG, 3) | |
1297 | + | else if (contains(gG, "XL")) | |
1298 | + | then dropRight(gG, 2) | |
1299 | + | else dropRight(gG, 1) | |
1300 | + | if (!(isDefined(parseInt(cF)))) | |
1301 | + | then throw(("Cannot parse land number from " + fw.name)) | |
1299 | 1302 | else { | |
1300 | - | let | |
1301 | - | let | |
1302 | - | if (isDefined(getInteger( | |
1303 | - | then throw((("NFT " + | |
1303 | + | let bs = toBase58String(bk) | |
1304 | + | let fx = bm(bs) | |
1305 | + | if (isDefined(getInteger(fx))) | |
1306 | + | then throw((("NFT " + fw.name) + " is already staked")) | |
1304 | 1307 | else { | |
1305 | - | let | |
1306 | - | let | |
1307 | - | let | |
1308 | - | let | |
1309 | - | let | |
1310 | - | let | |
1311 | - | let | |
1312 | - | let | |
1313 | - | let | |
1314 | - | let | |
1315 | - | let | |
1316 | - | then split_51C(value( | |
1308 | + | let fA = split(fw.description, "_") | |
1309 | + | let ec = ej(fA[R]) | |
1310 | + | let fl = ai(fA[Q]) | |
1311 | + | let fa = (fl / o) | |
1312 | + | let dc = ei(ec, fa, 1) | |
1313 | + | let gH = Y(fA[S]) | |
1314 | + | let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_") | |
1315 | + | let gJ = makeString(ea(gI, ec, fa, 1), "_") | |
1316 | + | let gK = aa(v) | |
1317 | + | let gL = getString(gK) | |
1318 | + | let gM = if (isDefined(gL)) | |
1319 | + | then split_51C(value(gL), "_") | |
1317 | 1320 | else nil | |
1318 | - | if (containsElement( | |
1319 | - | then throw(("Your staked lands already contain " + | |
1320 | - | else if ((size( | |
1321 | - | then throw((("Your already staked max (" + toString( | |
1321 | + | if (containsElement(gM, bs)) | |
1322 | + | then throw(("Your staked lands already contain " + bs)) | |
1323 | + | else if ((size(gM) >= aF)) | |
1324 | + | then throw((("Your already staked max (" + toString(aF)) + ") lands")) | |
1322 | 1325 | else { | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | let | |
1327 | - | $Tuple2(([IntegerEntry( | |
1326 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1327 | + | let gN = ac(v) | |
1328 | + | let gO = valueOrElse(getInteger(gN), 0) | |
1329 | + | let gP = invoke(M, "onStakeUnstakeLand", [v], nil) | |
1330 | + | $Tuple2(([IntegerEntry(fx, lastBlock.timestamp), IntegerEntry(bp(aA, bs, v), lastBlock.timestamp), StringEntry(gK, makeString_11C((gM :+ bs), "_")), IntegerEntry(gN, (gO + fl)), StringEntry(bj(bs), v), StringEntry(cE(cF), v), IntegerEntry(cD(bs, v), fb), StringEntry(X(), dc), StringEntry(gH, gJ)] ++ gE), gP) | |
1328 | 1331 | } | |
1329 | 1332 | } | |
1330 | 1333 | } | |
1335 | 1338 | ||
1336 | 1339 | ||
1337 | 1340 | ||
1338 | - | @Callable( | |
1339 | - | func unstakeLand ( | |
1340 | - | let | |
1341 | - | if ((size( | |
1341 | + | @Callable(eg) | |
1342 | + | func unstakeLand (fr) = { | |
1343 | + | let gE = gi(eg) | |
1344 | + | if ((size(eg.payments) != 0)) | |
1342 | 1345 | then throw("No payments required") | |
1343 | 1346 | else { | |
1344 | - | let am = toString( | |
1345 | - | let | |
1346 | - | let | |
1347 | - | let | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | let | |
1354 | - | let | |
1355 | - | let | |
1356 | - | let | |
1357 | - | let | |
1358 | - | let I = indexOf( | |
1347 | + | let am = toString(eg.caller) | |
1348 | + | let dH = fp(am, cK, fr) | |
1349 | + | let bs = dH._2 | |
1350 | + | let fA = dH._3 | |
1351 | + | let gK = aa(am) | |
1352 | + | let ec = ej(fA[R]) | |
1353 | + | let fl = ai(fA[Q]) | |
1354 | + | let fa = (fl / o) | |
1355 | + | let dc = ei(ec, fa, -1) | |
1356 | + | let gH = Y(fA[S]) | |
1357 | + | let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_") | |
1358 | + | let gJ = makeString(ea(gI, ec, fa, -1), "_") | |
1359 | + | let gh = fP(am, bs, fl, cK) | |
1360 | + | let gM = split_51C(valueOrElse(getString(gK), ""), "_") | |
1361 | + | let I = indexOf(gM, bs) | |
1359 | 1362 | if (!(isDefined(I))) | |
1360 | - | then throw(("Your staked lands don't contain " + | |
1363 | + | then throw(("Your staked lands don't contain " + bs)) | |
1361 | 1364 | else { | |
1362 | - | let | |
1363 | - | let | |
1364 | - | if (( | |
1365 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1365 | + | let gQ = lastBlock.timestamp | |
1366 | + | let gR = valueOrElse(getInteger(L, bF(am)), 0) | |
1367 | + | if ((gR >= gQ)) | |
1368 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gR))) | |
1366 | 1369 | else { | |
1367 | - | let | |
1368 | - | if (( | |
1369 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1370 | + | let gS = (valueOrElse(getInteger(M, cw(am)), 0) + k) | |
1371 | + | if ((gS > gQ)) | |
1372 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(gS))) | |
1370 | 1373 | else { | |
1371 | - | let | |
1372 | - | let | |
1373 | - | let | |
1374 | + | let gN = ac(am) | |
1375 | + | let gT = valueOrElse(getInteger(gN), 0) | |
1376 | + | let gU = if ((fl > gT)) | |
1374 | 1377 | then 0 | |
1375 | - | else ( | |
1376 | - | let | |
1377 | - | $Tuple2(([ScriptTransfer( | |
1378 | - | then StringEntry( | |
1379 | - | else DeleteEntry( | |
1378 | + | else (gT - fl) | |
1379 | + | let gP = invoke(M, "onStakeUnstakeLand", [am], nil) | |
1380 | + | $Tuple2(([ScriptTransfer(eg.caller, 1, fromBase58String(bs)), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am)), StringEntry(X(), dc), StringEntry(gH, gJ), StringEntry(gh._2, makeString(gh._3, ":")), if ((size(gM) > 1)) | |
1381 | + | then StringEntry(gK, makeString_11C(removeByIndex(gM, value(I)), "_")) | |
1382 | + | else DeleteEntry(gK), IntegerEntry(gN, gU)] ++ gE), gP) | |
1380 | 1383 | } | |
1381 | 1384 | } | |
1382 | 1385 | } | |
1385 | 1388 | ||
1386 | 1389 | ||
1387 | 1390 | ||
1388 | - | @Callable( | |
1389 | - | func unstakeLandCallback ( | |
1391 | + | @Callable(eg) | |
1392 | + | func unstakeLandCallback (bs,am) = if ((toString(eg.caller) != j)) | |
1390 | 1393 | then throw("Permission denied") | |
1391 | 1394 | else { | |
1392 | - | let | |
1393 | - | let | |
1394 | - | $Tuple2([Burn(fromBase58String( | |
1395 | + | let gV = gj(am, bs) | |
1396 | + | let gP = invoke(M, "onStakeUnstakeLand", [am], nil) | |
1397 | + | $Tuple2([Burn(fromBase58String(bs), 1), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am))], $Tuple5(gV._1, gV._2, gV._3, gV._4, gP)) | |
1395 | 1398 | } | |
1396 | 1399 | ||
1397 | 1400 | ||
1398 | 1401 | ||
1399 | - | @Callable( | |
1400 | - | func unstakeLandREADONLY ( | |
1401 | - | let | |
1402 | - | $Tuple2(nil, | |
1402 | + | @Callable(eg) | |
1403 | + | func unstakeLandREADONLY (bs,am) = { | |
1404 | + | let gV = gj(am, bs) | |
1405 | + | $Tuple2(nil, gV) | |
1403 | 1406 | } | |
1404 | 1407 | ||
1405 | 1408 | ||
1406 | 1409 | ||
1407 | - | @Callable( | |
1408 | - | func unstakeLandsFinalizeCallback (am) = if ((toString( | |
1410 | + | @Callable(eg) | |
1411 | + | func unstakeLandsFinalizeCallback (am) = if ((toString(eg.caller) != j)) | |
1409 | 1412 | then throw("Permission denied") | |
1410 | 1413 | else $Tuple2([DeleteEntry(aa(am)), DeleteEntry(ac(am))], 0) | |
1411 | 1414 | ||
1412 | 1415 | ||
1413 | 1416 | ||
1414 | - | @Callable( | |
1415 | - | func convertUnstakedLands () = if ((size( | |
1417 | + | @Callable(eg) | |
1418 | + | func convertUnstakedLands () = if ((size(eg.payments) != 1)) | |
1416 | 1419 | then throw("Exactly one payment required") | |
1417 | 1420 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let v = toString( | |
1421 | - | if (( | |
1422 | - | then throw((("NFT " + | |
1421 | + | let gF = value(eg.payments[0]) | |
1422 | + | let bk = value(gF.assetId) | |
1423 | + | let v = toString(eg.caller) | |
1424 | + | if ((gF.amount != 1)) | |
1425 | + | then throw((("NFT " + aA) + " token should be attached as payment")) | |
1423 | 1426 | else { | |
1424 | - | let | |
1425 | - | if (( | |
1427 | + | let fw = value(assetInfo(bk)) | |
1428 | + | if ((fw.issuer != this)) | |
1426 | 1429 | then throw("Unknown issuer of token") | |
1427 | - | else if (!(contains( | |
1428 | - | then throw((("Only NFT " + | |
1430 | + | else if (!(contains(fw.name, aA))) | |
1431 | + | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
1429 | 1432 | else { | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | if (( | |
1433 | + | let bs = toBase58String(bk) | |
1434 | + | let fA = split(fw.description, "_") | |
1435 | + | let fl = ai(fA[Q]) | |
1436 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1437 | + | let fm = valueOrElse(getInteger(bn(aD, bs)), 0) | |
1438 | + | let gW = ((fl * n) + ((((fl * fb) + fm) * n) / 5)) | |
1439 | + | let gX = invoke(O, "requestAcresCallback", [gW], nil) | |
1440 | + | if ((gX == gX)) | |
1438 | 1441 | then { | |
1439 | - | let | |
1440 | - | if (( | |
1441 | - | then $Tuple2([Burn(fromBase58String( | |
1442 | + | let gY = invoke(addressFromStringValue(j), "stakeAcresCallback", [v], [AttachedPayment(U, gW)]) | |
1443 | + | if ((gY == gY)) | |
1444 | + | then $Tuple2([Burn(fromBase58String(bs), 1)], 0) | |
1442 | 1445 | else throw("Strict value is not equal to itself.") | |
1443 | 1446 | } | |
1444 | 1447 | else throw("Strict value is not equal to itself.") | |
1448 | 1451 | ||
1449 | 1452 | ||
1450 | 1453 | ||
1451 | - | @Callable( | |
1452 | - | func unstakeDuckCallback ( | |
1454 | + | @Callable(eg) | |
1455 | + | func unstakeDuckCallback (by,am) = if ((toString(eg.caller) != j)) | |
1453 | 1456 | then throw("Permission denied") | |
1454 | 1457 | else { | |
1455 | - | let | |
1456 | - | $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String( | |
1458 | + | let gV = gv(am, by) | |
1459 | + | $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String(by)), DeleteEntry(bm(by)), DeleteEntry(bB(by)), DeleteEntry(bp(aB, by, am)), DeleteEntry(bC(am))], gV) | |
1457 | 1460 | } | |
1458 | 1461 | ||
1459 | 1462 | ||
1460 | 1463 | ||
1461 | - | @Callable( | |
1462 | - | func unstakeDuckREADONLY ( | |
1463 | - | let | |
1464 | - | $Tuple2(nil, | |
1464 | + | @Callable(eg) | |
1465 | + | func unstakeDuckREADONLY (by,am) = { | |
1466 | + | let gV = gv(am, by) | |
1467 | + | $Tuple2(nil, gV) | |
1465 | 1468 | } | |
1466 | 1469 | ||
1467 | 1470 | ||
1468 | 1471 | ||
1469 | - | @Callable( | |
1470 | - | func claimRes ( | |
1471 | - | let | |
1472 | - | if ((size( | |
1472 | + | @Callable(eg) | |
1473 | + | func claimRes (fC,gZ) = { | |
1474 | + | let gE = gi(eg) | |
1475 | + | if ((size(eg.payments) != 0)) | |
1473 | 1476 | then throw("No payments required") | |
1474 | 1477 | else { | |
1475 | - | let am = toString( | |
1476 | - | let | |
1477 | - | let | |
1478 | - | $Tuple2((((( | |
1478 | + | let am = toString(eg.originCaller) | |
1479 | + | let eh = fB(am, fC, cK, gZ) | |
1480 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
1481 | + | $Tuple2(((((eh._1 ++ fW(by, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._3[be]) | |
1479 | 1482 | } | |
1480 | 1483 | } | |
1481 | 1484 | ||
1482 | 1485 | ||
1483 | 1486 | ||
1484 | - | @Callable( | |
1485 | - | func claimResToWH ( | |
1486 | - | let | |
1487 | - | if ((size( | |
1487 | + | @Callable(eg) | |
1488 | + | func claimResToWH (fC,gZ) = { | |
1489 | + | let gE = gi(eg) | |
1490 | + | if ((size(eg.payments) != 0)) | |
1488 | 1491 | then throw("No payments required") | |
1489 | 1492 | else { | |
1490 | - | let am = toString( | |
1491 | - | let | |
1492 | - | $Tuple2((((( | |
1493 | + | let am = toString(eg.originCaller) | |
1494 | + | let eh = fB(am, fC, cJ, gZ) | |
1495 | + | $Tuple2(((((eh._1 ++ fX(am, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._5[aV]) | |
1493 | 1496 | } | |
1494 | 1497 | } | |
1495 | 1498 | ||
1496 | 1499 | ||
1497 | 1500 | ||
1498 | - | @Callable( | |
1499 | - | func updateBackpack ( | |
1501 | + | @Callable(eg) | |
1502 | + | func updateBackpack (by,ha) = if ((eg.caller != K)) | |
1500 | 1503 | then throw("permission denied") | |
1501 | - | else $Tuple2([StringEntry( | |
1504 | + | else $Tuple2([StringEntry(bD(by), ha)], ha) | |
1502 | 1505 | ||
1503 | 1506 | ||
1504 | 1507 | ||
1505 | - | @Callable( | |
1508 | + | @Callable(eg) | |
1506 | 1509 | func commitForRandom () = { | |
1507 | - | let | |
1508 | - | let | |
1509 | - | let am = toString( | |
1510 | - | $Tuple2(([IntegerEntry(W(am), | |
1510 | + | let gE = gi(eg) | |
1511 | + | let hb = (height + V) | |
1512 | + | let am = toString(eg.caller) | |
1513 | + | $Tuple2(([IntegerEntry(W(am), hb)] ++ gE), hb) | |
1511 | 1514 | } | |
1512 | 1515 | ||
1513 | 1516 | ||
1514 | 1517 | ||
1515 | - | @Callable( | |
1516 | - | func revealRandom ( | |
1517 | - | let | |
1518 | - | let am = toString( | |
1519 | - | let | |
1520 | - | let | |
1521 | - | if (( | |
1522 | - | then throw(("Random number is not ready yet, wait until height = " + toString( | |
1518 | + | @Callable(eg) | |
1519 | + | func revealRandom (av) = { | |
1520 | + | let gE = gi(eg) | |
1521 | + | let am = toString(eg.caller) | |
1522 | + | let hc = W(am) | |
1523 | + | let hb = valueOrErrorMessage(getInteger(hc), "You have to commitForRandom() first!") | |
1524 | + | if ((hb > height)) | |
1525 | + | then throw(("Random number is not ready yet, wait until height = " + toString(hb))) | |
1523 | 1526 | else { | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let | |
1527 | - | $Tuple2(([DeleteEntry( | |
1527 | + | let ax = value(value(blockInfoByHeight(hb)).vrf) | |
1528 | + | let aw = toBytes(valueOrElse(getString(al(am)), "")) | |
1529 | + | let hd = au(av, aw, ax) | |
1530 | + | $Tuple2(([DeleteEntry(hc)] ++ gE), hd) | |
1528 | 1531 | } | |
1529 | 1532 | } | |
1530 | 1533 | ||
1531 | 1534 | ||
1532 | 1535 | ||
1533 | - | @Callable( | |
1534 | - | func activateArtifact ( | |
1535 | - | let | |
1536 | - | if ((size( | |
1536 | + | @Callable(eg) | |
1537 | + | func activateArtifact (he,hf) = { | |
1538 | + | let gE = gi(eg) | |
1539 | + | if ((size(eg.payments) != 0)) | |
1537 | 1540 | then throw("No payments required") | |
1538 | 1541 | else { | |
1539 | - | let am = toString( | |
1540 | - | let | |
1541 | - | let g = | |
1542 | + | let am = toString(eg.caller) | |
1543 | + | let eh = { | |
1544 | + | let g = he | |
1542 | 1545 | if (("PRESALE" == g)) | |
1543 | - | then | |
1546 | + | then gf(am, hf) | |
1544 | 1547 | else if (("ONBOARD" == g)) | |
1545 | - | then | |
1548 | + | then fY(am) | |
1546 | 1549 | else throw("Unknown artifact") | |
1547 | 1550 | } | |
1548 | - | ( | |
1551 | + | (eh ++ gE) | |
1549 | 1552 | } | |
1550 | 1553 | } | |
1551 | 1554 | ||
1552 | 1555 | ||
1553 | 1556 | ||
1554 | - | @Callable( | |
1555 | - | func saveWarehouse ( | |
1557 | + | @Callable(eg) | |
1558 | + | func saveWarehouse (fd,bs) = if ((eg.caller != K)) | |
1556 | 1559 | then throw("Access denied") | |
1557 | 1560 | else { | |
1558 | - | let | |
1559 | - | let | |
1560 | - | if ((size( | |
1561 | + | let eZ = br(bs) | |
1562 | + | let fe = split_4C(fd, ":") | |
1563 | + | if ((size(fe) != 5)) | |
1561 | 1564 | then throw("warehouse string should contain 4 ':' separators") | |
1562 | 1565 | else { | |
1563 | - | let | |
1564 | - | let | |
1565 | - | let | |
1566 | - | let | |
1567 | - | if ((0 > | |
1566 | + | let hg = split(fe[aY], "_")[aZ] | |
1567 | + | let fN = eK(fe) | |
1568 | + | let hh = eI(fe[aU]) | |
1569 | + | let fO = ((hh - parseIntValue(hg)) - fN) | |
1570 | + | if ((0 > fO)) | |
1568 | 1571 | then throw("Operation leads to negative free warehouse space") | |
1569 | 1572 | else { | |
1570 | - | let | |
1571 | - | $Tuple2([StringEntry( | |
1573 | + | let hi = makeString_2C([fe[aU], fe[aV], fe[aW], fe[aX], makeString([hg, toString(fN), toString(fO), toString(hh)], "_")], ":") | |
1574 | + | $Tuple2([StringEntry(eZ, hi)], hi) | |
1572 | 1575 | } | |
1573 | 1576 | } | |
1574 | 1577 | } | |
1575 | 1578 | ||
1576 | 1579 | ||
1577 | 1580 | ||
1578 | - | @Callable( | |
1579 | - | func setCustomName ( | |
1580 | - | let | |
1581 | - | if ((size( | |
1581 | + | @Callable(eg) | |
1582 | + | func setCustomName (bk,hj,bo) = { | |
1583 | + | let gE = gi(eg) | |
1584 | + | if ((size(eg.payments) != 1)) | |
1582 | 1585 | then throw("Exactly one payment required") | |
1583 | 1586 | else { | |
1584 | - | let | |
1585 | - | if (( | |
1587 | + | let gF = value(eg.payments[0]) | |
1588 | + | if ((gF.assetId != h)) | |
1586 | 1589 | then throw("Allowed USDT payment only!") | |
1587 | - | else if (( | |
1588 | - | then throw(("Payment should be " + toString( | |
1589 | - | else if (contains( | |
1590 | - | then throw(("Name should not contain '__': " + | |
1591 | - | else if ((size( | |
1592 | - | then throw(("Name too long, maxLength=" + toString( | |
1590 | + | else if ((gF.amount != cy)) | |
1591 | + | then throw(("Payment should be " + toString(cy))) | |
1592 | + | else if (contains(hj, "__")) | |
1593 | + | then throw(("Name should not contain '__': " + hj)) | |
1594 | + | else if ((size(hj) > cz)) | |
1595 | + | then throw(("Name too long, maxLength=" + toString(cz))) | |
1593 | 1596 | else { | |
1594 | - | let am = toString( | |
1595 | - | let | |
1596 | - | let g = | |
1597 | + | let am = toString(eg.originCaller) | |
1598 | + | let hk = { | |
1599 | + | let g = bo | |
1597 | 1600 | if (("ACCOUNT" == g)) | |
1598 | 1601 | then { | |
1599 | - | let | |
1600 | - | let | |
1601 | - | if (isDefined( | |
1602 | - | then throw(("Name already registered: " + | |
1602 | + | let hl = cH(hj) | |
1603 | + | let hm = getString(hl) | |
1604 | + | if (isDefined(hm)) | |
1605 | + | then throw(("Name already registered: " + hj)) | |
1603 | 1606 | else { | |
1604 | - | let | |
1605 | - | let | |
1606 | - | let | |
1607 | - | then [DeleteEntry( | |
1607 | + | let hn = bv(am) | |
1608 | + | let ho = getString(hn) | |
1609 | + | let hp = if (isDefined(ho)) | |
1610 | + | then [DeleteEntry(cH(value(ho)))] | |
1608 | 1611 | else nil | |
1609 | - | ((( | |
1612 | + | (((hp :+ StringEntry(hn, hj)) :+ StringEntry(hl, am)) ++ fX(am, cl)._1) | |
1610 | 1613 | } | |
1611 | 1614 | } | |
1612 | 1615 | else if (("LAND" == g)) | |
1613 | 1616 | then { | |
1614 | - | let | |
1615 | - | let | |
1616 | - | if (!(isDefined(getInteger( | |
1617 | - | then throw(( | |
1617 | + | let fw = value(assetInfo(fromBase58String(bk))) | |
1618 | + | let fx = bm(bk) | |
1619 | + | if (!(isDefined(getInteger(fx)))) | |
1620 | + | then throw((fw.name + " is not staked")) | |
1618 | 1621 | else { | |
1619 | - | let | |
1620 | - | if (( | |
1621 | - | then throw(( | |
1622 | + | let fz = valueOrErrorMessage(getString(bj(bk)), (("NFT " + fw.name) + " is orphaned")) | |
1623 | + | if ((fz != am)) | |
1624 | + | then throw((aA + " is not yours")) | |
1622 | 1625 | else { | |
1623 | - | let | |
1624 | - | let | |
1625 | - | if (isDefined( | |
1626 | - | then throw(("Name already registered: " + | |
1626 | + | let hl = cB(hj) | |
1627 | + | let hm = getString(hl) | |
1628 | + | if (isDefined(hm)) | |
1629 | + | then throw(("Name already registered: " + hj)) | |
1627 | 1630 | else { | |
1628 | - | let | |
1629 | - | let | |
1630 | - | let | |
1631 | - | then [DeleteEntry( | |
1631 | + | let hq = bl(bk) | |
1632 | + | let ho = getString(hq) | |
1633 | + | let hp = if (isDefined(ho)) | |
1634 | + | then [DeleteEntry(cB(value(ho)))] | |
1632 | 1635 | else nil | |
1633 | - | ((( | |
1636 | + | (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fX(am, cl)._1) | |
1634 | 1637 | } | |
1635 | 1638 | } | |
1636 | 1639 | } | |
1637 | 1640 | } | |
1638 | 1641 | else if (("DUCK" == g)) | |
1639 | 1642 | then { | |
1640 | - | let | |
1641 | - | let | |
1642 | - | if (if (!(isDefined(getInteger( | |
1643 | + | let fw = value(assetInfo(fromBase58String(bk))) | |
1644 | + | let fx = bm(bk) | |
1645 | + | if (if (!(isDefined(getInteger(fx)))) | |
1643 | 1646 | then true | |
1644 | - | else !(isDefined(getString( | |
1645 | - | then throw(( | |
1647 | + | else !(isDefined(getString(bC(am))))) | |
1648 | + | then throw((fw.name + " is not staked")) | |
1646 | 1649 | else { | |
1647 | - | let | |
1648 | - | if (( | |
1649 | - | then throw(( | |
1650 | + | let fz = valueOrErrorMessage(getString(bB(bk)), (("NFT " + fw.name) + " is orphaned")) | |
1651 | + | if ((fz != am)) | |
1652 | + | then throw((aB + " is not yours")) | |
1650 | 1653 | else { | |
1651 | - | let | |
1652 | - | let | |
1653 | - | if (isDefined( | |
1654 | - | then throw(("Name already registered: " + | |
1654 | + | let hl = cG(hj) | |
1655 | + | let hm = getString(hl) | |
1656 | + | if (isDefined(hm)) | |
1657 | + | then throw(("Name already registered: " + hj)) | |
1655 | 1658 | else { | |
1656 | - | let | |
1657 | - | let | |
1658 | - | let | |
1659 | - | then [DeleteEntry( | |
1659 | + | let hq = bu(bk) | |
1660 | + | let ho = getString(hq) | |
1661 | + | let hp = if (isDefined(ho)) | |
1662 | + | then [DeleteEntry(cG(value(ho)))] | |
1660 | 1663 | else nil | |
1661 | - | ((( | |
1664 | + | (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fW(bk, cl)._1) | |
1662 | 1665 | } | |
1663 | 1666 | } | |
1664 | 1667 | } | |
1665 | 1668 | } | |
1666 | 1669 | else throw("Unknown entity type") | |
1667 | 1670 | } | |
1668 | - | $Tuple2((( | |
1671 | + | $Tuple2(((hk :+ ScriptTransfer(K, gF.amount, h)) ++ gE), 0) | |
1669 | 1672 | } | |
1670 | 1673 | } | |
1671 | 1674 | } | |
1672 | 1675 | ||
1673 | 1676 | ||
1674 | 1677 | ||
1675 | - | @Callable( | |
1676 | - | func setReferrals ( | |
1678 | + | @Callable(eg) | |
1679 | + | func setReferrals (hr,hs) = if ((eg.callerPublicKey != f)) | |
1677 | 1680 | then throw("Permission denied") | |
1678 | 1681 | else { | |
1679 | - | let | |
1680 | - | if ((size( | |
1682 | + | let gE = gi(eg) | |
1683 | + | if ((size(eg.payments) != 0)) | |
1681 | 1684 | then throw("No payments required") | |
1682 | - | else if (!(isDefined(addressFromString( | |
1683 | - | then throw(("Invalid address: " + | |
1685 | + | else if (!(isDefined(addressFromString(hr)))) | |
1686 | + | then throw(("Invalid address: " + hr)) | |
1684 | 1687 | else { | |
1685 | - | let | |
1686 | - | if (!(isDefined( | |
1687 | - | then throw(("Invalid address: " + | |
1688 | + | let ht = addressFromString(hs) | |
1689 | + | if (!(isDefined(ht))) | |
1690 | + | then throw(("Invalid address: " + hs)) | |
1688 | 1691 | else { | |
1689 | - | let | |
1690 | - | if (!(isDefined( | |
1692 | + | let hu = getString(al(hr)) | |
1693 | + | if (!(isDefined(hu))) | |
1691 | 1694 | then throw("oldPlayer didn't do any tx in game") | |
1692 | - | else if ((0 >= wavesBalance(value( | |
1695 | + | else if ((0 >= wavesBalance(value(ht)).available)) | |
1693 | 1696 | then throw("newPlayer has no WAVES") | |
1694 | 1697 | else { | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | then split_4C(value( | |
1698 | + | let hv = cI() | |
1699 | + | let hw = getString(hv) | |
1700 | + | let hx = if (isDefined(hw)) | |
1701 | + | then split_4C(value(hw), "_") | |
1699 | 1702 | else nil | |
1700 | - | if (containsElement( | |
1701 | - | then throw(( | |
1703 | + | if (containsElement(hx, hs)) | |
1704 | + | then throw((hs + " is not newbie (already has referrals)")) | |
1702 | 1705 | else { | |
1703 | - | let | |
1704 | - | let | |
1705 | - | if (if (isDefined( | |
1706 | - | then isDefined(addressFromString(value( | |
1706 | + | let fZ = bw(hs) | |
1707 | + | let ga = getString(fZ) | |
1708 | + | if (if (isDefined(ga)) | |
1709 | + | then isDefined(addressFromString(value(ga))) | |
1707 | 1710 | else false) | |
1708 | - | then throw((( | |
1711 | + | then throw(((hs + " already has refBy: ") + value(ga))) | |
1709 | 1712 | else { | |
1710 | - | let | |
1711 | - | let | |
1712 | - | let | |
1713 | - | then split_4C(value( | |
1713 | + | let hy = bA(hr) | |
1714 | + | let hz = getString(hy) | |
1715 | + | let hA = if (isDefined(hz)) | |
1716 | + | then split_4C(value(hz), "_") | |
1714 | 1717 | else nil | |
1715 | - | if (containsElement( | |
1716 | - | then throw(((( | |
1718 | + | if (containsElement(hA, hs)) | |
1719 | + | then throw((((hr + " already contains ") + hs) + " within referrals")) | |
1717 | 1720 | else { | |
1718 | - | let | |
1719 | - | let | |
1720 | - | then value( | |
1721 | - | else makeString_2C(( | |
1722 | - | $Tuple2(([StringEntry( | |
1721 | + | let hB = makeString_2C((hA :+ hs), "_") | |
1722 | + | let hC = if (containsElement(hx, hr)) | |
1723 | + | then value(hw) | |
1724 | + | else makeString_2C((hx :+ hr), "_") | |
1725 | + | $Tuple2(([StringEntry(fZ, hr), StringEntry(hy, hB), StringEntry(hv, hC)] ++ gE), 0) | |
1723 | 1726 | } | |
1724 | 1727 | } | |
1725 | 1728 | } | |
1730 | 1733 | ||
1731 | 1734 | ||
1732 | 1735 | ||
1733 | - | @Callable( | |
1734 | - | func distributePoints ( | |
1735 | - | let | |
1736 | - | if ((size( | |
1736 | + | @Callable(eg) | |
1737 | + | func distributePoints (hD,hE,hF,hG,hH) = { | |
1738 | + | let gE = gi(eg) | |
1739 | + | if ((size(eg.payments) != 0)) | |
1737 | 1740 | then throw("No payments required") | |
1738 | 1741 | else { | |
1739 | - | let am = toString( | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1742 | + | let am = toString(eg.originCaller) | |
1743 | + | let hI = ag(invoke(M, "checkWlgXpREADONLY", [am], nil)) | |
1744 | + | let hJ = ad(hI[1]) | |
1745 | + | let hK = if ((0 >= hJ)) | |
1743 | 1746 | then $Tuple2(0, nil) | |
1744 | 1747 | else { | |
1745 | - | let | |
1746 | - | if (( | |
1747 | - | then $Tuple2( | |
1748 | + | let fU = ad(invoke(M, "takeWlgXp", [am], nil)) | |
1749 | + | if ((fU == fU)) | |
1750 | + | then $Tuple2(hJ, [IntegerEntry(cd(am), ad(hI[0])), IntegerEntry(cc(am), ad(hI[2]))]) | |
1748 | 1751 | else throw("Strict value is not equal to itself.") | |
1749 | 1752 | } | |
1750 | - | let | |
1751 | - | let | |
1752 | - | let | |
1753 | - | let | |
1754 | - | let | |
1755 | - | let | |
1756 | - | let | |
1757 | - | let | |
1758 | - | let | |
1759 | - | if (( | |
1760 | - | then throw((("There are only " + toString( | |
1753 | + | let hL = hK._1 | |
1754 | + | let hM = hK._2 | |
1755 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
1756 | + | let hN = ce(am) | |
1757 | + | let hO = (valueOrElse(getInteger(hN), 0) + hL) | |
1758 | + | let hP = ca(by) | |
1759 | + | let hQ = valueOrElse(getInteger(hP), 0) | |
1760 | + | let hR = (hO + hQ) | |
1761 | + | let hS = ((((hD + hE) + hF) + hG) + hH) | |
1762 | + | if ((hS > hR)) | |
1763 | + | then throw((("There are only " + toString(hR)) + " free points to distribute")) | |
1761 | 1764 | else { | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | $Tuple2((([IntegerEntry( | |
1765 | + | let hT = bX(by) | |
1766 | + | let hU = split(valueOrElse(getString(hT), "0_0_0_0_0"), "_") | |
1767 | + | let hV = (hO - hS) | |
1768 | + | $Tuple2((([IntegerEntry(hN, if ((0 > hV)) | |
1766 | 1769 | then 0 | |
1767 | - | else | |
1768 | - | then ( | |
1769 | - | else | |
1770 | + | else hV), IntegerEntry(hP, if ((0 > hV)) | |
1771 | + | then (hQ + hV) | |
1772 | + | else hQ), StringEntry(hT, makeString([toString((parseIntValue(hU[bO]) + hD)), toString((parseIntValue(hU[bP]) + hE)), toString((parseIntValue(hU[bQ]) + hF)), toString((parseIntValue(hU[bR]) + hG)), toString((parseIntValue(hU[bS]) + hH))], "_"))] ++ gE) ++ hM), 0) | |
1770 | 1773 | } | |
1771 | 1774 | } | |
1772 | 1775 | } | |
1773 | 1776 | ||
1774 | 1777 | ||
1775 | 1778 | ||
1776 | - | @Callable( | |
1777 | - | func splitByGlobalWeightsREADONLY ( | |
1779 | + | @Callable(eg) | |
1780 | + | func splitByGlobalWeightsREADONLY (fC) = $Tuple2(nil, db(fC)) | |
1778 | 1781 | ||
1779 | 1782 | ||
1780 | 1783 | ||
1781 | - | @Callable( | |
1782 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
1783 | - | let | |
1784 | - | $Tuple2(nil, $Tuple2( | |
1784 | + | @Callable(eg) | |
1785 | + | func splitByGlobalAndLocalWeightsREADONLY (hW,hX,ek) = { | |
1786 | + | let ec = ej(ek) | |
1787 | + | $Tuple2(nil, $Tuple2(db(hW), cM(hX, ec))) | |
1785 | 1788 | } | |
1786 | 1789 | ||
1787 | 1790 | ||
1788 | 1791 | ||
1789 | - | @Callable( | |
1790 | - | func getBackpackREADONLY ( | |
1792 | + | @Callable(eg) | |
1793 | + | func getBackpackREADONLY (by) = $Tuple2(nil, makeString(eF(bD(by)), ":")) | |
1791 | 1794 | ||
1792 | 1795 | ||
1793 | 1796 | ||
1794 | - | @Callable( | |
1795 | - | func getWarehouseREADONLY ( | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1799 | - | $Tuple2(nil, makeString_2C( | |
1797 | + | @Callable(eg) | |
1798 | + | func getWarehouseREADONLY (bs) = { | |
1799 | + | let fw = value(assetInfo(fromBase58String(bs))) | |
1800 | + | let fa = (ai(split(fw.description, "_")[Q]) / o) | |
1801 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1802 | + | $Tuple2(nil, makeString_2C(eY(br(bs), fa, fb), ":")) | |
1800 | 1803 | } | |
1801 | 1804 | ||
1802 | 1805 | ||
1803 | 1806 | ||
1804 | - | @Callable( | |
1805 | - | func saveLastTx () = if (!(containsElement([M, K, N, O], | |
1807 | + | @Callable(eg) | |
1808 | + | func saveLastTx () = if (!(containsElement([M, K, N, O], eg.caller))) | |
1806 | 1809 | then throw("Access denied") | |
1807 | - | else $Tuple2( | |
1810 | + | else $Tuple2(gi(eg), 42) | |
1808 | 1811 | ||
1809 | 1812 | ||
1810 | 1813 | ||
1811 | - | @Callable( | |
1812 | - | func updateDuckStats ( | |
1814 | + | @Callable(eg) | |
1815 | + | func updateDuckStats (by,fU) = if ((eg.caller != K)) | |
1813 | 1816 | then throw("Access denied") | |
1814 | - | else | |
1817 | + | else fW(by, fU) | |
1815 | 1818 | ||
1816 | 1819 | ||
1817 | 1820 | ||
1818 | - | @Callable( | |
1819 | - | func updateAccStats (am, | |
1821 | + | @Callable(eg) | |
1822 | + | func updateAccStats (am,fU) = if (!(containsElement([M, K, O], eg.caller))) | |
1820 | 1823 | then throw("Access denied") | |
1821 | - | else | |
1824 | + | else fX(am, fU) | |
1822 | 1825 | ||
1823 | 1826 | ||
1824 | 1827 | ||
1825 | - | @Callable( | |
1826 | - | func initDuckTourAttempt ( | |
1828 | + | @Callable(eg) | |
1829 | + | func initDuckTourAttempt (by) = if ((eg.caller != N)) | |
1827 | 1830 | then throw("Access denied") | |
1828 | 1831 | else { | |
1829 | - | let | |
1830 | - | let | |
1831 | - | let | |
1832 | - | let | |
1833 | - | let | |
1834 | - | let | |
1835 | - | let | |
1836 | - | $Tuple2([IntegerEntry( | |
1832 | + | let hY = bW(by) | |
1833 | + | let hZ = cp(valueOrElse(getInteger(bZ(by)), 0)) | |
1834 | + | let ia = valueOrElse(getInteger(hY), hZ) | |
1835 | + | let ib = bE(by) | |
1836 | + | let ft = valueOrElse(getString(ib), aI) | |
1837 | + | let ic = valueOrElse(getInteger(N, bI), 0) | |
1838 | + | let id = (toString(ic) + "_T_0") | |
1839 | + | $Tuple2([IntegerEntry(cf(by), ia), IntegerEntry(hY, hZ), StringEntry(cg(by), ft), StringEntry(ib, id)], id) | |
1837 | 1840 | } | |
1838 | 1841 | ||
1839 | 1842 | ||
1840 | 1843 | ||
1841 | - | @Callable( | |
1844 | + | @Callable(eg) | |
1842 | 1845 | func breakAttempt () = { | |
1843 | - | let | |
1844 | - | let | |
1845 | - | let | |
1846 | - | let | |
1847 | - | if ((split( | |
1846 | + | let gE = gi(eg) | |
1847 | + | let by = valueOrErrorMessage(getString(bC(toString(eg.caller))), "You don't have a duck staked") | |
1848 | + | let ib = bE(by) | |
1849 | + | let ft = valueOrElse(getString(ib), aI) | |
1850 | + | if ((split(ft, "_")[bh] != "T")) | |
1848 | 1851 | then throw("Your duck is not in the tournament") | |
1849 | 1852 | else { | |
1850 | - | let | |
1851 | - | let | |
1852 | - | $Tuple2((( | |
1853 | + | let ie = getIntegerValue(cf(by)) | |
1854 | + | let if = getStringValue(cg(by)) | |
1855 | + | $Tuple2(((gE :+ IntegerEntry(bW(by), ie)) :+ StringEntry(ib, if)), ft) | |
1853 | 1856 | } | |
1854 | 1857 | } | |
1855 | 1858 | ||
1856 | 1859 | ||
1857 | 1860 | ||
1858 | - | @Callable( | |
1859 | - | func breakAttemptCallback () = if (( | |
1861 | + | @Callable(eg) | |
1862 | + | func breakAttemptCallback () = if ((eg.caller != N)) | |
1860 | 1863 | then throw("Access denied") | |
1861 | 1864 | else { | |
1862 | - | let | |
1863 | - | $Tuple2([IntegerEntry( | |
1865 | + | let by = valueOrErrorMessage(getString(bC(toString(eg.originCaller))), "You don't have a duck staked") | |
1866 | + | $Tuple2([IntegerEntry(bW(by), getIntegerValue(cf(by))), StringEntry(bE(by), getStringValue(cg(by)))], "breakAttemptCallback") | |
1864 | 1867 | } | |
1865 | 1868 | ||
1866 | 1869 | ||
1867 | 1870 | ||
1868 | - | @Callable( | |
1869 | - | func exitTournamentInternal ( | |
1871 | + | @Callable(eg) | |
1872 | + | func exitTournamentInternal (by) = if ((eg.caller != this)) | |
1870 | 1873 | then throw("Access denied") | |
1871 | 1874 | else { | |
1872 | - | let | |
1873 | - | let | |
1874 | - | $Tuple2([IntegerEntry( | |
1875 | + | let ie = getIntegerValue(cf(by)) | |
1876 | + | let if = getStringValue(cg(by)) | |
1877 | + | $Tuple2([IntegerEntry(bW(by), ie), StringEntry(bE(by), if)], false) | |
1875 | 1878 | } | |
1876 | 1879 | ||
1877 | 1880 | ||
1878 | 1881 | ||
1879 | - | @Callable( | |
1880 | - | func processDelivery ( | |
1882 | + | @Callable(eg) | |
1883 | + | func processDelivery (by) = if ((eg.caller != this)) | |
1881 | 1884 | then throw("Access denied") | |
1882 | 1885 | else { | |
1883 | - | let am = toString( | |
1884 | - | let | |
1885 | - | if (( | |
1886 | - | then throw(("Delivery is not available, fund=" + | |
1886 | + | let am = toString(eg.originCaller) | |
1887 | + | let ig = valueOrElse(getInteger(K, bH), 0) | |
1888 | + | if ((aK > ig)) | |
1889 | + | then throw(("Delivery is not available, fund=" + ao(ig, 6))) | |
1887 | 1890 | else { | |
1888 | - | let | |
1889 | - | let | |
1890 | - | let | |
1891 | - | let | |
1892 | - | let | |
1893 | - | then valueOrElse(getInteger( | |
1891 | + | let gQ = lastBlock.timestamp | |
1892 | + | let ih = ci(am) | |
1893 | + | let ii = valueOrElse(getInteger(cj(am)), 0) | |
1894 | + | let ij = (gQ / cv) | |
1895 | + | let dC = if ((ii == ij)) | |
1896 | + | then valueOrElse(getInteger(ih), 0) | |
1894 | 1897 | else 0 | |
1895 | - | let | |
1896 | - | let | |
1897 | - | if (( | |
1898 | - | then throw((("You already used " + toString( | |
1898 | + | let ik = valueOrElse(getInteger(O, cx(am)), 0) | |
1899 | + | let il = (aM + (ik / aN)) | |
1900 | + | if ((dC >= il)) | |
1901 | + | then throw((("You already used " + toString(il)) + " delivery attempts for today")) | |
1899 | 1902 | else { | |
1900 | - | let | |
1901 | - | let | |
1902 | - | $Tuple2([IntegerEntry( | |
1903 | + | let im = ch(by) | |
1904 | + | let in = invoke(K, "sendDeliveryReward", [am], nil) | |
1905 | + | $Tuple2([IntegerEntry(ih, (dC + 1)), IntegerEntry(cj(am), ij), IntegerEntry(im, (valueOrElse(getInteger(im), 0) + 1))], in) | |
1903 | 1906 | } | |
1904 | 1907 | } | |
1905 | 1908 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = false | |
5 | 5 | ||
6 | 6 | let b = false | |
7 | 7 | ||
8 | 8 | let c = 86400000 | |
9 | 9 | ||
10 | 10 | let d = 1731279600000 | |
11 | 11 | ||
12 | 12 | let e = take(drop(this.bytes, 1), 1) | |
13 | 13 | ||
14 | 14 | let f = { | |
15 | 15 | let g = e | |
16 | 16 | if ((base58'2W' == g)) | |
17 | 17 | then if (a) | |
18 | 18 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
19 | 19 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
20 | 20 | else if ((base58'2T' == g)) | |
21 | 21 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
22 | 22 | else throw("Unknown chain") | |
23 | 23 | } | |
24 | 24 | ||
25 | 25 | let h = { | |
26 | 26 | let g = e | |
27 | 27 | if ((base58'2W' == g)) | |
28 | 28 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
29 | 29 | else if ((base58'2T' == g)) | |
30 | 30 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
31 | 31 | else throw("Unknown chain") | |
32 | 32 | } | |
33 | 33 | ||
34 | 34 | let i = { | |
35 | 35 | let g = e | |
36 | 36 | if ((base58'2W' == g)) | |
37 | 37 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
38 | 38 | else if ((base58'2T' == g)) | |
39 | 39 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
40 | 40 | else throw("Unknown chain") | |
41 | 41 | } | |
42 | 42 | ||
43 | 43 | let j = { | |
44 | 44 | let g = e | |
45 | 45 | if ((base58'2W' == g)) | |
46 | 46 | then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA" | |
47 | 47 | else if ((base58'2T' == g)) | |
48 | 48 | then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh" | |
49 | 49 | else throw("Unknown chain") | |
50 | 50 | } | |
51 | 51 | ||
52 | 52 | let k = { | |
53 | 53 | let g = e | |
54 | 54 | if ((base58'2W' == g)) | |
55 | 55 | then c | |
56 | 56 | else if ((base58'2T' == g)) | |
57 | 57 | then 60000 | |
58 | 58 | else throw("Unknown chain") | |
59 | 59 | } | |
60 | 60 | ||
61 | 61 | let l = "__" | |
62 | 62 | ||
63 | 63 | let m = 1000000 | |
64 | 64 | ||
65 | 65 | let n = 100000000 | |
66 | 66 | ||
67 | 67 | let o = 25 | |
68 | 68 | ||
69 | 69 | let p = 100 | |
70 | 70 | ||
71 | 71 | let q = 225 | |
72 | 72 | ||
73 | 73 | let r = 400 | |
74 | 74 | ||
75 | 75 | let s = 625 | |
76 | 76 | ||
77 | 77 | let t = [0, 1, 2, 3, 4, 5] | |
78 | 78 | ||
79 | 79 | func u (v,w) = valueOrErrorMessage(getString(v, w), makeString(["mandatory ", toString(v), ".", w, " is not defined"], "")) | |
80 | 80 | ||
81 | 81 | ||
82 | 82 | let x = 2 | |
83 | 83 | ||
84 | 84 | let y = 3 | |
85 | 85 | ||
86 | 86 | let z = 4 | |
87 | 87 | ||
88 | 88 | let A = 7 | |
89 | 89 | ||
90 | 90 | let B = 8 | |
91 | 91 | ||
92 | 92 | func C () = "%s__restConfig" | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | func D () = "%s__restAddr" | |
96 | 96 | ||
97 | 97 | ||
98 | 98 | func E (F) = split_4C(u(F, C()), l) | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | func G (H,I) = valueOrErrorMessage(addressFromString(H[I]), ("Rest cfg doesn't contain address at index " + toString(I))) | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | let J = addressFromStringValue(valueOrElse(getString(this, D()), i)) | |
105 | 105 | ||
106 | 106 | let H = E(J) | |
107 | 107 | ||
108 | 108 | let K = G(H, x) | |
109 | 109 | ||
110 | 110 | let L = G(H, y) | |
111 | 111 | ||
112 | 112 | let M = G(H, z) | |
113 | 113 | ||
114 | 114 | let N = G(H, A) | |
115 | 115 | ||
116 | 116 | let O = G(H, B) | |
117 | 117 | ||
118 | 118 | let P = 0 | |
119 | 119 | ||
120 | 120 | let Q = 1 | |
121 | 121 | ||
122 | 122 | let R = 2 | |
123 | 123 | ||
124 | 124 | let S = 3 | |
125 | 125 | ||
126 | 126 | let T = "acresAssetId" | |
127 | 127 | ||
128 | 128 | let U = valueOrErrorMessage(getBinary(O, T), "ACRES is not issued yet") | |
129 | 129 | ||
130 | 130 | let V = 2 | |
131 | 131 | ||
132 | 132 | func W (v) = ("finishBlockFor_" + v) | |
133 | 133 | ||
134 | 134 | ||
135 | 135 | func X () = "resTypesProportions" | |
136 | 136 | ||
137 | 137 | ||
138 | 138 | func Y (Z) = ("resTypesByContinent_" + Z) | |
139 | 139 | ||
140 | 140 | ||
141 | 141 | func aa (ab) = ("stakedLandsByOwner_" + ab) | |
142 | 142 | ||
143 | 143 | ||
144 | 144 | func ac (ab) = ("stakedPiecesByOwner_" + ab) | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | func ad (ae) = { | |
148 | 148 | let g = ae | |
149 | 149 | if ($isInstanceOf(g, "Int")) | |
150 | 150 | then { | |
151 | 151 | let af = g | |
152 | 152 | af | |
153 | 153 | } | |
154 | 154 | else throw("fail to cast into Int") | |
155 | 155 | } | |
156 | 156 | ||
157 | 157 | ||
158 | 158 | func ag (ae) = { | |
159 | 159 | let g = ae | |
160 | 160 | if ($isInstanceOf(g, "List[Any]")) | |
161 | 161 | then { | |
162 | 162 | let ah = g | |
163 | 163 | ah | |
164 | 164 | } | |
165 | 165 | else throw("fail to cast into List[Any]") | |
166 | 166 | } | |
167 | 167 | ||
168 | 168 | ||
169 | 169 | func ai (aj) = { | |
170 | 170 | let g = aj | |
171 | 171 | if (("S" == g)) | |
172 | 172 | then o | |
173 | 173 | else if (("M" == g)) | |
174 | 174 | then p | |
175 | 175 | else if (("L" == g)) | |
176 | 176 | then q | |
177 | 177 | else if (("XL" == g)) | |
178 | 178 | then r | |
179 | 179 | else if (("XXL" == g)) | |
180 | 180 | then s | |
181 | 181 | else throw("Unknown land size") | |
182 | 182 | } | |
183 | 183 | ||
184 | 184 | ||
185 | 185 | func ak () = "contractsBlocked" | |
186 | 186 | ||
187 | 187 | ||
188 | - | func al (am) = (" | |
188 | + | func al (am) = ("lastWeekTxIdByUser_" + am) | |
189 | 189 | ||
190 | 190 | ||
191 | - | func an (ao,ap) = { | |
192 | - | let aq = pow(10, 0, ap, 0, 0, DOWN) | |
193 | - | let ar = toString((ao % aq)) | |
194 | - | let as = drop(toString(aq), (1 + size(ar))) | |
195 | - | (((toString((ao / aq)) + ".") + as) + ar) | |
191 | + | func an (am) = ("curWeekTxIdByUser_" + am) | |
192 | + | ||
193 | + | ||
194 | + | func ao (ap,aq) = { | |
195 | + | let ar = pow(10, 0, aq, 0, 0, DOWN) | |
196 | + | let as = toString((ap % ar)) | |
197 | + | let at = drop(toString(ar), (1 + size(as))) | |
198 | + | (((toString((ap / ar)) + ".") + at) + as) | |
196 | 199 | } | |
197 | 200 | ||
198 | 201 | ||
199 | - | func | |
202 | + | func au (av,aw,ax) = if ((0 >= av)) | |
200 | 203 | then throw("maxValue should be > 0") | |
201 | 204 | else { | |
202 | - | let | |
203 | - | (toInt( | |
205 | + | let ay = sha256_16Kb((aw + ax)) | |
206 | + | (toInt(ay) % av) | |
204 | 207 | } | |
205 | 208 | ||
206 | 209 | ||
207 | - | func | |
210 | + | func az () = min([lastBlock.timestamp, d]) | |
208 | 211 | ||
209 | 212 | ||
210 | - | let | |
213 | + | let aA = "LAND" | |
211 | 214 | ||
212 | - | let | |
215 | + | let aB = "DUCK" | |
213 | 216 | ||
214 | - | let | |
217 | + | let aC = "ROBO" | |
215 | 218 | ||
216 | - | let | |
219 | + | let aD = "PRESALE" | |
217 | 220 | ||
218 | - | let | |
221 | + | let aE = 6 | |
219 | 222 | ||
220 | - | let | |
223 | + | let aF = 25 | |
221 | 224 | ||
222 | - | let | |
225 | + | let aG = 3456000 | |
223 | 226 | ||
224 | - | let | |
227 | + | let aH = 10000000000 | |
225 | 228 | ||
226 | - | let | |
229 | + | let aI = "Africa_F_Africa" | |
227 | 230 | ||
228 | - | let | |
231 | + | let aJ = 39637 | |
229 | 232 | ||
230 | - | let | |
233 | + | let aK = 50000 | |
231 | 234 | ||
232 | - | let | |
235 | + | let aL = 10 | |
233 | 236 | ||
234 | - | let | |
237 | + | let aM = 0 | |
235 | 238 | ||
236 | - | let | |
239 | + | let aN = 200000000 | |
237 | 240 | ||
238 | - | let | |
241 | + | let aO = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
239 | 242 | ||
240 | - | let | |
243 | + | let aP = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
241 | 244 | ||
242 | - | let | |
245 | + | let aQ = 6 | |
243 | 246 | ||
244 | - | let aQ = 9 | |
245 | - | ||
246 | - | let aR = 10 | |
247 | + | let aR = 9 | |
247 | 248 | ||
248 | 249 | let aS = 10 | |
249 | 250 | ||
250 | - | let aT = | |
251 | + | let aT = 10 | |
251 | 252 | ||
252 | - | let aU = | |
253 | + | let aU = 0 | |
253 | 254 | ||
254 | - | let aV = | |
255 | + | let aV = 1 | |
255 | 256 | ||
256 | - | let aW = | |
257 | + | let aW = 2 | |
257 | 258 | ||
258 | - | let aX = | |
259 | + | let aX = 3 | |
259 | 260 | ||
260 | - | let aY = | |
261 | + | let aY = 4 | |
261 | 262 | ||
262 | - | let aZ = | |
263 | + | let aZ = 0 | |
263 | 264 | ||
264 | - | let ba = | |
265 | + | let ba = 1 | |
265 | 266 | ||
266 | - | let bb = | |
267 | + | let bb = 2 | |
267 | 268 | ||
268 | - | let bc = | |
269 | + | let bc = 3 | |
269 | 270 | ||
270 | - | let bd = | |
271 | + | let bd = 0 | |
271 | 272 | ||
272 | - | let be = | |
273 | + | let be = 1 | |
273 | 274 | ||
274 | - | let bf = | |
275 | + | let bf = 2 | |
275 | 276 | ||
276 | - | let bg = | |
277 | + | let bg = 3 | |
277 | 278 | ||
278 | - | let bh = | |
279 | + | let bh = 1 | |
279 | 280 | ||
280 | - | func bi (bj) = ("no_" + bj) | |
281 | + | let bi = 2 | |
282 | + | ||
283 | + | func bj (bk) = ("no_" + bk) | |
281 | 284 | ||
282 | 285 | ||
283 | - | func | |
286 | + | func bl (bk) = ("lcna_" + bk) | |
284 | 287 | ||
285 | 288 | ||
286 | - | func | |
289 | + | func bm (bk) = ("st_" + bk) | |
287 | 290 | ||
288 | 291 | ||
289 | - | func | |
292 | + | func bn (bo,bk) = makeString(["las", bo, bk], "_") | |
290 | 293 | ||
291 | 294 | ||
292 | - | func | |
295 | + | func bp (bq,bk,ab) = ((((("sttao_" + bq) + "_") + bk) + "_") + ab) | |
293 | 296 | ||
294 | 297 | ||
295 | - | func | |
298 | + | func br (bs) = ("wh_" + bs) | |
296 | 299 | ||
297 | 300 | ||
298 | - | func | |
301 | + | func bt (bk) = ("infraLevel_" + bk) | |
299 | 302 | ||
300 | 303 | ||
301 | - | func | |
304 | + | func bu (bk) = ("duckCustomNameByAssetId_" + bk) | |
302 | 305 | ||
303 | 306 | ||
304 | - | func | |
307 | + | func bv (am) = ("accountCustomNameByAddr_" + am) | |
305 | 308 | ||
306 | 309 | ||
307 | - | func | |
310 | + | func bw (am) = ("accRefBy_" + am) | |
308 | 311 | ||
309 | 312 | ||
310 | - | func | |
313 | + | func bx (by) = ("onboardArtActivatedOnDuck_" + by) | |
311 | 314 | ||
312 | 315 | ||
313 | - | func | |
316 | + | func bz (am) = ("onboardArtActivatedDuckBy_" + am) | |
314 | 317 | ||
315 | 318 | ||
316 | - | func | |
319 | + | func bA (am) = ("accReferrals_" + am) | |
317 | 320 | ||
318 | 321 | ||
319 | - | func | |
322 | + | func bB (bk) = ("duckOwner_" + bk) | |
320 | 323 | ||
321 | 324 | ||
322 | - | func | |
325 | + | func bC (ab) = ("stakedDuckByOwner_" + ab) | |
323 | 326 | ||
324 | 327 | ||
325 | - | func | |
328 | + | func bD (by) = ("backPack_" + by) | |
326 | 329 | ||
327 | 330 | ||
328 | - | func | |
331 | + | func bE (by) = ("duckLocation_" + by) | |
329 | 332 | ||
330 | 333 | ||
331 | - | func | |
334 | + | func bF (bG) = ("%s%s__userGwlReleaseTime__" + bG) | |
332 | 335 | ||
333 | 336 | ||
334 | - | let | |
337 | + | let bH = "deliveryFund" | |
335 | 338 | ||
336 | - | let | |
339 | + | let bI = "%s__lastTourId" | |
337 | 340 | ||
338 | - | let | |
341 | + | let bJ = 100000000 | |
339 | 342 | ||
340 | - | let | |
343 | + | let bK = 3200 | |
341 | 344 | ||
342 | - | let | |
345 | + | let bL = 4000 | |
343 | 346 | ||
344 | - | let | |
347 | + | let bM = 3 | |
345 | 348 | ||
346 | - | let | |
349 | + | let bN = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
347 | 350 | ||
348 | - | let | |
351 | + | let bO = 0 | |
349 | 352 | ||
350 | - | let | |
353 | + | let bP = 1 | |
351 | 354 | ||
352 | - | let | |
355 | + | let bQ = 2 | |
353 | 356 | ||
354 | - | let | |
357 | + | let bR = 3 | |
355 | 358 | ||
356 | - | let bR = 4 | |
357 | - | ||
358 | - | let bS = 2 | |
359 | + | let bS = 4 | |
359 | 360 | ||
360 | 361 | let bT = 2 | |
361 | 362 | ||
362 | - | let bU = | |
363 | + | let bU = 2 | |
363 | 364 | ||
364 | - | func bV (bx) = ("duckHealth_" + bx) | |
365 | + | let bV = 30 | |
366 | + | ||
367 | + | func bW (by) = ("duckHealth_" + by) | |
365 | 368 | ||
366 | 369 | ||
367 | - | func | |
370 | + | func bX (by) = ("duckChars_" + by) | |
368 | 371 | ||
369 | 372 | ||
370 | - | func | |
373 | + | func bY (by) = ("duckXP_" + by) | |
371 | 374 | ||
372 | 375 | ||
373 | - | func | |
376 | + | func bZ (by) = ("duckLevel_" + by) | |
374 | 377 | ||
375 | 378 | ||
376 | - | func | |
379 | + | func ca (by) = ("duckFreePoints_" + by) | |
377 | 380 | ||
378 | 381 | ||
379 | - | func | |
382 | + | func cb (by) = ("duckEquipment_" + by) | |
380 | 383 | ||
381 | 384 | ||
382 | - | func | |
385 | + | func cc (am) = ("userXP_" + am) | |
383 | 386 | ||
384 | 387 | ||
385 | - | func | |
388 | + | func cd (am) = ("userLevel_" + am) | |
386 | 389 | ||
387 | 390 | ||
388 | - | func | |
391 | + | func ce (am) = ("userFreePoints_" + am) | |
389 | 392 | ||
390 | 393 | ||
391 | - | func | |
394 | + | func cf (by) = ("savedHealth_" + by) | |
392 | 395 | ||
393 | 396 | ||
394 | - | func | |
397 | + | func cg (by) = ("savedLocation_" + by) | |
395 | 398 | ||
396 | 399 | ||
397 | - | func | |
400 | + | func ch (by) = ("totalDeliveryCountByDuck_" + by) | |
398 | 401 | ||
399 | 402 | ||
400 | - | func | |
403 | + | func ci (am) = ("userDeliveryCount_" + am) | |
401 | 404 | ||
402 | 405 | ||
403 | - | func | |
406 | + | func cj (am) = ("userLastDeliveryDay_" + am) | |
404 | 407 | ||
405 | 408 | ||
406 | - | let cj = 10000 | |
407 | - | ||
408 | - | let ck = 1000000 | |
409 | + | let ck = 10000 | |
409 | 410 | ||
410 | 411 | let cl = 1000000 | |
411 | 412 | ||
412 | - | func cm (cn) = fraction(bJ, pow(cn, 4, bK, 4, 4, DOWN), bI) | |
413 | + | let cm = 1000000 | |
414 | + | ||
415 | + | func cn (co) = fraction(bK, pow(co, 4, bL, 4, 4, DOWN), bJ) | |
413 | 416 | ||
414 | 417 | ||
415 | - | func | |
418 | + | func cp (cq) = (100 + cq) | |
416 | 419 | ||
417 | 420 | ||
418 | - | func | |
419 | - | let | |
420 | - | [ | |
421 | + | func cr (cs,ct) = { | |
422 | + | let cu = cn(ct) | |
423 | + | [cu, (bM * (cu - cs))] | |
421 | 424 | } | |
422 | 425 | ||
423 | 426 | ||
424 | - | let | |
427 | + | let cv = 86400000 | |
425 | 428 | ||
426 | - | func | |
429 | + | func cw (am) = ("lastArbTimeUser_" + am) | |
427 | 430 | ||
428 | 431 | ||
429 | - | func | |
432 | + | func cx (am) = ("acresStakedAmountByUser_" + am) | |
430 | 433 | ||
431 | 434 | ||
432 | - | let | |
435 | + | let cy = 5000000 | |
433 | 436 | ||
434 | - | let | |
437 | + | let cz = 50 | |
435 | 438 | ||
436 | - | let | |
439 | + | let cA = 500 | |
437 | 440 | ||
438 | - | func | |
441 | + | func cB (cC) = ("lcn_" + cC) | |
439 | 442 | ||
440 | 443 | ||
441 | - | func | |
444 | + | func cD (bk,ab) = ((("ilao_" + bk) + "_") + ab) | |
442 | 445 | ||
443 | 446 | ||
444 | - | func | |
447 | + | func cE (cF) = ("lo_" + cF) | |
445 | 448 | ||
446 | 449 | ||
447 | - | func | |
450 | + | func cG (cC) = ("duckByCustomName_" + cC) | |
448 | 451 | ||
449 | 452 | ||
450 | - | func | |
453 | + | func cH (cC) = ("accountByCustomName_" + cC) | |
451 | 454 | ||
452 | 455 | ||
453 | - | func | |
456 | + | func cI () = "oldiesList" | |
454 | 457 | ||
455 | 458 | ||
456 | - | let | |
459 | + | let cJ = 0 | |
457 | 460 | ||
458 | - | let | |
461 | + | let cK = 1 | |
459 | 462 | ||
460 | - | let | |
463 | + | let cL = 2 | |
461 | 464 | ||
462 | - | func | |
463 | - | let | |
464 | - | if ((0 >= | |
465 | + | func cM (cN,cO) = { | |
466 | + | let cP = (((((cO[0] + cO[1]) + cO[2]) + cO[3]) + cO[4]) + cO[5]) | |
467 | + | if ((0 >= cP)) | |
465 | 468 | then throw("Zero weights sum") | |
466 | 469 | else { | |
467 | - | let | |
468 | - | func | |
470 | + | let cQ = fraction(cN, m, cP) | |
471 | + | func cR (cS,cT) = (cS :+ fraction(cT, cQ, m)) | |
469 | 472 | ||
470 | - | let | |
471 | - | let | |
472 | - | let | |
473 | - | func | |
474 | - | then | |
475 | - | else | |
473 | + | let cU = cO | |
474 | + | let cV = size(cU) | |
475 | + | let cW = nil | |
476 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
477 | + | then cY | |
478 | + | else cR(cY, cU[cZ]) | |
476 | 479 | ||
477 | - | func | |
478 | - | then | |
480 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
481 | + | then cY | |
479 | 482 | else throw("List size exceeds 6") | |
480 | 483 | ||
481 | - | | |
484 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
482 | 485 | } | |
483 | 486 | } | |
484 | 487 | ||
485 | 488 | ||
486 | - | func | |
487 | - | let | |
488 | - | if ((size( | |
489 | + | func db (cN) = { | |
490 | + | let dc = split(value(getString(X())), "_") | |
491 | + | if ((size(dc) != aE)) | |
489 | 492 | then throw("Wrong proportions data") | |
490 | 493 | else { | |
491 | - | let | |
492 | - | | |
494 | + | let dd = [parseIntValue(dc[0]), parseIntValue(dc[1]), parseIntValue(dc[2]), parseIntValue(dc[3]), parseIntValue(dc[4]), parseIntValue(dc[5])] | |
495 | + | cM(cN, dd) | |
493 | 496 | } | |
494 | 497 | } | |
495 | 498 | ||
496 | 499 | ||
497 | - | func | |
498 | - | let | |
500 | + | func de (df) = { | |
501 | + | let dg = if ((df == "")) | |
499 | 502 | then nil | |
500 | - | else split_4C( | |
501 | - | func | |
502 | - | let | |
503 | - | let | |
504 | - | then parseIntValue( | |
503 | + | else split_4C(df, "_") | |
504 | + | func dh (cS,di) = { | |
505 | + | let dj = (size(cS) / 8) | |
506 | + | let dk = if ((size(dg) > dj)) | |
507 | + | then parseIntValue(dg[dj]) | |
505 | 508 | else 0 | |
506 | - | ( | |
509 | + | (cS + toBytes(dk)) | |
507 | 510 | } | |
508 | 511 | ||
509 | - | let | |
510 | - | let | |
511 | - | let | |
512 | - | func | |
513 | - | then | |
514 | - | else | |
512 | + | let cU = aP | |
513 | + | let cV = size(cU) | |
514 | + | let cW = base58'' | |
515 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
516 | + | then cY | |
517 | + | else dh(cY, cU[cZ]) | |
515 | 518 | ||
516 | - | func | |
517 | - | then | |
519 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
520 | + | then cY | |
518 | 521 | else throw("List size exceeds 50") | |
519 | 522 | ||
520 | - | | |
523 | + | da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
521 | 524 | } | |
522 | 525 | ||
523 | 526 | ||
524 | - | func | |
525 | - | func | |
526 | - | let | |
527 | - | let | |
528 | - | ( | |
527 | + | func dl (dm) = { | |
528 | + | func dn (cS,di) = { | |
529 | + | let dj = size(cS) | |
530 | + | let do = take(drop(dm, (8 * dj)), 8) | |
531 | + | (cS :+ toString(toInt(do))) | |
529 | 532 | } | |
530 | 533 | ||
531 | 534 | makeString_2C({ | |
532 | - | let | |
533 | - | let | |
534 | - | let | |
535 | - | func | |
536 | - | then | |
537 | - | else | |
535 | + | let cU = aP | |
536 | + | let cV = size(cU) | |
537 | + | let cW = nil | |
538 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
539 | + | then cY | |
540 | + | else dn(cY, cU[cZ]) | |
538 | 541 | ||
539 | - | func | |
540 | - | then | |
542 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
543 | + | then cY | |
541 | 544 | else throw("List size exceeds 50") | |
542 | 545 | ||
543 | - | | |
546 | + | da(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
544 | 547 | }, "_") | |
545 | 548 | } | |
546 | 549 | ||
547 | 550 | ||
548 | - | func | |
549 | - | func | |
550 | - | let | |
551 | - | then | |
551 | + | func dp (dq,dr) = { | |
552 | + | func ds (cS,dj) = { | |
553 | + | let dt = if ((size(dq) > (7 + dj))) | |
554 | + | then dq[(7 + dj)] | |
552 | 555 | else 0 | |
553 | - | if ((parseIntValue( | |
554 | - | then throw(("Requirement not satisfied: " + | |
556 | + | if ((parseIntValue(dr[dj]) > (dq[dj] + dt))) | |
557 | + | then throw(("Requirement not satisfied: " + bN[dj])) | |
555 | 558 | else true | |
556 | 559 | } | |
557 | 560 | ||
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | func | |
562 | - | then | |
563 | - | else | |
561 | + | let cU = [0, 1, 2, 3, 4, 5, 6] | |
562 | + | let cV = size(cU) | |
563 | + | let cW = false | |
564 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
565 | + | then cY | |
566 | + | else ds(cY, cU[cZ]) | |
564 | 567 | ||
565 | - | func | |
566 | - | then | |
568 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
569 | + | then cY | |
567 | 570 | else throw("List size exceeds 7") | |
568 | 571 | ||
569 | - | | |
572 | + | da(cX(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6), 7) | |
570 | 573 | } | |
571 | 574 | ||
572 | 575 | ||
573 | - | func | |
574 | - | let | |
575 | - | if ((size( | |
576 | + | func du (dv,dg,dw,dx,dy,dz,dq) = { | |
577 | + | let dA = split(dv, ":") | |
578 | + | if ((size(dA) != 2)) | |
576 | 579 | then throw("Incorrect format, should be index:amount") | |
577 | - | else if (if (!( | |
578 | - | then (size( | |
580 | + | else if (if (!(dw)) | |
581 | + | then (size(dA[0]) != 2) | |
579 | 582 | else false) | |
580 | 583 | then throw("Product idx should be 2 digits, zero padded") | |
581 | 584 | else { | |
582 | - | let | |
583 | - | let | |
584 | - | if (if ((0 > | |
585 | + | let dB = parseIntValue(dA[0]) | |
586 | + | let dC = parseIntValue(dA[1]) | |
587 | + | if (if ((0 > dB)) | |
585 | 588 | then true | |
586 | - | else ( | |
589 | + | else (dB >= size(aP))) | |
587 | 590 | then throw("Unknown product idx") | |
588 | - | else if ((0 > | |
591 | + | else if ((0 > dC)) | |
589 | 592 | then throw("Count can't be negative") | |
590 | - | else if (( | |
591 | - | then throw(((("Can't put more than " + toString( | |
592 | - | else if (( | |
593 | - | then $Tuple2( | |
593 | + | else if ((dC > bV)) | |
594 | + | then throw(((("Can't put more than " + toString(bV)) + " of ") + aO[dB])) | |
595 | + | else if ((dC == 0)) | |
596 | + | then $Tuple2(dg, false) | |
594 | 597 | else { | |
595 | - | let | |
596 | - | let | |
597 | - | let | |
598 | - | let | |
599 | - | if (if (!( | |
600 | - | then ( | |
598 | + | let dD = take(dg, (8 * dB)) | |
599 | + | let dk = toInt(take(drop(dg, (8 * dB)), 8)) | |
600 | + | let dE = drop(dg, (8 * (dB + 1))) | |
601 | + | let di = split(aP[dB], "_") | |
602 | + | if (if (!(dw)) | |
603 | + | then (dC > dk) | |
601 | 604 | else false) | |
602 | - | then throw(((((("You have " + toString( | |
605 | + | then throw(((((("You have " + toString(dk)) + " of ") + aO[dB]) + ", but tried to use ") + toString(dC))) | |
603 | 606 | else { | |
604 | - | let | |
605 | - | then | |
607 | + | let dF = if (if (!(dw)) | |
608 | + | then dp(dq, split(di[aR], ",")) | |
606 | 609 | else false) | |
607 | 610 | then { | |
608 | - | let | |
609 | - | if (( | |
611 | + | let dG = di[aS] | |
612 | + | if ((dG == "")) | |
610 | 613 | then throw("Item cannot be equipped") | |
611 | 614 | else { | |
612 | - | let | |
613 | - | let | |
614 | - | if (( | |
615 | + | let dH = parseIntValue(dG) | |
616 | + | let dI = (dH / 100) | |
617 | + | if ((dx != dI)) | |
615 | 618 | then throw("Segment incompatible") | |
616 | 619 | else { | |
617 | - | let | |
618 | - | if (( | |
620 | + | let dJ = ((dH % 100) / 10) | |
621 | + | if ((dy != dJ)) | |
619 | 622 | then throw("Slot incompatible") | |
620 | 623 | else { | |
621 | - | let | |
622 | - | if (if (( | |
623 | - | then ( | |
624 | + | let dK = (dH % 10) | |
625 | + | if (if ((dz != 0)) | |
626 | + | then (dK > 1) | |
624 | 627 | else false) | |
625 | 628 | then throw("Big items should occupy slot 0") | |
626 | - | else ( | |
629 | + | else (dK > 1) | |
627 | 630 | } | |
628 | 631 | } | |
629 | 632 | } | |
630 | 633 | } | |
631 | 634 | else false | |
632 | - | $Tuple2((( | |
633 | - | then | |
634 | - | else -( | |
635 | + | $Tuple2(((dD + toBytes((dk + (if (dw) | |
636 | + | then dC | |
637 | + | else -(dC))))) + dE), dF) | |
635 | 638 | } | |
636 | 639 | } | |
637 | 640 | } | |
638 | 641 | } | |
639 | 642 | ||
640 | 643 | ||
641 | - | func | |
644 | + | func dL (dM,dN,dw,dx,dy,dO) = if ((dM != "")) | |
642 | 645 | then { | |
643 | - | let | |
644 | - | if ((size( | |
646 | + | let dP = split(dM, ",") | |
647 | + | if ((size(dP) > bU)) | |
645 | 648 | then throw("Wrong slots format") | |
646 | 649 | else { | |
647 | - | let | |
648 | - | let | |
649 | - | then | |
650 | + | let dQ = dP[0] | |
651 | + | let dR = if ((size(dP) > 1)) | |
652 | + | then dP[1] | |
650 | 653 | else "" | |
651 | - | if (if (( | |
652 | - | then ( | |
654 | + | if (if ((dQ == "")) | |
655 | + | then (dR == "") | |
653 | 656 | else false) | |
654 | - | then | |
657 | + | then dN | |
655 | 658 | else { | |
656 | - | let | |
657 | - | then | |
658 | - | else $Tuple2( | |
659 | - | if (( | |
660 | - | then if ( | |
659 | + | let dS = if ((dQ != "")) | |
660 | + | then du(dQ, dN, dw, dx, dy, 0, dO) | |
661 | + | else $Tuple2(dN, false) | |
662 | + | if ((dR != "")) | |
663 | + | then if (dS._2) | |
661 | 664 | then throw("Big item already occupies slot") | |
662 | - | else | |
663 | - | else | |
665 | + | else du(dR, dS._1, dw, dx, dy, 1, dO)._1 | |
666 | + | else dS._1 | |
664 | 667 | } | |
665 | 668 | } | |
666 | 669 | } | |
667 | - | else | |
670 | + | else dN | |
668 | 671 | ||
669 | 672 | ||
670 | - | func | |
671 | - | func | |
672 | - | let | |
673 | - | let | |
674 | - | if ((size( | |
673 | + | func dT (dU,dV,dw,dO) = { | |
674 | + | func dx (cS,dW) = { | |
675 | + | let dj = cS._1 | |
676 | + | let dy = split(dW, ";") | |
677 | + | if ((size(dy) != bT)) | |
675 | 678 | then throw("Wrong segment format") | |
676 | 679 | else { | |
677 | - | let | |
678 | - | let | |
679 | - | if (if (( | |
680 | - | then ( | |
680 | + | let dX = dy[0] | |
681 | + | let dY = dy[1] | |
682 | + | if (if ((dX == "")) | |
683 | + | then (dY == "") | |
681 | 684 | else false) | |
682 | - | then $Tuple2(( | |
685 | + | then $Tuple2((dj + 1), cS._2) | |
683 | 686 | else { | |
684 | - | let | |
685 | - | $Tuple2(( | |
687 | + | let dZ = dL(dX, cS._2, dw, dj, 0, dO) | |
688 | + | $Tuple2((dj + 1), dL(dY, dZ, dw, dj, 1, dO)) | |
686 | 689 | } | |
687 | 690 | } | |
688 | 691 | } | |
689 | 692 | ||
690 | - | ( let | |
691 | - | let | |
692 | - | let | |
693 | - | func | |
694 | - | then | |
695 | - | else | |
693 | + | ( let cU = dU | |
694 | + | let cV = size(cU) | |
695 | + | let cW = $Tuple2(0, dV) | |
696 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
697 | + | then cY | |
698 | + | else dx(cY, cU[cZ]) | |
696 | 699 | ||
697 | - | func | |
698 | - | then | |
700 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
701 | + | then cY | |
699 | 702 | else throw("List size exceeds 6") | |
700 | 703 | ||
701 | - | | |
704 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6))._2 | |
702 | 705 | } | |
703 | 706 | ||
704 | 707 | ||
705 | - | func | |
708 | + | func ea (eb,ec,ed,ee) = if ((size(eb) != aE)) | |
706 | 709 | then throw("Wrong proportions data") | |
707 | 710 | else { | |
708 | - | func | |
709 | - | let | |
710 | - | if ((0 > | |
711 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
712 | - | else ( | |
711 | + | func ef (cS,eg) = { | |
712 | + | let eh = (parseIntValue(eb[eg]) + ((ee * ec[eg]) * ed)) | |
713 | + | if ((0 > eh)) | |
714 | + | then throw(((((((("Panic! Pieces of type=" + toString(eg)) + ", sign=") + toString(ee)) + ", terrainCounts[i]=") + toString(ec[eg])) + ", landSizeIndex=") + toString(ed))) | |
715 | + | else (cS :+ toString(eh)) | |
713 | 716 | } | |
714 | 717 | ||
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | func | |
719 | - | then | |
720 | - | else | |
718 | + | let cU = t | |
719 | + | let cV = size(cU) | |
720 | + | let cW = nil | |
721 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
722 | + | then cY | |
723 | + | else ef(cY, cU[cZ]) | |
721 | 724 | ||
722 | - | func | |
723 | - | then | |
725 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
726 | + | then cY | |
724 | 727 | else throw("List size exceeds 6") | |
725 | 728 | ||
726 | - | | |
729 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
727 | 730 | } | |
728 | 731 | ||
729 | 732 | ||
730 | - | func | |
731 | - | let | |
732 | - | makeString( | |
733 | + | func ei (ec,ed,ee) = { | |
734 | + | let eb = split(valueOrElse(getString(X()), "0_0_0_0_0_0"), "_") | |
735 | + | makeString(ea(eb, ec, ed, ee), "_") | |
733 | 736 | } | |
734 | 737 | ||
735 | 738 | ||
736 | - | func | |
739 | + | func ej (ek) = [(size(split(ek, "A")) - 1), (size(split(ek, "B")) - 1), (size(split(ek, "C")) - 1), (size(split(ek, "D")) - 1), (size(split(ek, "E")) - 1), (size(split(ek, "F")) - 1)] | |
737 | 740 | ||
738 | 741 | ||
739 | - | func | |
740 | - | func | |
741 | - | let | |
742 | - | ( | |
742 | + | func el (em,ec,en,ed,eo) = { | |
743 | + | func ep (cS,eg) = { | |
744 | + | let eq = ((fraction(en, eo, cv) * ec[eg]) * ed) | |
745 | + | (cS :+ toString((parseIntValue(em[eg]) + eq))) | |
743 | 746 | } | |
744 | 747 | ||
745 | - | let | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | func | |
750 | - | then | |
751 | - | else | |
748 | + | let dd = { | |
749 | + | let cU = t | |
750 | + | let cV = size(cU) | |
751 | + | let cW = nil | |
752 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
753 | + | then cY | |
754 | + | else ep(cY, cU[cZ]) | |
752 | 755 | ||
753 | - | func | |
754 | - | then | |
756 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
757 | + | then cY | |
755 | 758 | else throw("List size exceeds 6") | |
756 | 759 | ||
757 | - | | |
760 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
758 | 761 | } | |
759 | - | makeString( | |
762 | + | makeString(dd, "_") | |
760 | 763 | } | |
761 | 764 | ||
762 | 765 | ||
763 | - | func | |
764 | - | func | |
765 | - | let | |
766 | - | let | |
767 | - | $Tuple2(( | |
766 | + | func er (em,ec,en,ed,eo) = { | |
767 | + | func ep (cS,eg) = { | |
768 | + | let eq = ((fraction(en, eo, cv) * ec[eg]) * ed) | |
769 | + | let es = (parseIntValue(em[eg]) + eq) | |
770 | + | $Tuple2((cS._1 :+ es), (cS._2 + es)) | |
768 | 771 | } | |
769 | 772 | ||
770 | - | let | |
771 | - | let | |
772 | - | let | |
773 | - | func | |
774 | - | then | |
775 | - | else | |
773 | + | let cU = t | |
774 | + | let cV = size(cU) | |
775 | + | let cW = $Tuple2(nil, 0) | |
776 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
777 | + | then cY | |
778 | + | else ep(cY, cU[cZ]) | |
776 | 779 | ||
777 | - | func | |
778 | - | then | |
780 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
781 | + | then cY | |
779 | 782 | else throw("List size exceeds 6") | |
780 | 783 | ||
781 | - | | |
784 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
782 | 785 | } | |
783 | 786 | ||
784 | 787 | ||
785 | - | func | |
786 | - | func | |
787 | - | let | |
788 | - | $Tuple2(( | |
788 | + | func et (ec,en,ed,eo) = { | |
789 | + | func ep (cS,eu) = { | |
790 | + | let eq = ((fraction(en, eo, cv) * eu) * ed) | |
791 | + | $Tuple2((cS._1 :+ eq), (cS._2 + eq)) | |
789 | 792 | } | |
790 | 793 | ||
791 | - | let | |
792 | - | let | |
793 | - | let | |
794 | - | func | |
795 | - | then | |
796 | - | else | |
794 | + | let cU = ec | |
795 | + | let cV = size(cU) | |
796 | + | let cW = $Tuple2(nil, 0) | |
797 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
798 | + | then cY | |
799 | + | else ep(cY, cU[cZ]) | |
797 | 800 | ||
798 | - | func | |
799 | - | then | |
801 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
802 | + | then cY | |
800 | 803 | else throw("List size exceeds 6") | |
801 | 804 | ||
802 | - | | |
805 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
803 | 806 | } | |
804 | 807 | ||
805 | 808 | ||
806 | - | func | |
807 | - | let | |
808 | - | let | |
809 | - | if (( | |
810 | - | then $Tuple2(makeString( | |
811 | - | else if (( | |
809 | + | func ev (ew,ex,ey,ez) = { | |
810 | + | let eA = ey._1 | |
811 | + | let eB = ey._2 | |
812 | + | if ((eB == 0)) | |
813 | + | then $Tuple2(makeString(ew, "_"), makeString(ex, "_")) | |
814 | + | else if ((ez >= eB)) | |
812 | 815 | then { | |
813 | - | func | |
816 | + | func eC (cS,eg) = (cS :+ toString((parseIntValue(ew[eg]) + eA[eg]))) | |
814 | 817 | ||
815 | - | let | |
816 | - | let | |
817 | - | let | |
818 | - | let | |
819 | - | func | |
820 | - | then | |
821 | - | else | |
818 | + | let dd = { | |
819 | + | let cU = t | |
820 | + | let cV = size(cU) | |
821 | + | let cW = nil | |
822 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
823 | + | then cY | |
824 | + | else eC(cY, cU[cZ]) | |
822 | 825 | ||
823 | - | func | |
824 | - | then | |
826 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
827 | + | then cY | |
825 | 828 | else throw("List size exceeds 6") | |
826 | 829 | ||
827 | - | | |
830 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
828 | 831 | } | |
829 | - | $Tuple2(makeString( | |
832 | + | $Tuple2(makeString(dd, "_"), makeString(ex, "_")) | |
830 | 833 | } | |
831 | 834 | else { | |
832 | - | func | |
833 | - | let | |
834 | - | $Tuple2(( | |
835 | + | func eD (cS,eg) = { | |
836 | + | let eE = fraction(eA[eg], ez, eB) | |
837 | + | $Tuple2((cS._1 :+ toString((parseIntValue(ew[eg]) + eE))), (cS._2 :+ toString(((parseIntValue(ex[eg]) + eA[eg]) - eE)))) | |
835 | 838 | } | |
836 | 839 | ||
837 | - | let | |
838 | - | let | |
839 | - | let | |
840 | - | let | |
841 | - | func | |
842 | - | then | |
843 | - | else | |
840 | + | let dd = { | |
841 | + | let cU = t | |
842 | + | let cV = size(cU) | |
843 | + | let cW = $Tuple2(nil, nil) | |
844 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
845 | + | then cY | |
846 | + | else eD(cY, cU[cZ]) | |
844 | 847 | ||
845 | - | func | |
846 | - | then | |
848 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
849 | + | then cY | |
847 | 850 | else throw("List size exceeds 6") | |
848 | 851 | ||
849 | - | | |
852 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
850 | 853 | } | |
851 | - | $Tuple2(makeString( | |
854 | + | $Tuple2(makeString(dd._1, "_"), makeString(dd._2, "_")) | |
852 | 855 | } | |
853 | 856 | } | |
854 | 857 | ||
855 | 858 | ||
856 | - | func | |
857 | - | let | |
858 | - | [toString(valueOrElse(parseInt( | |
859 | - | then | |
860 | - | else "0_0_0_0_0_0", if ((size(split( | |
861 | - | then | |
862 | - | else "0_0_0_0_0_0", | |
859 | + | func eF (eG) = { | |
860 | + | let eH = split(valueOrElse(getString(eG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
861 | + | [toString(valueOrElse(parseInt(eH[bd]), 0)), if ((size(split(eH[be], "_")) == aE)) | |
862 | + | then eH[be] | |
863 | + | else "0_0_0_0_0_0", if ((size(split(eH[bf], "_")) == aE)) | |
864 | + | then eH[bf] | |
865 | + | else "0_0_0_0_0_0", eH[bg]] | |
863 | 866 | } | |
864 | 867 | ||
865 | 868 | ||
866 | - | func | |
867 | - | let | |
868 | - | (( | |
869 | + | func eI (eJ) = { | |
870 | + | let dA = split(eJ, "_") | |
871 | + | ((aH * (parseIntValue(dA[1]) + 1)) * parseIntValue(dA[0])) | |
869 | 872 | } | |
870 | 873 | ||
871 | 874 | ||
872 | - | func | |
873 | - | let | |
874 | - | func | |
875 | + | func eK (eL) = { | |
876 | + | let eM = eL[aX] | |
877 | + | func eN (cS,eO) = (cS + parseIntValue(eO)) | |
875 | 878 | ||
876 | - | func | |
877 | - | let I = | |
878 | - | let | |
879 | - | $Tuple2((I + 1), ( | |
879 | + | func eP (cS,eO) = { | |
880 | + | let I = cS._1 | |
881 | + | let eQ = (((parseIntValue(eO) + aT) - 1) / aT) | |
882 | + | $Tuple2((I + 1), (cS._2 + (eQ * n))) | |
880 | 883 | } | |
881 | 884 | ||
882 | - | let | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
886 | - | func | |
887 | - | then | |
888 | - | else | |
885 | + | let eR = { | |
886 | + | let cU = split(eL[aV], "_") | |
887 | + | let cV = size(cU) | |
888 | + | let cW = 0 | |
889 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
890 | + | then cY | |
891 | + | else eN(cY, cU[cZ]) | |
889 | 892 | ||
890 | - | func | |
891 | - | then | |
893 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
894 | + | then cY | |
892 | 895 | else throw("List size exceeds 6") | |
893 | 896 | ||
894 | - | | |
897 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
895 | 898 | } | |
896 | - | let | |
897 | - | let | |
898 | - | let | |
899 | - | let | |
900 | - | func | |
901 | - | then | |
902 | - | else | |
899 | + | let eS = { | |
900 | + | let cU = split(eL[aW], "_") | |
901 | + | let cV = size(cU) | |
902 | + | let cW = 0 | |
903 | + | func eT (cY,cZ) = if ((cZ >= cV)) | |
904 | + | then cY | |
905 | + | else eN(cY, cU[cZ]) | |
903 | 906 | ||
904 | - | func | |
905 | - | then | |
907 | + | func eU (cY,cZ) = if ((cZ >= cV)) | |
908 | + | then cY | |
906 | 909 | else throw("List size exceeds 6") | |
907 | 910 | ||
908 | - | eT( | |
911 | + | eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6) | |
909 | 912 | } | |
910 | - | let | |
913 | + | let eV = if ((eM == "")) | |
911 | 914 | then 0 | |
912 | - | else ( let | |
913 | - | let | |
914 | - | let | |
915 | - | func | |
916 | - | then | |
917 | - | else | |
915 | + | else ( let cU = split_4C(eM, "_") | |
916 | + | let cV = size(cU) | |
917 | + | let cW = $Tuple2(0, 0) | |
918 | + | func eW (cY,cZ) = if ((cZ >= cV)) | |
919 | + | then cY | |
920 | + | else eP(cY, cU[cZ]) | |
918 | 921 | ||
919 | - | func | |
920 | - | then | |
922 | + | func eX (cY,cZ) = if ((cZ >= cV)) | |
923 | + | then cY | |
921 | 924 | else throw("List size exceeds 50") | |
922 | 925 | ||
923 | - | eW( | |
924 | - | (( | |
926 | + | eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2 | |
927 | + | ((eR + eS) + eV) | |
925 | 928 | } | |
926 | 929 | ||
927 | 930 | ||
928 | - | func | |
929 | - | let | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | let | |
934 | - | let | |
935 | - | then makeString(["0", toString( | |
931 | + | func eY (eZ,fa,fb) = { | |
932 | + | let eJ = ((toString(fa) + "_") + toString(fb)) | |
933 | + | let fc = eI(eJ) | |
934 | + | let fd = valueOrElse(getString(eZ), (eJ + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
935 | + | let fe = split_4C(fd, ":") | |
936 | + | let ff = eK(fe) | |
937 | + | let fg = if ((5 > size(fe))) | |
938 | + | then makeString(["0", toString(ff), toString((fc - ff)), toString(fc)], "_") | |
936 | 939 | else { | |
937 | - | let | |
938 | - | let | |
939 | - | let | |
940 | - | then parseIntValue( | |
941 | - | else | |
942 | - | makeString([toString( | |
940 | + | let fh = split(fe[aY], "_") | |
941 | + | let fi = parseIntValue(fh[aZ]) | |
942 | + | let fj = if ((size(fh) > 1)) | |
943 | + | then parseIntValue(fh[ba]) | |
944 | + | else ff | |
945 | + | makeString([toString(fi), toString(fj), toString(((fc - fi) - fj)), toString(fc)], "_") | |
943 | 946 | } | |
944 | - | [ | |
945 | - | then | |
946 | - | else "0_0_0_0_0_0", if ((size(split( | |
947 | - | then | |
948 | - | else "0_0_0_0_0_0", | |
947 | + | [fe[aU], if ((size(split(fe[aV], "_")) == aE)) | |
948 | + | then fe[aV] | |
949 | + | else "0_0_0_0_0_0", if ((size(split(fe[aW], "_")) == aE)) | |
950 | + | then fe[aW] | |
951 | + | else "0_0_0_0_0_0", fe[aX], fg] | |
949 | 952 | } | |
950 | 953 | ||
951 | 954 | ||
952 | - | func | |
953 | - | let | |
954 | - | let | |
955 | - | let | |
956 | - | let | |
957 | - | (( | |
955 | + | func fk (bs,fl) = { | |
956 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
957 | + | let fm = valueOrElse(getInteger(bn(aD, bs)), 0) | |
958 | + | let fn = (fb / 6) | |
959 | + | let fo = (fb / 7) | |
960 | + | ((aG + fraction(aG, ((fb + fn) + (2 * fo)), 5)) + fraction(aG, fm, (fl * 5))) | |
958 | 961 | } | |
959 | 962 | ||
960 | 963 | ||
961 | - | func | |
962 | - | let | |
963 | - | then $Tuple2( | |
964 | + | func fp (am,fq,fr) = { | |
965 | + | let fs = if ((fq == cJ)) | |
966 | + | then $Tuple2(fr, valueOrElse(getString(bC(am)), "")) | |
964 | 967 | else { | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | if (( | |
969 | - | then throw((("Duck location type is " + | |
970 | - | else $Tuple2( | |
968 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
969 | + | let ft = valueOrElse(getString(bE(by)), aI) | |
970 | + | let fu = split(value(ft), "_") | |
971 | + | if ((fu[bh] != "L")) | |
972 | + | then throw((("Duck location type is " + fu[bh]) + ", but should be L")) | |
973 | + | else $Tuple2(fu[bi], by) | |
971 | 974 | } | |
972 | - | let | |
973 | - | let | |
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | if (( | |
979 | - | then throw(( | |
975 | + | let bs = fs._1 | |
976 | + | let fv = fs._2 | |
977 | + | let fw = value(assetInfo(fromBase58String(bs))) | |
978 | + | let fx = bm(bs) | |
979 | + | let fy = valueOrErrorMessage(getInteger(fx), (("Land " + fw.name) + " is not staked")) | |
980 | + | let fz = valueOrErrorMessage(getString(bj(bs)), (("NFT " + fw.name) + " is orphaned")) | |
981 | + | if ((fz != am)) | |
982 | + | then throw((aA + " is not yours")) | |
980 | 983 | else { | |
981 | - | let | |
982 | - | $Tuple4( | |
984 | + | let fA = split(fw.description, "_") | |
985 | + | $Tuple4(fv, bs, fA, fy) | |
983 | 986 | } | |
984 | 987 | } | |
985 | 988 | ||
986 | 989 | ||
987 | - | func | |
990 | + | func fB (am,fC,fq,fr) = if ((0 > fC)) | |
988 | 991 | then throw("Negative amount") | |
989 | 992 | else { | |
990 | - | let | |
991 | - | let aj = | |
992 | - | let | |
993 | - | let | |
994 | - | if ((0 > | |
995 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
993 | + | let dH = fp(am, fq, fr) | |
994 | + | let aj = dH._3[Q] | |
995 | + | let ec = ej(dH._3[R]) | |
996 | + | let en = (az() - dH._4) | |
997 | + | if ((0 > en)) | |
998 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dH._4)) + ", final = ") + toString(az()))) | |
996 | 999 | else { | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | if (( | |
1001 | - | then throw(((("Not enough resources, available = " + toString( | |
1000 | + | let fl = ai(aj) | |
1001 | + | let fD = fk(dH._2, fl) | |
1002 | + | let fE = fraction(en, (fD * fl), cv) | |
1003 | + | if ((fC > fE)) | |
1004 | + | then throw(((("Not enough resources, available = " + toString(fE)) + ", requested = ") + toString(fC))) | |
1002 | 1005 | else { | |
1003 | - | let | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | let | |
1012 | - | if (if (( | |
1013 | - | then ( | |
1006 | + | let fF = fraction((fE - fC), cv, (fD * fl)) | |
1007 | + | let fG = (az() - fF) | |
1008 | + | let fa = (fl / o) | |
1009 | + | let ey = et(ec, (en - fF), fa, fD) | |
1010 | + | let eZ = br(dH._2) | |
1011 | + | let fb = valueOrElse(getInteger(bt(dH._2)), 0) | |
1012 | + | let eL = eY(eZ, fa, fb) | |
1013 | + | let fh = split(eL[aY], "_") | |
1014 | + | let ez = parseIntValue(fh[bb]) | |
1015 | + | if (if ((fq == cJ)) | |
1016 | + | then (fC > ez) | |
1014 | 1017 | else false) | |
1015 | - | then throw((("Only " + toString( | |
1018 | + | then throw((("Only " + toString(ez)) + " space left in warehouse")) | |
1016 | 1019 | else { | |
1017 | - | let | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | then $Tuple4( | |
1023 | - | else if (( | |
1024 | - | then $Tuple4( | |
1020 | + | let eG = bD(dH._1) | |
1021 | + | let fH = eF(eG) | |
1022 | + | let ex = split(fH[be], "_") | |
1023 | + | let ew = split(eL[aV], "_") | |
1024 | + | let fI = if ((fq == cJ)) | |
1025 | + | then $Tuple4(el(ew, ec, (en - fF), fa, fD), fH[be], (parseIntValue(fh[ba]) + ey._2), (parseIntValue(fh[bb]) - ey._2)) | |
1026 | + | else if ((fq == cK)) | |
1027 | + | then $Tuple4(eL[aV], el(ex, ec, (en - fF), fa, fD), parseIntValue(fh[ba]), parseIntValue(fh[bb])) | |
1025 | 1028 | else { | |
1026 | - | let | |
1027 | - | let | |
1028 | - | $Tuple4( | |
1029 | + | let fJ = ev(ew, ex, ey, ez) | |
1030 | + | let fK = min([parseIntValue(fh[bb]), ey._2]) | |
1031 | + | $Tuple4(fJ._1, fJ._2, (parseIntValue(fh[ba]) + fK), (parseIntValue(fh[bb]) - fK)) | |
1029 | 1032 | } | |
1030 | - | let | |
1031 | - | let | |
1032 | - | let | |
1033 | - | let | |
1034 | - | $Tuple5([IntegerEntry( | |
1033 | + | let fL = fI._1 | |
1034 | + | let fM = fI._2 | |
1035 | + | let fN = fI._3 | |
1036 | + | let fO = fI._4 | |
1037 | + | $Tuple5([IntegerEntry(bm(dH._2), fG), IntegerEntry(bp(aA, dH._2, am), fG)], eG, [fH[bd], fM, fH[bf], fH[bg]], eZ, [eL[aU], fL, eL[aW], eL[aX], makeString([fh[aZ], toString(fN), toString(fO), fh[bc]], "_")]) | |
1035 | 1038 | } | |
1036 | 1039 | } | |
1037 | 1040 | } | |
1038 | 1041 | } | |
1039 | 1042 | ||
1040 | 1043 | ||
1041 | - | func | |
1042 | - | let | |
1043 | - | let | |
1044 | - | let | |
1045 | - | | |
1044 | + | func fP (am,bs,fl,fq) = { | |
1045 | + | let fx = bm(bs) | |
1046 | + | let fy = value(getInteger(fx)) | |
1047 | + | let fE = (fraction((az() - fy), fk(bs, fl), cv) * fl) | |
1048 | + | fB(am, fE, fq, bs) | |
1046 | 1049 | } | |
1047 | 1050 | ||
1048 | 1051 | ||
1049 | - | func | |
1050 | - | let | |
1051 | - | let | |
1052 | - | let | |
1053 | - | $Tuple2([IntegerEntry( | |
1052 | + | func fQ (fR,fS,fT,fU) = { | |
1053 | + | let co = valueOrElse(getInteger(fS), 0) | |
1054 | + | let ct = (co + fU) | |
1055 | + | let fV = cr(valueOrElse(getInteger(fR), 0), ct) | |
1056 | + | $Tuple2([IntegerEntry(fR, fV[0]), IntegerEntry(fS, ct), IntegerEntry(fT, (valueOrElse(getInteger(fT), 0) + fV[1]))], ct) | |
1054 | 1057 | } | |
1055 | 1058 | ||
1056 | 1059 | ||
1057 | - | func | |
1058 | - | let | |
1059 | - | let am = valueOrErrorMessage(getString( | |
1060 | + | func fW (by,fU) = { | |
1061 | + | let fw = value(assetInfo(fromBase58String(by))) | |
1062 | + | let am = valueOrErrorMessage(getString(bB(by)), (("NFT " + fw.name) + " is orphaned")) | |
1060 | 1063 | if (if (if (b) | |
1061 | - | then ( | |
1064 | + | then (fw.issuer == this) | |
1062 | 1065 | else false) | |
1063 | - | then contains( | |
1066 | + | then contains(fw.name, aC) | |
1064 | 1067 | else false) | |
1065 | - | then | |
1066 | - | else | |
1068 | + | then fQ(cd(am), cc(am), ce(am), fU) | |
1069 | + | else fQ(bZ(by), bY(by), ca(by), fU) | |
1067 | 1070 | } | |
1068 | 1071 | ||
1069 | 1072 | ||
1070 | - | func | |
1073 | + | func fX (am,fU) = fQ(cd(am), cc(am), ce(am), fU) | |
1071 | 1074 | ||
1072 | 1075 | ||
1073 | - | func | |
1074 | - | let | |
1075 | - | let | |
1076 | - | let | |
1077 | - | if (!(isDefined( | |
1076 | + | func fY (am) = { | |
1077 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
1078 | + | let fZ = bw(am) | |
1079 | + | let ga = getString(fZ) | |
1080 | + | if (!(isDefined(ga))) | |
1078 | 1081 | then throw("You are not eligible for ONBOARD artifact") | |
1079 | 1082 | else { | |
1080 | - | let | |
1081 | - | let | |
1082 | - | if (isDefined( | |
1083 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1083 | + | let gb = bz(am) | |
1084 | + | let gc = getString(gb) | |
1085 | + | if (isDefined(gc)) | |
1086 | + | then throw(("You already used your ONBOARD artifact on duck " + value(gc))) | |
1084 | 1087 | else { | |
1085 | - | let | |
1086 | - | let | |
1087 | - | if (isDefined( | |
1088 | - | then throw(((("The duck " + | |
1089 | - | else ([StringEntry( | |
1088 | + | let gd = bx(by) | |
1089 | + | let ge = getString(gd) | |
1090 | + | if (isDefined(ge)) | |
1091 | + | then throw(((("The duck " + by) + " already got points from ONBOARD artifact from user ") + value(ge))) | |
1092 | + | else ([StringEntry(gb, by), StringEntry(gd, am)] ++ fW(by, cm)._1) | |
1090 | 1093 | } | |
1091 | 1094 | } | |
1092 | 1095 | } | |
1093 | 1096 | ||
1094 | 1097 | ||
1095 | - | func | |
1096 | - | let | |
1097 | - | let | |
1098 | - | let | |
1099 | - | let | |
1100 | - | if ((valueOrElse(getInteger( | |
1098 | + | func gf (am,fr) = { | |
1099 | + | let dH = fp(am, cL, fr) | |
1100 | + | let bs = dH._2 | |
1101 | + | let fl = ai(dH._3[Q]) | |
1102 | + | let gg = bn(aD, bs) | |
1103 | + | if ((valueOrElse(getInteger(gg), 0) > 0)) | |
1101 | 1104 | then throw("Presale artifact is already activated") | |
1102 | - | else if ((parseIntValue( | |
1103 | - | then throw(((( | |
1105 | + | else if ((parseIntValue(dH._3[P]) > cA)) | |
1106 | + | then throw((((aA + " ") + bs) + " is not eligible for presale artifact")) | |
1104 | 1107 | else { | |
1105 | - | let | |
1106 | - | ((( | |
1108 | + | let gh = fP(am, bs, fl, cL) | |
1109 | + | (((gh._1 :+ IntegerEntry(gg, fl)) :+ StringEntry(gh._2, makeString(gh._3, ":"))) :+ StringEntry(gh._4, makeString(gh._5, ":"))) | |
1107 | 1110 | } | |
1108 | 1111 | } | |
1109 | 1112 | ||
1110 | 1113 | ||
1111 | - | func | |
1114 | + | func gi (eg) = if (if ((eg.originCaller != J)) | |
1112 | 1115 | then valueOrElse(getBoolean(ak()), false) | |
1113 | 1116 | else false) | |
1114 | 1117 | then throw("Contracts are under maintenance") | |
1115 | - | else [StringEntry( | |
1118 | + | else [StringEntry(an(toString(eg.originCaller)), toBase58String(eg.transactionId))] | |
1116 | 1119 | ||
1117 | 1120 | ||
1118 | - | func | |
1119 | - | let | |
1120 | - | let | |
1121 | - | let aj = | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let | |
1125 | - | let | |
1126 | - | let | |
1127 | - | let | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | if ((0 > | |
1132 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1121 | + | func gj (am,bs) = { | |
1122 | + | let eZ = br(bs) | |
1123 | + | let gk = split(value(assetInfo(fromBase58String(bs))).description, "_") | |
1124 | + | let aj = gk[Q] | |
1125 | + | let fl = ai(aj) | |
1126 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1127 | + | let fa = (fl / o) | |
1128 | + | let ec = ej(gk[R]) | |
1129 | + | let eL = eY(eZ, fa, fb) | |
1130 | + | let ew = split(eL[aV], "_") | |
1131 | + | let fx = bm(bs) | |
1132 | + | let fy = getIntegerValue(fx) | |
1133 | + | let en = (az() - fy) | |
1134 | + | if ((0 > en)) | |
1135 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fy)) + ", final = ") + toString(az()))) | |
1133 | 1136 | else { | |
1134 | - | let | |
1135 | - | let | |
1136 | - | let | |
1137 | - | let | |
1138 | - | let | |
1139 | - | func | |
1137 | + | let fD = fk(bs, fl) | |
1138 | + | let gl = er(ew, ec, en, fa, fD) | |
1139 | + | let fm = valueOrElse(getInteger(bn(aD, bs)), 0) | |
1140 | + | let gm = ((fl * n) + ((((fl * fb) + fm) * n) / 5)) | |
1141 | + | let gn = (fraction(gl._2, aJ, n) * aL) | |
1142 | + | func go (cS,eO) = (cS + parseIntValue(eO)) | |
1140 | 1143 | ||
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | func | |
1146 | - | then | |
1147 | - | else | |
1144 | + | let gp = { | |
1145 | + | let cU = split(eL[aW], "_") | |
1146 | + | let cV = size(cU) | |
1147 | + | let cW = 0 | |
1148 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
1149 | + | then cY | |
1150 | + | else go(cY, cU[cZ]) | |
1148 | 1151 | ||
1149 | - | func | |
1150 | - | then | |
1152 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
1153 | + | then cY | |
1151 | 1154 | else throw("List size exceeds 6") | |
1152 | 1155 | ||
1153 | - | | |
1156 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
1154 | 1157 | } | |
1155 | - | let | |
1156 | - | let | |
1158 | + | let gq = (fraction(gp, (2 * aJ), n) * aL) | |
1159 | + | let gr = if ((eL[aX] == "")) | |
1157 | 1160 | then nil | |
1158 | - | else split_4C( | |
1159 | - | func | |
1160 | - | let | |
1161 | - | let | |
1162 | - | $Tuple2(( | |
1161 | + | else split_4C(eL[aX], "_") | |
1162 | + | func eP (cS,eO) = { | |
1163 | + | let dj = cS._2 | |
1164 | + | let gs = parseIntValue(split(aP[dj], "_")[aQ]) | |
1165 | + | $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1)) | |
1163 | 1166 | } | |
1164 | 1167 | ||
1165 | - | let | |
1166 | - | let | |
1167 | - | let | |
1168 | - | let | |
1169 | - | func | |
1170 | - | then | |
1171 | - | else | |
1168 | + | let gt = { | |
1169 | + | let cU = gr | |
1170 | + | let cV = size(cU) | |
1171 | + | let cW = $Tuple2(0, 0) | |
1172 | + | func eT (cY,cZ) = if ((cZ >= cV)) | |
1173 | + | then cY | |
1174 | + | else eP(cY, cU[cZ]) | |
1172 | 1175 | ||
1173 | - | func | |
1174 | - | then | |
1176 | + | func eU (cY,cZ) = if ((cZ >= cV)) | |
1177 | + | then cY | |
1175 | 1178 | else throw("List size exceeds 24") | |
1176 | 1179 | ||
1177 | - | eT( | |
1180 | + | eU(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
1178 | 1181 | } | |
1179 | - | let | |
1180 | - | $Tuple4( | |
1182 | + | let gu = (fraction(gt._1, (2 * aJ), n) * aL) | |
1183 | + | $Tuple4(gm, gn, gq, gu) | |
1181 | 1184 | } | |
1182 | 1185 | } | |
1183 | 1186 | ||
1184 | 1187 | ||
1185 | - | func | |
1186 | - | let | |
1187 | - | let | |
1188 | - | let | |
1189 | - | let | |
1190 | - | let | |
1191 | - | let | |
1192 | - | func | |
1188 | + | func gv (am,by) = { | |
1189 | + | let gw = cb(by) | |
1190 | + | let gx = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1191 | + | let eG = bD(by) | |
1192 | + | let fH = eF(eG) | |
1193 | + | let gy = dT(gx, de(fH[bg]), true, nil) | |
1194 | + | let gz = dl(gy) | |
1195 | + | func eN (cS,eO) = (cS + parseIntValue(eO)) | |
1193 | 1196 | ||
1194 | - | let | |
1195 | - | let | |
1196 | - | let | |
1197 | - | let | |
1198 | - | func | |
1199 | - | then | |
1200 | - | else | |
1197 | + | let fM = { | |
1198 | + | let cU = split(fH[be], "_") | |
1199 | + | let cV = size(cU) | |
1200 | + | let cW = 0 | |
1201 | + | func cX (cY,cZ) = if ((cZ >= cV)) | |
1202 | + | then cY | |
1203 | + | else eN(cY, cU[cZ]) | |
1201 | 1204 | ||
1202 | - | func | |
1203 | - | then | |
1205 | + | func da (cY,cZ) = if ((cZ >= cV)) | |
1206 | + | then cY | |
1204 | 1207 | else throw("List size exceeds 6") | |
1205 | 1208 | ||
1206 | - | | |
1209 | + | da(cX(cX(cX(cX(cX(cX(cW, 0), 1), 2), 3), 4), 5), 6) | |
1207 | 1210 | } | |
1208 | - | let | |
1209 | - | let | |
1210 | - | let | |
1211 | - | let | |
1212 | - | let | |
1213 | - | func | |
1214 | - | then | |
1215 | - | else | |
1211 | + | let gn = (fraction(fM, aJ, n) * aL) | |
1212 | + | let gA = { | |
1213 | + | let cU = split(fH[bf], "_") | |
1214 | + | let cV = size(cU) | |
1215 | + | let cW = 0 | |
1216 | + | func eT (cY,cZ) = if ((cZ >= cV)) | |
1217 | + | then cY | |
1218 | + | else eN(cY, cU[cZ]) | |
1216 | 1219 | ||
1217 | - | func | |
1218 | - | then | |
1220 | + | func eU (cY,cZ) = if ((cZ >= cV)) | |
1221 | + | then cY | |
1219 | 1222 | else throw("List size exceeds 6") | |
1220 | 1223 | ||
1221 | - | eT( | |
1224 | + | eU(eT(eT(eT(eT(eT(eT(cW, 0), 1), 2), 3), 4), 5), 6) | |
1222 | 1225 | } | |
1223 | - | let | |
1224 | - | let | |
1226 | + | let gq = (fraction(gA, (2 * aJ), n) * aL) | |
1227 | + | let gr = if ((gz == "")) | |
1225 | 1228 | then nil | |
1226 | - | else split_4C( | |
1227 | - | func | |
1228 | - | let | |
1229 | - | let | |
1230 | - | $Tuple2(( | |
1229 | + | else split_4C(gz, "_") | |
1230 | + | func eP (cS,eO) = { | |
1231 | + | let dj = cS._2 | |
1232 | + | let gs = parseIntValue(split(aP[dj], "_")[aQ]) | |
1233 | + | $Tuple2((cS._1 + ((parseIntValue(eO) * gs) * m)), (dj + 1)) | |
1231 | 1234 | } | |
1232 | 1235 | ||
1233 | - | let | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let | |
1237 | - | func | |
1238 | - | then | |
1239 | - | else | |
1236 | + | let gB = { | |
1237 | + | let cU = gr | |
1238 | + | let cV = size(cU) | |
1239 | + | let cW = $Tuple2(0, 0) | |
1240 | + | func eW (cY,cZ) = if ((cZ >= cV)) | |
1241 | + | then cY | |
1242 | + | else eP(cY, cU[cZ]) | |
1240 | 1243 | ||
1241 | - | func | |
1242 | - | then | |
1244 | + | func eX (cY,cZ) = if ((cZ >= cV)) | |
1245 | + | then cY | |
1243 | 1246 | else throw("List size exceeds 24") | |
1244 | 1247 | ||
1245 | - | eW( | |
1248 | + | eX(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(cW, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24) | |
1246 | 1249 | } | |
1247 | - | let | |
1248 | - | $Tuple3( | |
1250 | + | let gu = (fraction(gB._1, (2 * aJ), n) * aL) | |
1251 | + | $Tuple3(gn, gq, gu) | |
1249 | 1252 | } | |
1250 | 1253 | ||
1251 | 1254 | ||
1252 | - | @Callable( | |
1253 | - | func constructorV1 ( | |
1255 | + | @Callable(eg) | |
1256 | + | func constructorV1 (gC) = if ((eg.caller != this)) | |
1254 | 1257 | then throw("Permission denied") | |
1255 | - | else [StringEntry(D(), | |
1258 | + | else [StringEntry(D(), gC)] | |
1256 | 1259 | ||
1257 | 1260 | ||
1258 | 1261 | ||
1259 | - | @Callable( | |
1260 | - | func saveInteger (w, | |
1262 | + | @Callable(eg) | |
1263 | + | func saveInteger (w,fC) = if ((eg.caller != this)) | |
1261 | 1264 | then throw("saveInteger is not public method") | |
1262 | - | else [IntegerEntry(w, | |
1265 | + | else [IntegerEntry(w, fC)] | |
1263 | 1266 | ||
1264 | 1267 | ||
1265 | 1268 | ||
1266 | - | @Callable( | |
1267 | - | func setBlocked ( | |
1269 | + | @Callable(eg) | |
1270 | + | func setBlocked (gD) = if ((eg.caller != this)) | |
1268 | 1271 | then throw("permission denied") | |
1269 | - | else [BooleanEntry(ak(), | |
1272 | + | else [BooleanEntry(ak(), gD)] | |
1270 | 1273 | ||
1271 | 1274 | ||
1272 | 1275 | ||
1273 | - | @Callable( | |
1276 | + | @Callable(eg) | |
1274 | 1277 | func stakeLand () = { | |
1275 | - | let | |
1276 | - | if ((size( | |
1278 | + | let gE = gi(eg) | |
1279 | + | if ((size(eg.payments) != 1)) | |
1277 | 1280 | then throw("Exactly one payment required") | |
1278 | 1281 | else { | |
1279 | - | let | |
1280 | - | let | |
1281 | - | let v = toString( | |
1282 | - | if (( | |
1283 | - | then throw((("NFT " + | |
1282 | + | let gF = value(eg.payments[0]) | |
1283 | + | let bk = value(gF.assetId) | |
1284 | + | let v = toString(eg.caller) | |
1285 | + | if ((gF.amount != 1)) | |
1286 | + | then throw((("NFT " + aA) + " token should be attached as payment")) | |
1284 | 1287 | else { | |
1285 | - | let | |
1286 | - | if (( | |
1288 | + | let fw = value(assetInfo(bk)) | |
1289 | + | if ((fw.issuer != this)) | |
1287 | 1290 | then throw("Unknown issuer of token") | |
1288 | - | else if (!(contains( | |
1289 | - | then throw((("Only NFT " + | |
1291 | + | else if (!(contains(fw.name, aA))) | |
1292 | + | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
1290 | 1293 | else { | |
1291 | - | let | |
1292 | - | let | |
1293 | - | then dropRight( | |
1294 | - | else if (contains( | |
1295 | - | then dropRight( | |
1296 | - | else dropRight( | |
1297 | - | if (!(isDefined(parseInt( | |
1298 | - | then throw(("Cannot parse land number from " + | |
1294 | + | let gG = drop(fw.name, 4) | |
1295 | + | let cF = if (contains(gG, "XXL")) | |
1296 | + | then dropRight(gG, 3) | |
1297 | + | else if (contains(gG, "XL")) | |
1298 | + | then dropRight(gG, 2) | |
1299 | + | else dropRight(gG, 1) | |
1300 | + | if (!(isDefined(parseInt(cF)))) | |
1301 | + | then throw(("Cannot parse land number from " + fw.name)) | |
1299 | 1302 | else { | |
1300 | - | let | |
1301 | - | let | |
1302 | - | if (isDefined(getInteger( | |
1303 | - | then throw((("NFT " + | |
1303 | + | let bs = toBase58String(bk) | |
1304 | + | let fx = bm(bs) | |
1305 | + | if (isDefined(getInteger(fx))) | |
1306 | + | then throw((("NFT " + fw.name) + " is already staked")) | |
1304 | 1307 | else { | |
1305 | - | let | |
1306 | - | let | |
1307 | - | let | |
1308 | - | let | |
1309 | - | let | |
1310 | - | let | |
1311 | - | let | |
1312 | - | let | |
1313 | - | let | |
1314 | - | let | |
1315 | - | let | |
1316 | - | then split_51C(value( | |
1308 | + | let fA = split(fw.description, "_") | |
1309 | + | let ec = ej(fA[R]) | |
1310 | + | let fl = ai(fA[Q]) | |
1311 | + | let fa = (fl / o) | |
1312 | + | let dc = ei(ec, fa, 1) | |
1313 | + | let gH = Y(fA[S]) | |
1314 | + | let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_") | |
1315 | + | let gJ = makeString(ea(gI, ec, fa, 1), "_") | |
1316 | + | let gK = aa(v) | |
1317 | + | let gL = getString(gK) | |
1318 | + | let gM = if (isDefined(gL)) | |
1319 | + | then split_51C(value(gL), "_") | |
1317 | 1320 | else nil | |
1318 | - | if (containsElement( | |
1319 | - | then throw(("Your staked lands already contain " + | |
1320 | - | else if ((size( | |
1321 | - | then throw((("Your already staked max (" + toString( | |
1321 | + | if (containsElement(gM, bs)) | |
1322 | + | then throw(("Your staked lands already contain " + bs)) | |
1323 | + | else if ((size(gM) >= aF)) | |
1324 | + | then throw((("Your already staked max (" + toString(aF)) + ") lands")) | |
1322 | 1325 | else { | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | let | |
1327 | - | $Tuple2(([IntegerEntry( | |
1326 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1327 | + | let gN = ac(v) | |
1328 | + | let gO = valueOrElse(getInteger(gN), 0) | |
1329 | + | let gP = invoke(M, "onStakeUnstakeLand", [v], nil) | |
1330 | + | $Tuple2(([IntegerEntry(fx, lastBlock.timestamp), IntegerEntry(bp(aA, bs, v), lastBlock.timestamp), StringEntry(gK, makeString_11C((gM :+ bs), "_")), IntegerEntry(gN, (gO + fl)), StringEntry(bj(bs), v), StringEntry(cE(cF), v), IntegerEntry(cD(bs, v), fb), StringEntry(X(), dc), StringEntry(gH, gJ)] ++ gE), gP) | |
1328 | 1331 | } | |
1329 | 1332 | } | |
1330 | 1333 | } | |
1331 | 1334 | } | |
1332 | 1335 | } | |
1333 | 1336 | } | |
1334 | 1337 | } | |
1335 | 1338 | ||
1336 | 1339 | ||
1337 | 1340 | ||
1338 | - | @Callable( | |
1339 | - | func unstakeLand ( | |
1340 | - | let | |
1341 | - | if ((size( | |
1341 | + | @Callable(eg) | |
1342 | + | func unstakeLand (fr) = { | |
1343 | + | let gE = gi(eg) | |
1344 | + | if ((size(eg.payments) != 0)) | |
1342 | 1345 | then throw("No payments required") | |
1343 | 1346 | else { | |
1344 | - | let am = toString( | |
1345 | - | let | |
1346 | - | let | |
1347 | - | let | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | let | |
1354 | - | let | |
1355 | - | let | |
1356 | - | let | |
1357 | - | let | |
1358 | - | let I = indexOf( | |
1347 | + | let am = toString(eg.caller) | |
1348 | + | let dH = fp(am, cK, fr) | |
1349 | + | let bs = dH._2 | |
1350 | + | let fA = dH._3 | |
1351 | + | let gK = aa(am) | |
1352 | + | let ec = ej(fA[R]) | |
1353 | + | let fl = ai(fA[Q]) | |
1354 | + | let fa = (fl / o) | |
1355 | + | let dc = ei(ec, fa, -1) | |
1356 | + | let gH = Y(fA[S]) | |
1357 | + | let gI = split(valueOrElse(getString(gH), "0_0_0_0_0_0"), "_") | |
1358 | + | let gJ = makeString(ea(gI, ec, fa, -1), "_") | |
1359 | + | let gh = fP(am, bs, fl, cK) | |
1360 | + | let gM = split_51C(valueOrElse(getString(gK), ""), "_") | |
1361 | + | let I = indexOf(gM, bs) | |
1359 | 1362 | if (!(isDefined(I))) | |
1360 | - | then throw(("Your staked lands don't contain " + | |
1363 | + | then throw(("Your staked lands don't contain " + bs)) | |
1361 | 1364 | else { | |
1362 | - | let | |
1363 | - | let | |
1364 | - | if (( | |
1365 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1365 | + | let gQ = lastBlock.timestamp | |
1366 | + | let gR = valueOrElse(getInteger(L, bF(am)), 0) | |
1367 | + | if ((gR >= gQ)) | |
1368 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gR))) | |
1366 | 1369 | else { | |
1367 | - | let | |
1368 | - | if (( | |
1369 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1370 | + | let gS = (valueOrElse(getInteger(M, cw(am)), 0) + k) | |
1371 | + | if ((gS > gQ)) | |
1372 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(gS))) | |
1370 | 1373 | else { | |
1371 | - | let | |
1372 | - | let | |
1373 | - | let | |
1374 | + | let gN = ac(am) | |
1375 | + | let gT = valueOrElse(getInteger(gN), 0) | |
1376 | + | let gU = if ((fl > gT)) | |
1374 | 1377 | then 0 | |
1375 | - | else ( | |
1376 | - | let | |
1377 | - | $Tuple2(([ScriptTransfer( | |
1378 | - | then StringEntry( | |
1379 | - | else DeleteEntry( | |
1378 | + | else (gT - fl) | |
1379 | + | let gP = invoke(M, "onStakeUnstakeLand", [am], nil) | |
1380 | + | $Tuple2(([ScriptTransfer(eg.caller, 1, fromBase58String(bs)), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am)), StringEntry(X(), dc), StringEntry(gH, gJ), StringEntry(gh._2, makeString(gh._3, ":")), if ((size(gM) > 1)) | |
1381 | + | then StringEntry(gK, makeString_11C(removeByIndex(gM, value(I)), "_")) | |
1382 | + | else DeleteEntry(gK), IntegerEntry(gN, gU)] ++ gE), gP) | |
1380 | 1383 | } | |
1381 | 1384 | } | |
1382 | 1385 | } | |
1383 | 1386 | } | |
1384 | 1387 | } | |
1385 | 1388 | ||
1386 | 1389 | ||
1387 | 1390 | ||
1388 | - | @Callable( | |
1389 | - | func unstakeLandCallback ( | |
1391 | + | @Callable(eg) | |
1392 | + | func unstakeLandCallback (bs,am) = if ((toString(eg.caller) != j)) | |
1390 | 1393 | then throw("Permission denied") | |
1391 | 1394 | else { | |
1392 | - | let | |
1393 | - | let | |
1394 | - | $Tuple2([Burn(fromBase58String( | |
1395 | + | let gV = gj(am, bs) | |
1396 | + | let gP = invoke(M, "onStakeUnstakeLand", [am], nil) | |
1397 | + | $Tuple2([Burn(fromBase58String(bs), 1), DeleteEntry(bm(bs)), DeleteEntry(bp(aA, bs, am))], $Tuple5(gV._1, gV._2, gV._3, gV._4, gP)) | |
1395 | 1398 | } | |
1396 | 1399 | ||
1397 | 1400 | ||
1398 | 1401 | ||
1399 | - | @Callable( | |
1400 | - | func unstakeLandREADONLY ( | |
1401 | - | let | |
1402 | - | $Tuple2(nil, | |
1402 | + | @Callable(eg) | |
1403 | + | func unstakeLandREADONLY (bs,am) = { | |
1404 | + | let gV = gj(am, bs) | |
1405 | + | $Tuple2(nil, gV) | |
1403 | 1406 | } | |
1404 | 1407 | ||
1405 | 1408 | ||
1406 | 1409 | ||
1407 | - | @Callable( | |
1408 | - | func unstakeLandsFinalizeCallback (am) = if ((toString( | |
1410 | + | @Callable(eg) | |
1411 | + | func unstakeLandsFinalizeCallback (am) = if ((toString(eg.caller) != j)) | |
1409 | 1412 | then throw("Permission denied") | |
1410 | 1413 | else $Tuple2([DeleteEntry(aa(am)), DeleteEntry(ac(am))], 0) | |
1411 | 1414 | ||
1412 | 1415 | ||
1413 | 1416 | ||
1414 | - | @Callable( | |
1415 | - | func convertUnstakedLands () = if ((size( | |
1417 | + | @Callable(eg) | |
1418 | + | func convertUnstakedLands () = if ((size(eg.payments) != 1)) | |
1416 | 1419 | then throw("Exactly one payment required") | |
1417 | 1420 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let v = toString( | |
1421 | - | if (( | |
1422 | - | then throw((("NFT " + | |
1421 | + | let gF = value(eg.payments[0]) | |
1422 | + | let bk = value(gF.assetId) | |
1423 | + | let v = toString(eg.caller) | |
1424 | + | if ((gF.amount != 1)) | |
1425 | + | then throw((("NFT " + aA) + " token should be attached as payment")) | |
1423 | 1426 | else { | |
1424 | - | let | |
1425 | - | if (( | |
1427 | + | let fw = value(assetInfo(bk)) | |
1428 | + | if ((fw.issuer != this)) | |
1426 | 1429 | then throw("Unknown issuer of token") | |
1427 | - | else if (!(contains( | |
1428 | - | then throw((("Only NFT " + | |
1430 | + | else if (!(contains(fw.name, aA))) | |
1431 | + | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
1429 | 1432 | else { | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | if (( | |
1433 | + | let bs = toBase58String(bk) | |
1434 | + | let fA = split(fw.description, "_") | |
1435 | + | let fl = ai(fA[Q]) | |
1436 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1437 | + | let fm = valueOrElse(getInteger(bn(aD, bs)), 0) | |
1438 | + | let gW = ((fl * n) + ((((fl * fb) + fm) * n) / 5)) | |
1439 | + | let gX = invoke(O, "requestAcresCallback", [gW], nil) | |
1440 | + | if ((gX == gX)) | |
1438 | 1441 | then { | |
1439 | - | let | |
1440 | - | if (( | |
1441 | - | then $Tuple2([Burn(fromBase58String( | |
1442 | + | let gY = invoke(addressFromStringValue(j), "stakeAcresCallback", [v], [AttachedPayment(U, gW)]) | |
1443 | + | if ((gY == gY)) | |
1444 | + | then $Tuple2([Burn(fromBase58String(bs), 1)], 0) | |
1442 | 1445 | else throw("Strict value is not equal to itself.") | |
1443 | 1446 | } | |
1444 | 1447 | else throw("Strict value is not equal to itself.") | |
1445 | 1448 | } | |
1446 | 1449 | } | |
1447 | 1450 | } | |
1448 | 1451 | ||
1449 | 1452 | ||
1450 | 1453 | ||
1451 | - | @Callable( | |
1452 | - | func unstakeDuckCallback ( | |
1454 | + | @Callable(eg) | |
1455 | + | func unstakeDuckCallback (by,am) = if ((toString(eg.caller) != j)) | |
1453 | 1456 | then throw("Permission denied") | |
1454 | 1457 | else { | |
1455 | - | let | |
1456 | - | $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String( | |
1458 | + | let gV = gv(am, by) | |
1459 | + | $Tuple2([ScriptTransfer(addressFromStringValue(am), 1, fromBase58String(by)), DeleteEntry(bm(by)), DeleteEntry(bB(by)), DeleteEntry(bp(aB, by, am)), DeleteEntry(bC(am))], gV) | |
1457 | 1460 | } | |
1458 | 1461 | ||
1459 | 1462 | ||
1460 | 1463 | ||
1461 | - | @Callable( | |
1462 | - | func unstakeDuckREADONLY ( | |
1463 | - | let | |
1464 | - | $Tuple2(nil, | |
1464 | + | @Callable(eg) | |
1465 | + | func unstakeDuckREADONLY (by,am) = { | |
1466 | + | let gV = gv(am, by) | |
1467 | + | $Tuple2(nil, gV) | |
1465 | 1468 | } | |
1466 | 1469 | ||
1467 | 1470 | ||
1468 | 1471 | ||
1469 | - | @Callable( | |
1470 | - | func claimRes ( | |
1471 | - | let | |
1472 | - | if ((size( | |
1472 | + | @Callable(eg) | |
1473 | + | func claimRes (fC,gZ) = { | |
1474 | + | let gE = gi(eg) | |
1475 | + | if ((size(eg.payments) != 0)) | |
1473 | 1476 | then throw("No payments required") | |
1474 | 1477 | else { | |
1475 | - | let am = toString( | |
1476 | - | let | |
1477 | - | let | |
1478 | - | $Tuple2((((( | |
1478 | + | let am = toString(eg.originCaller) | |
1479 | + | let eh = fB(am, fC, cK, gZ) | |
1480 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
1481 | + | $Tuple2(((((eh._1 ++ fW(by, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._3[be]) | |
1479 | 1482 | } | |
1480 | 1483 | } | |
1481 | 1484 | ||
1482 | 1485 | ||
1483 | 1486 | ||
1484 | - | @Callable( | |
1485 | - | func claimResToWH ( | |
1486 | - | let | |
1487 | - | if ((size( | |
1487 | + | @Callable(eg) | |
1488 | + | func claimResToWH (fC,gZ) = { | |
1489 | + | let gE = gi(eg) | |
1490 | + | if ((size(eg.payments) != 0)) | |
1488 | 1491 | then throw("No payments required") | |
1489 | 1492 | else { | |
1490 | - | let am = toString( | |
1491 | - | let | |
1492 | - | $Tuple2((((( | |
1493 | + | let am = toString(eg.originCaller) | |
1494 | + | let eh = fB(am, fC, cJ, gZ) | |
1495 | + | $Tuple2(((((eh._1 ++ fX(am, fraction(ck, fC, n))._1) :+ StringEntry(eh._2, makeString(eh._3, ":"))) :+ StringEntry(eh._4, makeString(eh._5, ":"))) ++ gE), eh._5[aV]) | |
1493 | 1496 | } | |
1494 | 1497 | } | |
1495 | 1498 | ||
1496 | 1499 | ||
1497 | 1500 | ||
1498 | - | @Callable( | |
1499 | - | func updateBackpack ( | |
1501 | + | @Callable(eg) | |
1502 | + | func updateBackpack (by,ha) = if ((eg.caller != K)) | |
1500 | 1503 | then throw("permission denied") | |
1501 | - | else $Tuple2([StringEntry( | |
1504 | + | else $Tuple2([StringEntry(bD(by), ha)], ha) | |
1502 | 1505 | ||
1503 | 1506 | ||
1504 | 1507 | ||
1505 | - | @Callable( | |
1508 | + | @Callable(eg) | |
1506 | 1509 | func commitForRandom () = { | |
1507 | - | let | |
1508 | - | let | |
1509 | - | let am = toString( | |
1510 | - | $Tuple2(([IntegerEntry(W(am), | |
1510 | + | let gE = gi(eg) | |
1511 | + | let hb = (height + V) | |
1512 | + | let am = toString(eg.caller) | |
1513 | + | $Tuple2(([IntegerEntry(W(am), hb)] ++ gE), hb) | |
1511 | 1514 | } | |
1512 | 1515 | ||
1513 | 1516 | ||
1514 | 1517 | ||
1515 | - | @Callable( | |
1516 | - | func revealRandom ( | |
1517 | - | let | |
1518 | - | let am = toString( | |
1519 | - | let | |
1520 | - | let | |
1521 | - | if (( | |
1522 | - | then throw(("Random number is not ready yet, wait until height = " + toString( | |
1518 | + | @Callable(eg) | |
1519 | + | func revealRandom (av) = { | |
1520 | + | let gE = gi(eg) | |
1521 | + | let am = toString(eg.caller) | |
1522 | + | let hc = W(am) | |
1523 | + | let hb = valueOrErrorMessage(getInteger(hc), "You have to commitForRandom() first!") | |
1524 | + | if ((hb > height)) | |
1525 | + | then throw(("Random number is not ready yet, wait until height = " + toString(hb))) | |
1523 | 1526 | else { | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let | |
1527 | - | $Tuple2(([DeleteEntry( | |
1527 | + | let ax = value(value(blockInfoByHeight(hb)).vrf) | |
1528 | + | let aw = toBytes(valueOrElse(getString(al(am)), "")) | |
1529 | + | let hd = au(av, aw, ax) | |
1530 | + | $Tuple2(([DeleteEntry(hc)] ++ gE), hd) | |
1528 | 1531 | } | |
1529 | 1532 | } | |
1530 | 1533 | ||
1531 | 1534 | ||
1532 | 1535 | ||
1533 | - | @Callable( | |
1534 | - | func activateArtifact ( | |
1535 | - | let | |
1536 | - | if ((size( | |
1536 | + | @Callable(eg) | |
1537 | + | func activateArtifact (he,hf) = { | |
1538 | + | let gE = gi(eg) | |
1539 | + | if ((size(eg.payments) != 0)) | |
1537 | 1540 | then throw("No payments required") | |
1538 | 1541 | else { | |
1539 | - | let am = toString( | |
1540 | - | let | |
1541 | - | let g = | |
1542 | + | let am = toString(eg.caller) | |
1543 | + | let eh = { | |
1544 | + | let g = he | |
1542 | 1545 | if (("PRESALE" == g)) | |
1543 | - | then | |
1546 | + | then gf(am, hf) | |
1544 | 1547 | else if (("ONBOARD" == g)) | |
1545 | - | then | |
1548 | + | then fY(am) | |
1546 | 1549 | else throw("Unknown artifact") | |
1547 | 1550 | } | |
1548 | - | ( | |
1551 | + | (eh ++ gE) | |
1549 | 1552 | } | |
1550 | 1553 | } | |
1551 | 1554 | ||
1552 | 1555 | ||
1553 | 1556 | ||
1554 | - | @Callable( | |
1555 | - | func saveWarehouse ( | |
1557 | + | @Callable(eg) | |
1558 | + | func saveWarehouse (fd,bs) = if ((eg.caller != K)) | |
1556 | 1559 | then throw("Access denied") | |
1557 | 1560 | else { | |
1558 | - | let | |
1559 | - | let | |
1560 | - | if ((size( | |
1561 | + | let eZ = br(bs) | |
1562 | + | let fe = split_4C(fd, ":") | |
1563 | + | if ((size(fe) != 5)) | |
1561 | 1564 | then throw("warehouse string should contain 4 ':' separators") | |
1562 | 1565 | else { | |
1563 | - | let | |
1564 | - | let | |
1565 | - | let | |
1566 | - | let | |
1567 | - | if ((0 > | |
1566 | + | let hg = split(fe[aY], "_")[aZ] | |
1567 | + | let fN = eK(fe) | |
1568 | + | let hh = eI(fe[aU]) | |
1569 | + | let fO = ((hh - parseIntValue(hg)) - fN) | |
1570 | + | if ((0 > fO)) | |
1568 | 1571 | then throw("Operation leads to negative free warehouse space") | |
1569 | 1572 | else { | |
1570 | - | let | |
1571 | - | $Tuple2([StringEntry( | |
1573 | + | let hi = makeString_2C([fe[aU], fe[aV], fe[aW], fe[aX], makeString([hg, toString(fN), toString(fO), toString(hh)], "_")], ":") | |
1574 | + | $Tuple2([StringEntry(eZ, hi)], hi) | |
1572 | 1575 | } | |
1573 | 1576 | } | |
1574 | 1577 | } | |
1575 | 1578 | ||
1576 | 1579 | ||
1577 | 1580 | ||
1578 | - | @Callable( | |
1579 | - | func setCustomName ( | |
1580 | - | let | |
1581 | - | if ((size( | |
1581 | + | @Callable(eg) | |
1582 | + | func setCustomName (bk,hj,bo) = { | |
1583 | + | let gE = gi(eg) | |
1584 | + | if ((size(eg.payments) != 1)) | |
1582 | 1585 | then throw("Exactly one payment required") | |
1583 | 1586 | else { | |
1584 | - | let | |
1585 | - | if (( | |
1587 | + | let gF = value(eg.payments[0]) | |
1588 | + | if ((gF.assetId != h)) | |
1586 | 1589 | then throw("Allowed USDT payment only!") | |
1587 | - | else if (( | |
1588 | - | then throw(("Payment should be " + toString( | |
1589 | - | else if (contains( | |
1590 | - | then throw(("Name should not contain '__': " + | |
1591 | - | else if ((size( | |
1592 | - | then throw(("Name too long, maxLength=" + toString( | |
1590 | + | else if ((gF.amount != cy)) | |
1591 | + | then throw(("Payment should be " + toString(cy))) | |
1592 | + | else if (contains(hj, "__")) | |
1593 | + | then throw(("Name should not contain '__': " + hj)) | |
1594 | + | else if ((size(hj) > cz)) | |
1595 | + | then throw(("Name too long, maxLength=" + toString(cz))) | |
1593 | 1596 | else { | |
1594 | - | let am = toString( | |
1595 | - | let | |
1596 | - | let g = | |
1597 | + | let am = toString(eg.originCaller) | |
1598 | + | let hk = { | |
1599 | + | let g = bo | |
1597 | 1600 | if (("ACCOUNT" == g)) | |
1598 | 1601 | then { | |
1599 | - | let | |
1600 | - | let | |
1601 | - | if (isDefined( | |
1602 | - | then throw(("Name already registered: " + | |
1602 | + | let hl = cH(hj) | |
1603 | + | let hm = getString(hl) | |
1604 | + | if (isDefined(hm)) | |
1605 | + | then throw(("Name already registered: " + hj)) | |
1603 | 1606 | else { | |
1604 | - | let | |
1605 | - | let | |
1606 | - | let | |
1607 | - | then [DeleteEntry( | |
1607 | + | let hn = bv(am) | |
1608 | + | let ho = getString(hn) | |
1609 | + | let hp = if (isDefined(ho)) | |
1610 | + | then [DeleteEntry(cH(value(ho)))] | |
1608 | 1611 | else nil | |
1609 | - | ((( | |
1612 | + | (((hp :+ StringEntry(hn, hj)) :+ StringEntry(hl, am)) ++ fX(am, cl)._1) | |
1610 | 1613 | } | |
1611 | 1614 | } | |
1612 | 1615 | else if (("LAND" == g)) | |
1613 | 1616 | then { | |
1614 | - | let | |
1615 | - | let | |
1616 | - | if (!(isDefined(getInteger( | |
1617 | - | then throw(( | |
1617 | + | let fw = value(assetInfo(fromBase58String(bk))) | |
1618 | + | let fx = bm(bk) | |
1619 | + | if (!(isDefined(getInteger(fx)))) | |
1620 | + | then throw((fw.name + " is not staked")) | |
1618 | 1621 | else { | |
1619 | - | let | |
1620 | - | if (( | |
1621 | - | then throw(( | |
1622 | + | let fz = valueOrErrorMessage(getString(bj(bk)), (("NFT " + fw.name) + " is orphaned")) | |
1623 | + | if ((fz != am)) | |
1624 | + | then throw((aA + " is not yours")) | |
1622 | 1625 | else { | |
1623 | - | let | |
1624 | - | let | |
1625 | - | if (isDefined( | |
1626 | - | then throw(("Name already registered: " + | |
1626 | + | let hl = cB(hj) | |
1627 | + | let hm = getString(hl) | |
1628 | + | if (isDefined(hm)) | |
1629 | + | then throw(("Name already registered: " + hj)) | |
1627 | 1630 | else { | |
1628 | - | let | |
1629 | - | let | |
1630 | - | let | |
1631 | - | then [DeleteEntry( | |
1631 | + | let hq = bl(bk) | |
1632 | + | let ho = getString(hq) | |
1633 | + | let hp = if (isDefined(ho)) | |
1634 | + | then [DeleteEntry(cB(value(ho)))] | |
1632 | 1635 | else nil | |
1633 | - | ((( | |
1636 | + | (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fX(am, cl)._1) | |
1634 | 1637 | } | |
1635 | 1638 | } | |
1636 | 1639 | } | |
1637 | 1640 | } | |
1638 | 1641 | else if (("DUCK" == g)) | |
1639 | 1642 | then { | |
1640 | - | let | |
1641 | - | let | |
1642 | - | if (if (!(isDefined(getInteger( | |
1643 | + | let fw = value(assetInfo(fromBase58String(bk))) | |
1644 | + | let fx = bm(bk) | |
1645 | + | if (if (!(isDefined(getInteger(fx)))) | |
1643 | 1646 | then true | |
1644 | - | else !(isDefined(getString( | |
1645 | - | then throw(( | |
1647 | + | else !(isDefined(getString(bC(am))))) | |
1648 | + | then throw((fw.name + " is not staked")) | |
1646 | 1649 | else { | |
1647 | - | let | |
1648 | - | if (( | |
1649 | - | then throw(( | |
1650 | + | let fz = valueOrErrorMessage(getString(bB(bk)), (("NFT " + fw.name) + " is orphaned")) | |
1651 | + | if ((fz != am)) | |
1652 | + | then throw((aB + " is not yours")) | |
1650 | 1653 | else { | |
1651 | - | let | |
1652 | - | let | |
1653 | - | if (isDefined( | |
1654 | - | then throw(("Name already registered: " + | |
1654 | + | let hl = cG(hj) | |
1655 | + | let hm = getString(hl) | |
1656 | + | if (isDefined(hm)) | |
1657 | + | then throw(("Name already registered: " + hj)) | |
1655 | 1658 | else { | |
1656 | - | let | |
1657 | - | let | |
1658 | - | let | |
1659 | - | then [DeleteEntry( | |
1659 | + | let hq = bu(bk) | |
1660 | + | let ho = getString(hq) | |
1661 | + | let hp = if (isDefined(ho)) | |
1662 | + | then [DeleteEntry(cG(value(ho)))] | |
1660 | 1663 | else nil | |
1661 | - | ((( | |
1664 | + | (((hp :+ StringEntry(hq, hj)) :+ StringEntry(hl, bk)) ++ fW(bk, cl)._1) | |
1662 | 1665 | } | |
1663 | 1666 | } | |
1664 | 1667 | } | |
1665 | 1668 | } | |
1666 | 1669 | else throw("Unknown entity type") | |
1667 | 1670 | } | |
1668 | - | $Tuple2((( | |
1671 | + | $Tuple2(((hk :+ ScriptTransfer(K, gF.amount, h)) ++ gE), 0) | |
1669 | 1672 | } | |
1670 | 1673 | } | |
1671 | 1674 | } | |
1672 | 1675 | ||
1673 | 1676 | ||
1674 | 1677 | ||
1675 | - | @Callable( | |
1676 | - | func setReferrals ( | |
1678 | + | @Callable(eg) | |
1679 | + | func setReferrals (hr,hs) = if ((eg.callerPublicKey != f)) | |
1677 | 1680 | then throw("Permission denied") | |
1678 | 1681 | else { | |
1679 | - | let | |
1680 | - | if ((size( | |
1682 | + | let gE = gi(eg) | |
1683 | + | if ((size(eg.payments) != 0)) | |
1681 | 1684 | then throw("No payments required") | |
1682 | - | else if (!(isDefined(addressFromString( | |
1683 | - | then throw(("Invalid address: " + | |
1685 | + | else if (!(isDefined(addressFromString(hr)))) | |
1686 | + | then throw(("Invalid address: " + hr)) | |
1684 | 1687 | else { | |
1685 | - | let | |
1686 | - | if (!(isDefined( | |
1687 | - | then throw(("Invalid address: " + | |
1688 | + | let ht = addressFromString(hs) | |
1689 | + | if (!(isDefined(ht))) | |
1690 | + | then throw(("Invalid address: " + hs)) | |
1688 | 1691 | else { | |
1689 | - | let | |
1690 | - | if (!(isDefined( | |
1692 | + | let hu = getString(al(hr)) | |
1693 | + | if (!(isDefined(hu))) | |
1691 | 1694 | then throw("oldPlayer didn't do any tx in game") | |
1692 | - | else if ((0 >= wavesBalance(value( | |
1695 | + | else if ((0 >= wavesBalance(value(ht)).available)) | |
1693 | 1696 | then throw("newPlayer has no WAVES") | |
1694 | 1697 | else { | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | then split_4C(value( | |
1698 | + | let hv = cI() | |
1699 | + | let hw = getString(hv) | |
1700 | + | let hx = if (isDefined(hw)) | |
1701 | + | then split_4C(value(hw), "_") | |
1699 | 1702 | else nil | |
1700 | - | if (containsElement( | |
1701 | - | then throw(( | |
1703 | + | if (containsElement(hx, hs)) | |
1704 | + | then throw((hs + " is not newbie (already has referrals)")) | |
1702 | 1705 | else { | |
1703 | - | let | |
1704 | - | let | |
1705 | - | if (if (isDefined( | |
1706 | - | then isDefined(addressFromString(value( | |
1706 | + | let fZ = bw(hs) | |
1707 | + | let ga = getString(fZ) | |
1708 | + | if (if (isDefined(ga)) | |
1709 | + | then isDefined(addressFromString(value(ga))) | |
1707 | 1710 | else false) | |
1708 | - | then throw((( | |
1711 | + | then throw(((hs + " already has refBy: ") + value(ga))) | |
1709 | 1712 | else { | |
1710 | - | let | |
1711 | - | let | |
1712 | - | let | |
1713 | - | then split_4C(value( | |
1713 | + | let hy = bA(hr) | |
1714 | + | let hz = getString(hy) | |
1715 | + | let hA = if (isDefined(hz)) | |
1716 | + | then split_4C(value(hz), "_") | |
1714 | 1717 | else nil | |
1715 | - | if (containsElement( | |
1716 | - | then throw(((( | |
1718 | + | if (containsElement(hA, hs)) | |
1719 | + | then throw((((hr + " already contains ") + hs) + " within referrals")) | |
1717 | 1720 | else { | |
1718 | - | let | |
1719 | - | let | |
1720 | - | then value( | |
1721 | - | else makeString_2C(( | |
1722 | - | $Tuple2(([StringEntry( | |
1721 | + | let hB = makeString_2C((hA :+ hs), "_") | |
1722 | + | let hC = if (containsElement(hx, hr)) | |
1723 | + | then value(hw) | |
1724 | + | else makeString_2C((hx :+ hr), "_") | |
1725 | + | $Tuple2(([StringEntry(fZ, hr), StringEntry(hy, hB), StringEntry(hv, hC)] ++ gE), 0) | |
1723 | 1726 | } | |
1724 | 1727 | } | |
1725 | 1728 | } | |
1726 | 1729 | } | |
1727 | 1730 | } | |
1728 | 1731 | } | |
1729 | 1732 | } | |
1730 | 1733 | ||
1731 | 1734 | ||
1732 | 1735 | ||
1733 | - | @Callable( | |
1734 | - | func distributePoints ( | |
1735 | - | let | |
1736 | - | if ((size( | |
1736 | + | @Callable(eg) | |
1737 | + | func distributePoints (hD,hE,hF,hG,hH) = { | |
1738 | + | let gE = gi(eg) | |
1739 | + | if ((size(eg.payments) != 0)) | |
1737 | 1740 | then throw("No payments required") | |
1738 | 1741 | else { | |
1739 | - | let am = toString( | |
1740 | - | let | |
1741 | - | let | |
1742 | - | let | |
1742 | + | let am = toString(eg.originCaller) | |
1743 | + | let hI = ag(invoke(M, "checkWlgXpREADONLY", [am], nil)) | |
1744 | + | let hJ = ad(hI[1]) | |
1745 | + | let hK = if ((0 >= hJ)) | |
1743 | 1746 | then $Tuple2(0, nil) | |
1744 | 1747 | else { | |
1745 | - | let | |
1746 | - | if (( | |
1747 | - | then $Tuple2( | |
1748 | + | let fU = ad(invoke(M, "takeWlgXp", [am], nil)) | |
1749 | + | if ((fU == fU)) | |
1750 | + | then $Tuple2(hJ, [IntegerEntry(cd(am), ad(hI[0])), IntegerEntry(cc(am), ad(hI[2]))]) | |
1748 | 1751 | else throw("Strict value is not equal to itself.") | |
1749 | 1752 | } | |
1750 | - | let | |
1751 | - | let | |
1752 | - | let | |
1753 | - | let | |
1754 | - | let | |
1755 | - | let | |
1756 | - | let | |
1757 | - | let | |
1758 | - | let | |
1759 | - | if (( | |
1760 | - | then throw((("There are only " + toString( | |
1753 | + | let hL = hK._1 | |
1754 | + | let hM = hK._2 | |
1755 | + | let by = valueOrErrorMessage(getString(bC(am)), "You don't have a duck staked") | |
1756 | + | let hN = ce(am) | |
1757 | + | let hO = (valueOrElse(getInteger(hN), 0) + hL) | |
1758 | + | let hP = ca(by) | |
1759 | + | let hQ = valueOrElse(getInteger(hP), 0) | |
1760 | + | let hR = (hO + hQ) | |
1761 | + | let hS = ((((hD + hE) + hF) + hG) + hH) | |
1762 | + | if ((hS > hR)) | |
1763 | + | then throw((("There are only " + toString(hR)) + " free points to distribute")) | |
1761 | 1764 | else { | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | $Tuple2((([IntegerEntry( | |
1765 | + | let hT = bX(by) | |
1766 | + | let hU = split(valueOrElse(getString(hT), "0_0_0_0_0"), "_") | |
1767 | + | let hV = (hO - hS) | |
1768 | + | $Tuple2((([IntegerEntry(hN, if ((0 > hV)) | |
1766 | 1769 | then 0 | |
1767 | - | else | |
1768 | - | then ( | |
1769 | - | else | |
1770 | + | else hV), IntegerEntry(hP, if ((0 > hV)) | |
1771 | + | then (hQ + hV) | |
1772 | + | else hQ), StringEntry(hT, makeString([toString((parseIntValue(hU[bO]) + hD)), toString((parseIntValue(hU[bP]) + hE)), toString((parseIntValue(hU[bQ]) + hF)), toString((parseIntValue(hU[bR]) + hG)), toString((parseIntValue(hU[bS]) + hH))], "_"))] ++ gE) ++ hM), 0) | |
1770 | 1773 | } | |
1771 | 1774 | } | |
1772 | 1775 | } | |
1773 | 1776 | ||
1774 | 1777 | ||
1775 | 1778 | ||
1776 | - | @Callable( | |
1777 | - | func splitByGlobalWeightsREADONLY ( | |
1779 | + | @Callable(eg) | |
1780 | + | func splitByGlobalWeightsREADONLY (fC) = $Tuple2(nil, db(fC)) | |
1778 | 1781 | ||
1779 | 1782 | ||
1780 | 1783 | ||
1781 | - | @Callable( | |
1782 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
1783 | - | let | |
1784 | - | $Tuple2(nil, $Tuple2( | |
1784 | + | @Callable(eg) | |
1785 | + | func splitByGlobalAndLocalWeightsREADONLY (hW,hX,ek) = { | |
1786 | + | let ec = ej(ek) | |
1787 | + | $Tuple2(nil, $Tuple2(db(hW), cM(hX, ec))) | |
1785 | 1788 | } | |
1786 | 1789 | ||
1787 | 1790 | ||
1788 | 1791 | ||
1789 | - | @Callable( | |
1790 | - | func getBackpackREADONLY ( | |
1792 | + | @Callable(eg) | |
1793 | + | func getBackpackREADONLY (by) = $Tuple2(nil, makeString(eF(bD(by)), ":")) | |
1791 | 1794 | ||
1792 | 1795 | ||
1793 | 1796 | ||
1794 | - | @Callable( | |
1795 | - | func getWarehouseREADONLY ( | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1799 | - | $Tuple2(nil, makeString_2C( | |
1797 | + | @Callable(eg) | |
1798 | + | func getWarehouseREADONLY (bs) = { | |
1799 | + | let fw = value(assetInfo(fromBase58String(bs))) | |
1800 | + | let fa = (ai(split(fw.description, "_")[Q]) / o) | |
1801 | + | let fb = valueOrElse(getInteger(bt(bs)), 0) | |
1802 | + | $Tuple2(nil, makeString_2C(eY(br(bs), fa, fb), ":")) | |
1800 | 1803 | } | |
1801 | 1804 | ||
1802 | 1805 | ||
1803 | 1806 | ||
1804 | - | @Callable( | |
1805 | - | func saveLastTx () = if (!(containsElement([M, K, N, O], | |
1807 | + | @Callable(eg) | |
1808 | + | func saveLastTx () = if (!(containsElement([M, K, N, O], eg.caller))) | |
1806 | 1809 | then throw("Access denied") | |
1807 | - | else $Tuple2( | |
1810 | + | else $Tuple2(gi(eg), 42) | |
1808 | 1811 | ||
1809 | 1812 | ||
1810 | 1813 | ||
1811 | - | @Callable( | |
1812 | - | func updateDuckStats ( | |
1814 | + | @Callable(eg) | |
1815 | + | func updateDuckStats (by,fU) = if ((eg.caller != K)) | |
1813 | 1816 | then throw("Access denied") | |
1814 | - | else | |
1817 | + | else fW(by, fU) | |
1815 | 1818 | ||
1816 | 1819 | ||
1817 | 1820 | ||
1818 | - | @Callable( | |
1819 | - | func updateAccStats (am, | |
1821 | + | @Callable(eg) | |
1822 | + | func updateAccStats (am,fU) = if (!(containsElement([M, K, O], eg.caller))) | |
1820 | 1823 | then throw("Access denied") | |
1821 | - | else | |
1824 | + | else fX(am, fU) | |
1822 | 1825 | ||
1823 | 1826 | ||
1824 | 1827 | ||
1825 | - | @Callable( | |
1826 | - | func initDuckTourAttempt ( | |
1828 | + | @Callable(eg) | |
1829 | + | func initDuckTourAttempt (by) = if ((eg.caller != N)) | |
1827 | 1830 | then throw("Access denied") | |
1828 | 1831 | else { | |
1829 | - | let | |
1830 | - | let | |
1831 | - | let | |
1832 | - | let | |
1833 | - | let | |
1834 | - | let | |
1835 | - | let | |
1836 | - | $Tuple2([IntegerEntry( | |
1832 | + | let hY = bW(by) | |
1833 | + | let hZ = cp(valueOrElse(getInteger(bZ(by)), 0)) | |
1834 | + | let ia = valueOrElse(getInteger(hY), hZ) | |
1835 | + | let ib = bE(by) | |
1836 | + | let ft = valueOrElse(getString(ib), aI) | |
1837 | + | let ic = valueOrElse(getInteger(N, bI), 0) | |
1838 | + | let id = (toString(ic) + "_T_0") | |
1839 | + | $Tuple2([IntegerEntry(cf(by), ia), IntegerEntry(hY, hZ), StringEntry(cg(by), ft), StringEntry(ib, id)], id) | |
1837 | 1840 | } | |
1838 | 1841 | ||
1839 | 1842 | ||
1840 | 1843 | ||
1841 | - | @Callable( | |
1844 | + | @Callable(eg) | |
1842 | 1845 | func breakAttempt () = { | |
1843 | - | let | |
1844 | - | let | |
1845 | - | let | |
1846 | - | let | |
1847 | - | if ((split( | |
1846 | + | let gE = gi(eg) | |
1847 | + | let by = valueOrErrorMessage(getString(bC(toString(eg.caller))), "You don't have a duck staked") | |
1848 | + | let ib = bE(by) | |
1849 | + | let ft = valueOrElse(getString(ib), aI) | |
1850 | + | if ((split(ft, "_")[bh] != "T")) | |
1848 | 1851 | then throw("Your duck is not in the tournament") | |
1849 | 1852 | else { | |
1850 | - | let | |
1851 | - | let | |
1852 | - | $Tuple2((( | |
1853 | + | let ie = getIntegerValue(cf(by)) | |
1854 | + | let if = getStringValue(cg(by)) | |
1855 | + | $Tuple2(((gE :+ IntegerEntry(bW(by), ie)) :+ StringEntry(ib, if)), ft) | |
1853 | 1856 | } | |
1854 | 1857 | } | |
1855 | 1858 | ||
1856 | 1859 | ||
1857 | 1860 | ||
1858 | - | @Callable( | |
1859 | - | func breakAttemptCallback () = if (( | |
1861 | + | @Callable(eg) | |
1862 | + | func breakAttemptCallback () = if ((eg.caller != N)) | |
1860 | 1863 | then throw("Access denied") | |
1861 | 1864 | else { | |
1862 | - | let | |
1863 | - | $Tuple2([IntegerEntry( | |
1865 | + | let by = valueOrErrorMessage(getString(bC(toString(eg.originCaller))), "You don't have a duck staked") | |
1866 | + | $Tuple2([IntegerEntry(bW(by), getIntegerValue(cf(by))), StringEntry(bE(by), getStringValue(cg(by)))], "breakAttemptCallback") | |
1864 | 1867 | } | |
1865 | 1868 | ||
1866 | 1869 | ||
1867 | 1870 | ||
1868 | - | @Callable( | |
1869 | - | func exitTournamentInternal ( | |
1871 | + | @Callable(eg) | |
1872 | + | func exitTournamentInternal (by) = if ((eg.caller != this)) | |
1870 | 1873 | then throw("Access denied") | |
1871 | 1874 | else { | |
1872 | - | let | |
1873 | - | let | |
1874 | - | $Tuple2([IntegerEntry( | |
1875 | + | let ie = getIntegerValue(cf(by)) | |
1876 | + | let if = getStringValue(cg(by)) | |
1877 | + | $Tuple2([IntegerEntry(bW(by), ie), StringEntry(bE(by), if)], false) | |
1875 | 1878 | } | |
1876 | 1879 | ||
1877 | 1880 | ||
1878 | 1881 | ||
1879 | - | @Callable( | |
1880 | - | func processDelivery ( | |
1882 | + | @Callable(eg) | |
1883 | + | func processDelivery (by) = if ((eg.caller != this)) | |
1881 | 1884 | then throw("Access denied") | |
1882 | 1885 | else { | |
1883 | - | let am = toString( | |
1884 | - | let | |
1885 | - | if (( | |
1886 | - | then throw(("Delivery is not available, fund=" + | |
1886 | + | let am = toString(eg.originCaller) | |
1887 | + | let ig = valueOrElse(getInteger(K, bH), 0) | |
1888 | + | if ((aK > ig)) | |
1889 | + | then throw(("Delivery is not available, fund=" + ao(ig, 6))) | |
1887 | 1890 | else { | |
1888 | - | let | |
1889 | - | let | |
1890 | - | let | |
1891 | - | let | |
1892 | - | let | |
1893 | - | then valueOrElse(getInteger( | |
1891 | + | let gQ = lastBlock.timestamp | |
1892 | + | let ih = ci(am) | |
1893 | + | let ii = valueOrElse(getInteger(cj(am)), 0) | |
1894 | + | let ij = (gQ / cv) | |
1895 | + | let dC = if ((ii == ij)) | |
1896 | + | then valueOrElse(getInteger(ih), 0) | |
1894 | 1897 | else 0 | |
1895 | - | let | |
1896 | - | let | |
1897 | - | if (( | |
1898 | - | then throw((("You already used " + toString( | |
1898 | + | let ik = valueOrElse(getInteger(O, cx(am)), 0) | |
1899 | + | let il = (aM + (ik / aN)) | |
1900 | + | if ((dC >= il)) | |
1901 | + | then throw((("You already used " + toString(il)) + " delivery attempts for today")) | |
1899 | 1902 | else { | |
1900 | - | let | |
1901 | - | let | |
1902 | - | $Tuple2([IntegerEntry( | |
1903 | + | let im = ch(by) | |
1904 | + | let in = invoke(K, "sendDeliveryReward", [am], nil) | |
1905 | + | $Tuple2([IntegerEntry(ih, (dC + 1)), IntegerEntry(cj(am), ij), IntegerEntry(im, (valueOrElse(getInteger(im), 0) + 1))], in) | |
1903 | 1906 | } | |
1904 | 1907 | } | |
1905 | 1908 | } | |
1906 | 1909 | ||
1907 | 1910 |
github/deemru/w8io/169f3d6 910.73 ms ◑