tx · 7xFZNz985VKPzaYDyMqb8ESKpoCmugPRbvKHGek6khZg 3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37: -0.02100000 Waves 2024.05.15 13:06 [3106994] smart account 3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37 > SELF 0.00000000 Waves
{ "type": 13, "id": "7xFZNz985VKPzaYDyMqb8ESKpoCmugPRbvKHGek6khZg", "fee": 2100000, "feeAssetId": null, "timestamp": 1715767583851, "version": 2, "chainId": 84, "sender": "3N3kKNoJohjVQYNLTrYTGTesr3nq3PZNh37", "senderPublicKey": "vmMXxwQAMUAoisvL193ptPiTtaWQqL5YNu2zs1ouTbY", "proofs": [ "3rEXec2NpD63N4NxzdrUjZpvmPSHCs5kAFkV4gGn8XdXdzCuPLyRVQ8VVB4o35PJ81pd1yokuwjwjhSvCCNARUsy" ], "script": "base64:BwI9CAISAwoBCBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGFMACXNlcGFyYXRvcgICX18AB2NoYWluSWQJAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACGNoYWluSWRXAQFXABBjb250cmFjdEZpbGVuYW1lAhdmdXR1cmVzX2NhbGN1bGF0b3IucmlkZQAFbXVsdDgAgMLXLwAMbXVsdDE4QmlnSW50CQC2AgEAgICQu7rWrfANAA13YXZlc0RlY2ltYWxzAAgADHVzZHREZWNpbWFscwAGAAt3YXZlc1N0cmluZwIFV0FWRVMADXF1ZXVlSXRlbVNpemUAIAAEYmlnMAkAtgIBAAAACWtNdWx0aXNpZwIMJXNfX211bHRpc2lnAQdrU3RhdHVzAgRkYXBwBHR4SWQJALkJAgkAzAgCAgolc19fc3RhdHVzCQDMCAIFBGRhcHAJAMwIAgUEdHhJZAUDbmlsBQlzZXBhcmF0b3IACWtTaHV0ZG93bgIMJXNfX3NodXRkb3duAAtrUHVibGljS2V5cwIOJXNfX3B1YmxpY0tleXMAEWtNYXRjaGVyUHVibGljS2V5AhQlc19fbWF0Y2hlclB1YmxpY0tleQEFdG9YMTgCB29yaWdWYWwNb3JpZ1NjYWxlTXVsdAkAvAIDCQC2AgEFB29yaWdWYWwFDG11bHQxOEJpZ0ludAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQdmcm9tWDE4AgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUMbXVsdDE4QmlnSW50AQ92YWxpZGF0ZUFkZHJlc3MBB2FkZHJlc3MJAQlpc0RlZmluZWQBCQCmCAEFB2FkZHJlc3MBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBDHBhcnNlQXNzZXRJZAEFaW5wdXQDCQAAAgUFaW5wdXQFC3dhdmVzU3RyaW5nBQR1bml0CQDZBAEFBWlucHV0AQ9hc3NldElkVG9TdHJpbmcBBWlucHV0AwkAAAIFBWlucHV0BQR1bml0BQt3YXZlc1N0cmluZwkA2AQBCQEFdmFsdWUBBQVpbnB1dAESZ2V0QXNzZXRJbmZvT3JGYWlsAQdhc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUHYXNzZXRJZAkBB3dyYXBFcnIBAhJpbnZhbGlkIGFzc2V0IGluZm8BFmdldEFzc2V0RGVjaW1hbHNPckZhaWwBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAUNd2F2ZXNEZWNpbWFscwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAdhc3NldElkBQckbWF0Y2gwCAkBEmdldEFzc2V0SW5mb09yRmFpbAEFB2Fzc2V0SWQIZGVjaW1hbHMJAAIBAgtNYXRjaCBlcnJvcgEFcG93MTABAW4JAGwGAAoAAAUBbgAAAAAFBERPV04BDXBvdzEwRGVjaW1hbHMBB2Fzc2V0SWQJAQVwb3cxMAEJARZnZXRBc3NldERlY2ltYWxzT3JGYWlsAQUHYXNzZXRJZAAPa0ZhY3RvcnlBZGRyZXNzAhIlc19fZmFjdG9yeUFkZHJlc3MAFGZhY3RvcnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMFD2tGYWN0b3J5QWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IADmZhY3RvcnlBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECF2ludmFsaWQgZmFjdG9yeSBhZGRyZXNzAAxrVXNkdEFzc2V0SWQCDyVzX191c2R0QXNzZXRJZAARdXNkdEFzc2V0SWRPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwUMa1VzZHRBc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBDHBhcnNlQXNzZXRJZAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAAt1c2R0QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRF1c2R0QXNzZXRJZE9wdGlvbgkBB3dyYXBFcnIBAhVpbnZhbGlkIHVzZHQgYXNzZXQgaWQADmtQcmljZXNBZGRyZXNzAhUlc19fY2FsY3VsYXRvckFkZHJlc3MACHNodXRkb3duCQELdmFsdWVPckVsc2UCCQCbCAIFDmZhY3RvcnlBZGRyZXNzBQlrU2h1dGRvd24HAQttdXN0QWRkcmVzcwIGY2FsbGVyB2FkZHJlc3MDCQAAAgUGY2FsbGVyBQdhZGRyZXNzBgkBCHRocm93RXJyAQIRcGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQZjYWxsZXIJAQttdXN0QWRkcmVzcwIFBmNhbGxlcgUEdGhpcwELbXVzdEZhY3RvcnkBBmNhbGxlcgkBC211c3RBZGRyZXNzAgUGY2FsbGVyBQ5mYWN0b3J5QWRkcmVzcwEJbXVzdEFkbWluAQ9jYWxsZXJQdWJsaWNLZXkECG11bHRpc2lnCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnBA5wdWJsaWNLZXlzTGlzdAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQhtdWx0aXNpZwULa1B1YmxpY0tleXMFCXNlcGFyYXRvcgMJAQ9jb250YWluc0VsZW1lbnQCBQ5wdWJsaWNLZXlzTGlzdAkA2AQBBQ9jYWxsZXJQdWJsaWNLZXkGCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAAOa0FjY291bnRTY3JpcHQCESVzX19hY2NvdW50U2NyaXB0AQ1hY2NvdW50U2NyaXB0AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzBQ5rQWNjb3VudFNjcmlwdAkBB3dyYXBFcnIBAhlhY2NvdW50IHNjcmlwdCBpcyBub3Qgc2V0AA1rUmV3YXJkQW1vdW50AhAlc19fcmV3YXJkQW1vdW50AQxyZXdhcmRBbW91bnQACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MFDWtSZXdhcmRBbW91bnQJAQd3cmFwRXJyAQIYcmV3YXJkIGFtb3VudCBpcyBub3Qgc2V0AA5rQWNjb3VudHNMaW1pdAIRJXNfX2FjY291bnRzTGltaXQAFGFjY291bnRzTGltaXREZWZhdWx0ABQBDWFjY291bnRzTGltaXQACQELdmFsdWVPckVsc2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzBQ5rQWNjb3VudHNMaW1pdAUUYWNjb3VudHNMaW1pdERlZmF1bHQBCmtEZXBvc2l0ZWQBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAglkZXBvc2l0ZWQJAMwIAgkApQgBBQ5hY2NvdW50QWRkcmVzcwUDbmlsBQlzZXBhcmF0b3IBD2RlcG9zaXRlZE9wdGlvbgEOYWNjb3VudEFkZHJlc3MJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQprRGVwb3NpdGVkAQUOYWNjb3VudEFkZHJlc3MBB2tDcmVkaXQCDmFjY291bnRBZGRyZXNzB2Fzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGY3JlZGl0CQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFB2Fzc2V0SWQFA25pbAUJc2VwYXJhdG9yAQlrTGV2ZXJhZ2UBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghsZXZlcmFnZQkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgERa1N5bnRoZXRpY0Fzc2V0SWQBC2Jhc2VBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhBzeW50aGV0aWNBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBDGtCYXNlQXNzZXRJZAEQc3ludGhldGljQXNzZXRJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgILYmFzZUFzc2V0SWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFEHN5bnRoZXRpY0Fzc2V0SWQFA25pbAUJc2VwYXJhdG9yABRSRVFVRVNUX1NUQVRVU19FTVBUWQAAABRSRVFVRVNUX1NUQVRVU19SRUFEWQABAQ5rUmVxdWVzdFN0YXR1cwEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAkAzAgCAgZzdGF0dXMFA25pbAUJc2VwYXJhdG9yARhrQWNjb3VudENyZWF0b3JQdWJsaWNLZXkBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzCQDMCAICEGNyZWF0b3JQdWJsaWNLZXkFA25pbAUJc2VwYXJhdG9yARZrUmVxdWVzdE93bmVyUHVibGljS2V5AQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICDm93bmVyUHVibGljS2V5BQNuaWwFCXNlcGFyYXRvcgEVa1JlcXVlc3RBbW91bnRBc3NldElkAQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICDWFtb3VudEFzc2V0SWQFA25pbAUJc2VwYXJhdG9yARRrUmVxdWVzdFByaWNlQXNzZXRJZAEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQDYBAEFCXJlcXVlc3RJZAkAzAgCAgxwcmljZUFzc2V0SWQFA25pbAUJc2VwYXJhdG9yARxrUmVxdWVzdElkVG9BY2NvdW50UHVibGljS2V5AQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICG3JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQUDbmlsBQlzZXBhcmF0b3IBGmtBY2NvdW50QWRkcmVzc1RvUmVxdWVzdElkAQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgkApQgBBQ5hY2NvdW50QWRkcmVzcwkAzAgCAhlhY2NvdW50QWRkcmVzc1RvUmVxdWVzdElkBQNuaWwFCXNlcGFyYXRvcgEOa1JlcXVlc3RzUXVldWUACQC5CQIJAMwIAgICJXMJAMwIAgINcmVxdWVzdHNRdWV1ZQUDbmlsBQlzZXBhcmF0b3IBDXJlcXVlc3RzUXVldWUACQELdmFsdWVPckVsc2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEOa1JlcXVlc3RzUXVldWUAAQABDmtBY2NvdW50c1F1ZXVlAAkAuQkCCQDMCAICAiVzCQDMCAICDWFjY291bnRzUXVldWUFA25pbAUJc2VwYXJhdG9yAQ1hY2NvdW50c1F1ZXVlAAkBC3ZhbHVlT3JFbHNlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBDmtBY2NvdW50c1F1ZXVlAAEAARBrUmVxdWVzdHNCeU93bmVyAQxvd25lckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCHJlcXVlc3RzCQDMCAIJAKUIAQUMb3duZXJBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEPcmVxdWVzdHNCeU93bmVyAQxvd25lckFkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJARBrUmVxdWVzdHNCeU93bmVyAQUMb3duZXJBZGRyZXNzAQABDGtQYWlyQWxsb3dlZAINYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFDWFtb3VudEFzc2V0SWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFDHByaWNlQXNzZXRJZAkAzAgCAgtwYWlyQWxsb3dlZAUDbmlsBQlzZXBhcmF0b3IBC3BhaXJBbGxvd2VkAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ5mYWN0b3J5QWRkcmVzcwkBDGtQYWlyQWxsb3dlZAIFDWFtb3VudEFzc2V0SWQFDHByaWNlQXNzZXRJZAcBBmtQcmljZQEHYXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQNuaWwFCXNlcGFyYXRvcgEPZ2V0Q3VycmVudFByaWNlAQdhc3NldElkBBBtYXRjaGVyUHVibGljS2V5CQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ5mYWN0b3J5QWRkcmVzcwURa01hdGNoZXJQdWJsaWNLZXkJAQd3cmFwRXJyAQIaaW52YWxpZCBtYXRjaGVyIHB1YmxpYyBrZXkEDm1hdGNoZXJBZGRyZXNzCQCnCAEFEG1hdGNoZXJQdWJsaWNLZXkEBXByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUObWF0Y2hlckFkZHJlc3MJAQZrUHJpY2UBBQdhc3NldElkCQEHd3JhcEVycgEJAKwCAgIZaW52YWxpZCBwcmljZSwgYXNzZXRJZCA9IAkBD2Fzc2V0SWRUb1N0cmluZwEFB2Fzc2V0SWQFBXByaWNlAQ9jYWxjVG90YWxDcmVkaXQDB2NyZWRpdEEHY3JlZGl0QgxjdXJyZW50UHJpY2UJALcCAgkAvAIDBQdjcmVkaXRBBQxjdXJyZW50UHJpY2UFDG11bHQxOEJpZ0ludAUHY3JlZGl0QgEQY2FsY1RvdGFsQmFsYW5jZQMIYmFsYW5jZUEIYmFsYW5jZUIMY3VycmVudFByaWNlCQC3AgIJALwCAwUIYmFsYW5jZUEFDGN1cnJlbnRQcmljZQUMbXVsdDE4QmlnSW50BQhiYWxhbmNlQgEHY2FsY1BubAIMdG90YWxCYWxhbmNlC3RvdGFsQ3JlZGl0CQC4AgIFDHRvdGFsQmFsYW5jZQULdG90YWxDcmVkaXQBE2NhbGNDcmVkaXRBdmFpbGFibGUDB2RlcG9zaXQIbGV2ZXJhZ2ULdG90YWxDcmVkaXQJALgCAgkAvAIDBQdkZXBvc2l0BQhsZXZlcmFnZQUMbXVsdDE4QmlnSW50BQt0b3RhbENyZWRpdAEQY2FsY1JlYWxJbkNyZWRpdAIGY3JlZGl0B2JhbGFuY2UDCQC/AgIFBmNyZWRpdAUEYmlnMAkAuAICBQZjcmVkaXQFB2JhbGFuY2UFBGJpZzABCGNhbGNGcmVlAgZjcmVkaXQHYmFsYW5jZQMJAL8CAgUGY3JlZGl0BQRiaWcwCQC4AgIFB2JhbGFuY2UFBmNyZWRpdAUEYmlnMAEOY2FsY1Nob3J0UHJpY2UCBGZyZWUMcmVhbEluQ3JlZGl0AwkAvwICBQxyZWFsSW5DcmVkaXQFBGJpZzAJAJgDAQkAzAgCBQRiaWcwCQDMCAIJALwCAwUEZnJlZQUMbXVsdDE4QmlnSW50BQxyZWFsSW5DcmVkaXQFA25pbAUEYmlnMAENY2FsY0xvbmdQcmljZQIEZnJlZQxyZWFsSW5DcmVkaXQDCQC/AgIFDHJlYWxJbkNyZWRpdAUEYmlnMAkAmAMBCQDMCAIFBGJpZzAJAMwIAgkAvAIDBQxyZWFsSW5DcmVkaXQFDG11bHQxOEJpZ0ludAUEZnJlZQUDbmlsBQRiaWcwAQ9jYWxjU3RhcnRNYXJnaW4EDXJlYWxJbkNyZWRpdEENcmVhbEluQ3JlZGl0QgxjdXJyZW50UHJpY2UOc2V0dGluZ3NNYXJnaW4JALwCAwkAtwICCQC8AgMFDXJlYWxJbkNyZWRpdEEFDGN1cnJlbnRQcmljZQUMbXVsdDE4QmlnSW50BQ1yZWFsSW5DcmVkaXRCBQ5zZXR0aW5nc01hcmdpbgUMbXVsdDE4QmlnSW50ARBjYWxjTWFyZ2luU3VwcGx5AxRzZXR0aW5nc01hcmdpblN1cHBseQ5zZXR0aW5nc01hcmdpbgtzdGFydE1hcmdpbgkAvAIDBRRzZXR0aW5nc01hcmdpblN1cHBseQULc3RhcnRNYXJnaW4FDnNldHRpbmdzTWFyZ2luARRjYWxjTGlxdWlkYXRpb25QcmljZQYHZGVwb3NpdAxtYXJnaW5TdXBwbHkNcmVhbEluQ3JlZGl0QQ1yZWFsSW5DcmVkaXRCCnNob3J0UHJpY2UJbG9uZ1ByaWNlBBFsaXF1aWRhdGlvblByaWNlQQMJAGYCBQ1yZWFsSW5DcmVkaXRBAAAJAGQCCQBpAgkAZQIFB2RlcG9zaXQFDG1hcmdpblN1cHBseQUNcmVhbEluQ3JlZGl0QQUKc2hvcnRQcmljZQAABBFsaXF1aWRhdGlvblByaWNlQgMJAGYCBQ1yZWFsSW5DcmVkaXRCAAAJAGUCBQlsb25nUHJpY2UJAGkCCQBlAgUHZGVwb3NpdAUMbWFyZ2luU3VwcGx5CQBpAgUNcmVhbEluQ3JlZGl0QQUJbG9uZ1ByaWNlAAAJAGQCBRFsaXF1aWRhdGlvblByaWNlQQURbGlxdWlkYXRpb25QcmljZUIBGWdldEFzc2V0c0J5QWNjb3VudEFkZHJlc3MBDmFjY291bnRBZGRyZXNzBAlyZXF1ZXN0SWQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkBB3dyYXBFcnIBAhdpbnZhbGlkIGFjY291bnQgYWRkcmVzcwQNYW1vdW50QXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBFWtSZXF1ZXN0QW1vdW50QXNzZXRJZAEFCXJlcXVlc3RJZAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFtb3VudCBhc3NldCBpZAQMcHJpY2VBc3NldElkCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEUa1JlcXVlc3RQcmljZUFzc2V0SWQBBQlyZXF1ZXN0SWQJAQd3cmFwRXJyAQIXaW52YWxpZCBhbW91bnQgcHJpY2UgaWQJAJQKAgUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkCgFpAQRpbml0ARFmYWN0b3J5QWRkcmVzc1N0cgQLY2hlY2tDYWxsZXIJAQhtdXN0VGhpcwEIBQFpBmNhbGxlcgMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQ9rRmFjdG9yeUFkZHJlc3MFEWZhY3RvcnlBZGRyZXNzU3RyBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOcmVxdWVzdEFjY291bnQCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQQYW1vdW50QXNzZXRJZFN0cgkAkQMCBQRhcmdzAAAED3ByaWNlQXNzZXRJZFN0cgkAkQMCBQRhcmdzAAEEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQJcmVxdWVzdElkCQD3AwEJAMsBAgkAywECCAULdXNlckFkZHJlc3MFYnl0ZXMJANkEAQUQYW1vdW50QXNzZXRJZFN0cgkA2QQBBQ9wcmljZUFzc2V0SWRTdHIEDWFtb3VudEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBRBhbW91bnRBc3NldElkU3RyBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ9wcmljZUFzc2V0SWRTdHIEEnVzZXJSZXF1ZXN0c051bWJlcgkAaQIJALECAQkBEGtSZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwUNcXVldWVJdGVtU2l6ZQQGY2hlY2tzCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIVMSBwYXltZW50IGlzIHJlcXVpcmVkCQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0BgkBCHRocm93RXJyAQINaW52YWxpZCBhc3NldAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQEMcmV3YXJkQW1vdW50AAYJAQh0aHJvd0VycgECDmludmFsaWQgYW1vdW50CQDMCAIDCQELcGFpckFsbG93ZWQCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQGCQEIdGhyb3dFcnIBAhNwYWlyIGlzIG5vdCBhbGxvd2VkCQDMCAIDCQAAAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBDmtSZXF1ZXN0U3RhdHVzAQUJcmVxdWVzdElkBQR1bml0BgkBCHRocm93RXJyAQIZYWNjb3VudCBpcyBhbHJlYWR5IGV4aXN0cwkAzAgCAwkAZgIJAQ1hY2NvdW50c0xpbWl0AAUSdXNlclJlcXVlc3RzTnVtYmVyBgkBCHRocm93RXJyAQkArAICAhJhY2NvdW50cyBsaW1pdCBpcyAJAKQDAQkBDWFjY291bnRzTGltaXQABQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDSR0MDEwNzQ3MTIxMDMDCQAAAgkAyAEBCQENYWNjb3VudHNRdWV1ZQAAAAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDmZhY3RvcnlBZGRyZXNzCQEMcmV3YXJkQW1vdW50AAUEdW5pdAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEOa1JlcXVlc3RTdGF0dXMBBQlyZXF1ZXN0SWQJAMwIAgUUUkVRVUVTVF9TVEFUVVNfRU1QVFkFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2JpbmFyeUVudHJ5CQDMCAIJAQ5rUmVxdWVzdHNRdWV1ZQAJAMwIAgkAywECCQENcmVxdWVzdHNRdWV1ZQAFCXJlcXVlc3RJZAUDbmlsBQNuaWwFA25pbAQQYWNjb3VudFB1YmxpY0tleQkAyQECCQENYWNjb3VudHNRdWV1ZQAFDXF1ZXVlSXRlbVNpemUEDmFjY291bnRBZGRyZXNzCQCnCAEFEGFjY291bnRQdWJsaWNLZXkEDmNyZWF0b3JBZGRyZXNzCQCnCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEFDmFjY291bnRBZGRyZXNzCQEHd3JhcEVycgECGmludmFsaWQgY3JlYXRvciBwdWJsaWMga2V5CQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOY3JlYXRvckFkZHJlc3MJAQxyZXdhcmRBbW91bnQABQR1bml0BQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBDmtBY2NvdW50c1F1ZXVlAAkAzAgCCQDKAQIJAQ1hY2NvdW50c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQ5rUmVxdWVzdFN0YXR1cwEFCXJlcXVlc3RJZAkAzAgCBRRSRVFVRVNUX1NUQVRVU19SRUFEWQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBHGtSZXF1ZXN0SWRUb0FjY291bnRQdWJsaWNLZXkBBQlyZXF1ZXN0SWQJAMwIAgUQYWNjb3VudFB1YmxpY0tleQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBGmtBY2NvdW50QWRkcmVzc1RvUmVxdWVzdElkAQUOYWNjb3VudEFkZHJlc3MJAMwIAgkA2AQBBQlyZXF1ZXN0SWQFA25pbAUDbmlsBQNuaWwEB2FjdGlvbnMIBQ0kdDAxMDc0NzEyMTAzAl8xBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDEwNzQ3MTIxMDMCXzIJAJQKAgUHYWN0aW9ucwkAzggCBQ5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEWa1JlcXVlc3RPd25lclB1YmxpY0tleQEFCXJlcXVlc3RJZAkAzAgCBQ9jYWxsZXJQdWJsaWNLZXkFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2JpbmFyeUVudHJ5CQDMCAIJARBrUmVxdWVzdHNCeU93bmVyAQULdXNlckFkZHJlc3MJAMwIAgkAywECCQEPcmVxdWVzdHNCeU93bmVyAQULdXNlckFkZHJlc3MFCXJlcXVlc3RJZAUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBFWtSZXF1ZXN0QW1vdW50QXNzZXRJZAEFCXJlcXVlc3RJZAkAzAgCBRBhbW91bnRBc3NldElkU3RyBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEUa1JlcXVlc3RQcmljZUFzc2V0SWQBBQlyZXF1ZXN0SWQJAMwIAgUPcHJpY2VBc3NldElkU3RyBQNuaWwFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmFkZEFjY291bnQCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQQY3JlYXRvclB1YmxpY0tleQkA2QQBCQCRAwIFBGFyZ3MAAAQQYWNjb3VudFB1YmxpY0tleQUPY2FsbGVyUHVibGljS2V5BA5hY2NvdW50QWRkcmVzcwkApwgBBQ9jYWxsZXJQdWJsaWNLZXkEDmNyZWF0b3JBZGRyZXNzCQCnCAEFEGNyZWF0b3JQdWJsaWNLZXkEBmNoZWNrcwkAzAgCAwkAAAIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJARhrQWNjb3VudENyZWF0b3JQdWJsaWNLZXkBBQ5hY2NvdW50QWRkcmVzcwUEdW5pdAYJAQh0aHJvd0VycgECGWFjY291bnQgaXMgYWxyZWFkeSBleGlzdHMJAMwIAgMEByRtYXRjaDAJAPEHAQUOYWNjb3VudEFkZHJlc3MDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkAAAIFAWIJAPEVAQkBDWFjY291bnRTY3JpcHQABwYJAQh0aHJvd0VycgECDmludmFsaWQgc2NyaXB0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDSR0MDEzMzU4MTQzNjADCQAAAgkAyAEBCQENcmVxdWVzdHNRdWV1ZQAAAAkAlAoCBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBDmtBY2NvdW50c1F1ZXVlAAkAzAgCCQDLAQIJAQ1hY2NvdW50c1F1ZXVlAAUQYWNjb3VudFB1YmxpY0tleQUDbmlsBQNuaWwFA25pbAQJcmVxdWVzdElkCQDJAQIJAQ1yZXF1ZXN0c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQkAlAoCBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQ5rUmVxdWVzdFN0YXR1cwEFCXJlcXVlc3RJZAkAzAgCBRRSRVFVRVNUX1NUQVRVU19SRUFEWQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBHGtSZXF1ZXN0SWRUb0FjY291bnRQdWJsaWNLZXkBBQlyZXF1ZXN0SWQJAMwIAgUQYWNjb3VudFB1YmxpY0tleQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBDmtSZXF1ZXN0c1F1ZXVlAAkAzAgCCQDKAQIJAQ1yZXF1ZXN0c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBGmtBY2NvdW50QWRkcmVzc1RvUmVxdWVzdElkAQUOYWNjb3VudEFkZHJlc3MJAMwIAgkA2AQBBQlyZXF1ZXN0SWQFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDXRyYW5zZmVyV2F2ZXMJAMwIAggFDmNyZWF0b3JBZGRyZXNzBWJ5dGVzCQDMCAIJAQxyZXdhcmRBbW91bnQABQNuaWwFA25pbAUDbmlsBAdhY3Rpb25zCAUNJHQwMTMzNTgxNDM2MAJfMQQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAxMzM1ODE0MzYwAl8yCQCUCgIFB2FjdGlvbnMJAM4IAgUOZmFjdG9yeUFjdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEFDmFjY291bnRBZGRyZXNzCQDMCAIFEGNyZWF0b3JQdWJsaWNLZXkFA25pbAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHZGVwb3NpdAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIVMSBwYXltZW50IGlzIHJlcXVpcmVkCQDMCAIDCQAAAggFB3BheW1lbnQHYXNzZXRJZAULdXNkdEFzc2V0SWQGCQEIdGhyb3dFcnIBAg1pbnZhbGlkIGFzc2V0BQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEDmFjY291bnRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQRhcmdzAAAJAQd3cmFwRXJyAQIXaW52YWxpZCBhY2NvdW50IGFkZHJlc3MEB2FjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOYWNjb3VudEFkZHJlc3MIBQdwYXltZW50BmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAUDbmlsBA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBCmtEZXBvc2l0ZWQBBQ5hY2NvdW50QWRkcmVzcwkAzAgCCQBkAgkBC3ZhbHVlT3JFbHNlAgkBD2RlcG9zaXRlZE9wdGlvbgEFDmFjY291bnRBZGRyZXNzAAAIBQdwYXltZW50BmFtb3VudAUDbmlsBQNuaWwFA25pbAkAlAoCBQdhY3Rpb25zBQ5mYWN0b3J5QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBAt1c2VyQWRkcmVzcwkApwgBBQ9jYWxsZXJQdWJsaWNLZXkEDmFjY291bnRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQRhcmdzAAAJAQd3cmFwRXJyAQIXaW52YWxpZCBhY2NvdW50IGFkZHJlc3MEBmFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUEYXJncwABCQEHd3JhcEVycgECDmludmFsaWQgYW1vdW50BAdhc3NldElkCQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAIEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOYWNjb3VudEFkZHJlc3MCDXRyYW5zZmVyQXNzZXQJAMwIAggFC3VzZXJBZGRyZXNzBWJ5dGVzCQDMCAIFBmFtb3VudAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAULaW52b2NhdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGYm9ycm93Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyBQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEDmFjY291bnRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQRhcmdzAAAJAQd3cmFwRXJyAQIXaW52YWxpZCBhY2NvdW50IGFkZHJlc3MEB2Fzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFBGFyZ3MAAQQJYW1vdW50UmF3CQC2CQEJAJEDAgUEYXJncwACBA0kdDAxNjQzNTE2NTEyCQEZZ2V0QXNzZXRzQnlBY2NvdW50QWRkcmVzcwEFDmFjY291bnRBZGRyZXNzBA1hbW91bnRBc3NldElkCAUNJHQwMTY0MzUxNjUxMgJfMQQMcHJpY2VBc3NldElkCAUNJHQwMTY0MzUxNjUxMgJfMgQJZGVwb3NpdGVkCQEFdG9YMTgCCQELdmFsdWVPckVsc2UCCQEPZGVwb3NpdGVkT3B0aW9uAQUOYWNjb3VudEFkZHJlc3MAAAkBDXBvdzEwRGVjaW1hbHMBBQxwcmljZUFzc2V0SWQEDGN1cnJlbnRQcmljZQkBBXRvWDE4AgkBD2dldEN1cnJlbnRQcmljZQEFDWFtb3VudEFzc2V0SWQJAQ1wb3cxMERlY2ltYWxzAQULdXNkdEFzc2V0SWQEB2NyZWRpdEEJAQV0b1gxOAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQdrQ3JlZGl0AgUOYWNjb3VudEFkZHJlc3MFDWFtb3VudEFzc2V0SWQAAAkBDXBvdzEwRGVjaW1hbHMBBQ1hbW91bnRBc3NldElkBAdjcmVkaXRCCQEFdG9YMTgCCQELdmFsdWVPckVsc2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEHa0NyZWRpdAIFDmFjY291bnRBZGRyZXNzBQxwcmljZUFzc2V0SWQAAAkBDXBvdzEwRGVjaW1hbHMBBQxwcmljZUFzc2V0SWQEC3RvdGFsQ3JlZGl0CQEPY2FsY1RvdGFsQ3JlZGl0AwUHY3JlZGl0QQUHY3JlZGl0QgUMY3VycmVudFByaWNlBA9sZXZlcmFnZURlZmF1bHQAAwQIbGV2ZXJhZ2UJAQV0b1gxOAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQlrTGV2ZXJhZ2UBBQ5hY2NvdW50QWRkcmVzcwUPbGV2ZXJhZ2VEZWZhdWx0AAEED2NyZWRpdEF2YWlsYWJsZQkBE2NhbGNDcmVkaXRBdmFpbGFibGUDBQlkZXBvc2l0ZWQFCGxldmVyYWdlBQt0b3RhbENyZWRpdAkAlAoCBQNuaWwJAMwIAgkBB2Zyb21YMTgCBQ9jcmVkaXRBdmFpbGFibGUJAQ1wb3cxMERlY2ltYWxzAQUMcHJpY2VBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQc2V0UGFpckFsbG93YW5jZQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgkAzAgCCQEJbXVzdEFkbWluAQUPY2FsbGVyUHVibGljS2V5BQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEEGFtb3VudEFzc2V0SWRTdHIJAJEDAgUEYXJncwAABA9wcmljZUFzc2V0SWRTdHIJAJEDAgUEYXJncwABBAhhbGxvd1N0cgkAkQMCBQRhcmdzAAIEDWFtb3VudEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBRBhbW91bnRBc3NldElkU3RyBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBBQ9wcmljZUFzc2V0SWRTdHIEBWFsbG93CQAAAgUIYWxsb3dTdHICBHRydWUEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGJvb2xlYW5FbnRyeQkAzAgCCQEMa1BhaXJBbGxvd2VkAgUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkCQDMCAIFBWFsbG93BQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAULaW52b2NhdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERYWRkU3ludGhldGljQXNzZXQCD2NhbGxlclB1YmxpY0tleQRhcmdzBA5iYXNlQXNzZXRJZFN0cgkAkQMCBQRhcmdzAAAEC2Jhc2VBc3NldElkCQEMcGFyc2VBc3NldElkAQUOYmFzZUFzc2V0SWRTdHIEEHN5bnRoZXRpY0Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIJAQltdXN0QWRtaW4BBQ9jYWxsZXJQdWJsaWNLZXkJAMwIAgMJAAACCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQERa1N5bnRoZXRpY0Fzc2V0SWQBBQtiYXNlQXNzZXRJZAUEdW5pdAYJAQh0aHJvd0VycgECEmludmFsaWQgYmFzZSBhc3NldAkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECEGludmFsaWQgcGF5bWVudHMJAMwIAgMJAAACCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEMa0Jhc2VBc3NldElkAQUQc3ludGhldGljQXNzZXRJZAUEdW5pdAYJAQh0aHJvd0VycgECF2ludmFsaWQgc3ludGhldGljIGFzc2V0BQNuaWwDCQAAAgUGY2tlY2tzBQZja2Vja3MEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJARFrU3ludGhldGljQXNzZXRJZAEFC2Jhc2VBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBRBzeW50aGV0aWNBc3NldElkBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEMa0Jhc2VBc3NldElkAQUQc3ludGhldGljQXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQULYmFzZUFzc2V0SWQFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpkb1NodXRkb3duAg9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2hlY2tzCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgkAzAgCCQEJbXVzdEFkbWluAQUPY2FsbGVyUHVibGljS2V5BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGJvb2xlYW5FbnRyeQkAzAgCBQlrU2h1dGRvd24JAMwIAgYFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQADAwkBCWlzRGVmaW5lZAEFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEJaXNEZWZpbmVkAQkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnBwQHJG1hdGNoMAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAECXN0YXR1c0tleQkBB2tTdGF0dXMCCQClCAEFBHRoaXMJANgEAQgFAnR4AmlkBAZzdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcFCXN0YXR1c0tleQcFBnN0YXR1cwcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkQm8b/", "height": 3106994, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 59XkgwYmq5mHKfEiwAkDae3jNdFQgF8gfUfxuAgAXJf8 Next: CD5g85vYA2m5vvcK62RtTKu1afc3XFYE1UFzpK4KHEit Diff:
Old | New | Differences | |
---|---|---|---|
21 | 21 | ||
22 | 22 | let j = 32 | |
23 | 23 | ||
24 | - | let k = | |
24 | + | let k = toBigInt(0) | |
25 | 25 | ||
26 | - | func l (m,n) = makeString(["%s__status", m, n], a) | |
26 | + | let l = "%s__multisig" | |
27 | + | ||
28 | + | func m (n,o) = makeString(["%s__status", n, o], a) | |
27 | 29 | ||
28 | 30 | ||
29 | - | let | |
31 | + | let p = "%s__shutdown" | |
30 | 32 | ||
31 | - | let | |
33 | + | let q = "%s__publicKeys" | |
32 | 34 | ||
33 | - | let | |
35 | + | let r = "%s__matcherPublicKey" | |
34 | 36 | ||
35 | - | func | |
37 | + | func s (t,u) = fraction(toBigInt(t), f, toBigInt(u)) | |
36 | 38 | ||
37 | 39 | ||
38 | - | func | |
40 | + | func v (w,x) = toInt(fraction(w, toBigInt(x), f)) | |
39 | 41 | ||
40 | 42 | ||
41 | - | func | |
43 | + | func y (z) = isDefined(addressFromString(z)) | |
42 | 44 | ||
43 | 45 | ||
44 | - | func | |
46 | + | func A (B) = ((d + ": ") + B) | |
45 | 47 | ||
46 | 48 | ||
47 | - | func | |
49 | + | func C (B) = throw(A(B)) | |
48 | 50 | ||
49 | 51 | ||
50 | - | func | |
52 | + | func D (E) = if ((E == i)) | |
51 | 53 | then unit | |
52 | - | else fromBase58String( | |
54 | + | else fromBase58String(E) | |
53 | 55 | ||
54 | 56 | ||
55 | - | func | |
57 | + | func F (E) = if ((E == unit)) | |
56 | 58 | then i | |
57 | - | else toBase58String(value( | |
59 | + | else toBase58String(value(E)) | |
58 | 60 | ||
59 | 61 | ||
60 | - | ||
62 | + | func G (H) = valueOrErrorMessage(assetInfo(H), A("invalid asset info")) | |
61 | 63 | ||
62 | - | let G = { | |
63 | - | let H = getString(this, F) | |
64 | - | if ($isInstanceOf(H, "String")) | |
64 | + | ||
65 | + | func I (H) = { | |
66 | + | let J = H | |
67 | + | if ($isInstanceOf(J, "Unit")) | |
68 | + | then g | |
69 | + | else if ($isInstanceOf(J, "ByteVector")) | |
70 | + | then { | |
71 | + | let H = J | |
72 | + | G(H).decimals | |
73 | + | } | |
74 | + | else throw("Match error") | |
75 | + | } | |
76 | + | ||
77 | + | ||
78 | + | func K (L) = pow(10, 0, L, 0, 0, DOWN) | |
79 | + | ||
80 | + | ||
81 | + | func M (H) = K(I(H)) | |
82 | + | ||
83 | + | ||
84 | + | let N = "%s__factoryAddress" | |
85 | + | ||
86 | + | let O = { | |
87 | + | let J = getString(this, N) | |
88 | + | if ($isInstanceOf(J, "String")) | |
65 | 89 | then { | |
66 | - | let | |
67 | - | addressFromString( | |
90 | + | let B = J | |
91 | + | addressFromString(B) | |
68 | 92 | } | |
69 | - | else if ($isInstanceOf( | |
93 | + | else if ($isInstanceOf(J, "Unit")) | |
70 | 94 | then unit | |
71 | 95 | else throw("Match error") | |
72 | 96 | } | |
73 | 97 | ||
74 | - | let | |
98 | + | let P = valueOrErrorMessage(O, A("invalid factory address")) | |
75 | 99 | ||
76 | - | let | |
100 | + | let Q = "%s__usdtAssetId" | |
77 | 101 | ||
78 | - | let | |
79 | - | let | |
80 | - | if ($isInstanceOf( | |
102 | + | let R = { | |
103 | + | let J = getString(this, Q) | |
104 | + | if ($isInstanceOf(J, "String")) | |
81 | 105 | then { | |
82 | - | let | |
83 | - | | |
106 | + | let B = J | |
107 | + | D(B) | |
84 | 108 | } | |
85 | - | else if ($isInstanceOf( | |
109 | + | else if ($isInstanceOf(J, "Unit")) | |
86 | 110 | then unit | |
87 | 111 | else throw("Match error") | |
88 | 112 | } | |
89 | 113 | ||
90 | - | let | |
114 | + | let S = valueOrErrorMessage(R, A("invalid usdt asset id")) | |
91 | 115 | ||
92 | - | let | |
116 | + | let T = "%s__calculatorAddress" | |
93 | 117 | ||
94 | - | let | |
118 | + | let U = valueOrElse(getBoolean(P, p), false) | |
95 | 119 | ||
96 | - | func | |
120 | + | func V (W,z) = if ((W == z)) | |
97 | 121 | then true | |
98 | - | else | |
122 | + | else C("permission denied") | |
99 | 123 | ||
100 | 124 | ||
101 | - | func | |
125 | + | func X (W) = V(W, this) | |
102 | 126 | ||
103 | 127 | ||
104 | - | func | |
128 | + | func Y (W) = V(W, P) | |
105 | 129 | ||
106 | 130 | ||
107 | - | func | |
108 | - | let | |
109 | - | let | |
110 | - | if (containsElement( | |
131 | + | func Z (aa) = { | |
132 | + | let ab = addressFromStringValue(getStringValue(P, l)) | |
133 | + | let ac = split(getStringValue(ab, q), a) | |
134 | + | if (containsElement(ac, toBase58String(aa))) | |
111 | 135 | then true | |
112 | - | else | |
136 | + | else C("not allowed") | |
113 | 137 | } | |
114 | 138 | ||
115 | 139 | ||
116 | - | let | |
140 | + | let ad = "%s__accountScript" | |
117 | 141 | ||
118 | - | func | |
142 | + | func ae () = valueOrErrorMessage(getBinary(P, ad), A("account script is not set")) | |
119 | 143 | ||
120 | 144 | ||
121 | - | let | |
145 | + | let af = "%s__rewardAmount" | |
122 | 146 | ||
123 | - | func | |
147 | + | func ag () = valueOrErrorMessage(getInteger(P, af), A("reward amount is not set")) | |
124 | 148 | ||
125 | 149 | ||
126 | - | let | |
150 | + | let ah = "%s__accountsLimit" | |
127 | 151 | ||
128 | - | let | |
152 | + | let ai = 20 | |
129 | 153 | ||
130 | - | func | |
154 | + | func aj () = valueOrElse(getInteger(P, ah), ai) | |
131 | 155 | ||
132 | 156 | ||
133 | - | func | |
157 | + | func ak (al) = makeString(["%s%s", "deposited", toString(al)], a) | |
134 | 158 | ||
135 | 159 | ||
136 | - | func | |
160 | + | func am (al) = getInteger(P, ak(al)) | |
137 | 161 | ||
138 | 162 | ||
139 | - | func | |
163 | + | func an (al,H) = makeString(["%s%s%s", "credit", toString(al), F(H)], a) | |
140 | 164 | ||
141 | 165 | ||
142 | - | func | |
166 | + | func ao (al) = makeString(["%s%s", "leverage", toString(al)], a) | |
143 | 167 | ||
144 | 168 | ||
145 | - | func | |
169 | + | func ap (aq) = makeString(["%s%s", "syntheticAssetId", F(aq)], a) | |
146 | 170 | ||
147 | 171 | ||
148 | - | func | |
172 | + | func ar (as) = makeString(["%s%s", "baseAssetId", F(as)], a) | |
149 | 173 | ||
150 | 174 | ||
151 | - | let | |
175 | + | let at = 0 | |
152 | 176 | ||
153 | - | let | |
177 | + | let au = 1 | |
154 | 178 | ||
155 | - | func | |
179 | + | func av (aw) = makeString(["%s%s", toBase58String(aw), "status"], a) | |
156 | 180 | ||
157 | 181 | ||
158 | - | func | |
182 | + | func ax (al) = makeString(["%s%s", toString(al), "creatorPublicKey"], a) | |
159 | 183 | ||
160 | 184 | ||
161 | - | func | |
185 | + | func ay (aw) = makeString(["%s%s", toBase58String(aw), "ownerPublicKey"], a) | |
162 | 186 | ||
163 | 187 | ||
164 | - | func | |
188 | + | func az (aw) = makeString(["%s%s", toBase58String(aw), "amountAssetId"], a) | |
165 | 189 | ||
166 | 190 | ||
167 | - | func | |
191 | + | func aA (aw) = makeString(["%s%s", toBase58String(aw), "priceAssetId"], a) | |
168 | 192 | ||
169 | 193 | ||
170 | - | func | |
194 | + | func aB (aw) = makeString(["%s%s", toBase58String(aw), "requestIdToAccountPublicKey"], a) | |
171 | 195 | ||
172 | 196 | ||
173 | - | func | |
197 | + | func aC (al) = makeString(["%s%s", toString(al), "accountAddressToRequestId"], a) | |
174 | 198 | ||
175 | 199 | ||
176 | - | func | |
200 | + | func aD () = makeString(["%s", "requestsQueue"], a) | |
177 | 201 | ||
178 | 202 | ||
179 | - | func | |
203 | + | func aE () = valueOrElse(getBinary(P, aD()), base58'') | |
180 | 204 | ||
181 | 205 | ||
182 | - | func | |
206 | + | func aF () = makeString(["%s", "accountsQueue"], a) | |
183 | 207 | ||
184 | 208 | ||
185 | - | func | |
209 | + | func aG () = valueOrElse(getBinary(P, aF()), base58'') | |
186 | 210 | ||
187 | 211 | ||
188 | - | func | |
212 | + | func aH (aI) = makeString(["%s%s", "requests", toString(aI)], a) | |
189 | 213 | ||
190 | 214 | ||
191 | - | func | |
215 | + | func aJ (aI) = valueOrElse(getBinary(P, aH(aI)), base58'') | |
192 | 216 | ||
193 | 217 | ||
194 | - | func | |
218 | + | func aK (aL,aM) = makeString(["%s%s%s", F(aL), F(aM), "pairAllowed"], a) | |
195 | 219 | ||
196 | 220 | ||
197 | - | func | |
221 | + | func aN (aL,aM) = valueOrElse(getBoolean(P, aK(aL, aM)), false) | |
198 | 222 | ||
199 | 223 | ||
200 | - | func | |
224 | + | func aO (H) = makeString(["%s", F(H)], a) | |
201 | 225 | ||
202 | 226 | ||
203 | - | func | |
204 | - | let | |
205 | - | let | |
206 | - | let | |
207 | - | | |
227 | + | func aP (H) = { | |
228 | + | let aQ = fromBase58String(valueOrErrorMessage(getString(P, r), A("invalid matcher public key"))) | |
229 | + | let aR = addressFromPublicKey(aQ) | |
230 | + | let aS = valueOrErrorMessage(getInteger(aR, aO(H)), A(("invalid price, assetId = " + F(H)))) | |
231 | + | aS | |
208 | 232 | } | |
209 | 233 | ||
210 | 234 | ||
211 | - | func | |
235 | + | func aT (aU,aV,aW) = (fraction(aU, aW, f) + aV) | |
212 | 236 | ||
213 | 237 | ||
214 | - | func | |
238 | + | func aX (aY,aZ,aW) = (fraction(aY, aW, f) + aZ) | |
215 | 239 | ||
216 | 240 | ||
217 | - | func | |
241 | + | func ba (bb,bc) = (bb - bc) | |
218 | 242 | ||
219 | 243 | ||
220 | - | func | |
244 | + | func bd (be,bf,bc) = (fraction(be, bf, f) - bc) | |
221 | 245 | ||
222 | 246 | ||
223 | - | func | |
224 | - | then ( | |
225 | - | else | |
247 | + | func bg (bh,bi) = if ((bh > k)) | |
248 | + | then (bh - bi) | |
249 | + | else k | |
226 | 250 | ||
227 | 251 | ||
228 | - | func | |
229 | - | then ( | |
230 | - | else | |
252 | + | func bj (bh,bi) = if ((bh > k)) | |
253 | + | then (bi - bh) | |
254 | + | else k | |
231 | 255 | ||
232 | 256 | ||
233 | - | func | |
234 | - | then max([ | |
235 | - | else | |
257 | + | func bk (bl,bm) = if ((bm > k)) | |
258 | + | then max([k, fraction(bl, f, bm)]) | |
259 | + | else k | |
236 | 260 | ||
237 | 261 | ||
238 | - | func | |
239 | - | then max([ | |
240 | - | else | |
262 | + | func bn (bl,bm) = if ((bm > k)) | |
263 | + | then max([k, fraction(bm, f, bl)]) | |
264 | + | else k | |
241 | 265 | ||
242 | 266 | ||
243 | - | func | |
267 | + | func bo (bp,bq,aW,br) = fraction((fraction(bp, aW, f) + bq), br, f) | |
244 | 268 | ||
245 | 269 | ||
246 | - | func | |
270 | + | func bs (bt,br,bu) = fraction(bt, bu, br) | |
247 | 271 | ||
248 | 272 | ||
249 | - | func | |
250 | - | let | |
251 | - | then ((( | |
273 | + | func bv (be,bw,bp,bq,bx,by) = { | |
274 | + | let bz = if ((bp > 0)) | |
275 | + | then (((be - bw) / bp) + bx) | |
252 | 276 | else 0 | |
253 | - | let | |
254 | - | then ( | |
277 | + | let bA = if ((bq > 0)) | |
278 | + | then (by - ((be - bw) / (bp / by))) | |
255 | 279 | else 0 | |
256 | - | ( | |
280 | + | (bz + bA) | |
257 | 281 | } | |
258 | 282 | ||
259 | 283 | ||
260 | - | func | |
261 | - | let | |
262 | - | let | |
263 | - | let | |
264 | - | $Tuple2( | |
284 | + | func bB (al) = { | |
285 | + | let aw = fromBase58String(valueOrErrorMessage(getString(P, aC(al)), A("invalid account address"))) | |
286 | + | let aL = D(valueOrErrorMessage(getString(P, az(aw)), A("invalid amount asset id"))) | |
287 | + | let aM = D(valueOrErrorMessage(getString(P, aA(aw)), A("invalid amount price id"))) | |
288 | + | $Tuple2(aL, aM) | |
265 | 289 | } | |
266 | 290 | ||
267 | 291 | ||
268 | - | @Callable( | |
269 | - | func init ( | |
270 | - | let | |
271 | - | if (( | |
272 | - | then $Tuple2([StringEntry( | |
292 | + | @Callable(bC) | |
293 | + | func init (bD) = { | |
294 | + | let bE = X(bC.caller) | |
295 | + | if ((bE == bE)) | |
296 | + | then $Tuple2([StringEntry(N, bD)], unit) | |
273 | 297 | else throw("Strict value is not equal to itself.") | |
274 | 298 | } | |
275 | 299 | ||
276 | 300 | ||
277 | 301 | ||
278 | - | @Callable( | |
279 | - | func requestAccount ( | |
280 | - | let | |
302 | + | @Callable(bC) | |
303 | + | func requestAccount (aa,bF) = { | |
304 | + | let bG = [if (!(U)) | |
281 | 305 | then true | |
282 | - | else | |
283 | - | if (( | |
306 | + | else C("not allowed"), Y(bC.caller)] | |
307 | + | if ((bG == bG)) | |
284 | 308 | then { | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | let | |
289 | - | let | |
290 | - | let | |
291 | - | let | |
292 | - | let | |
309 | + | let bH = bF[0] | |
310 | + | let bI = bF[1] | |
311 | + | let bJ = addressFromPublicKey(aa) | |
312 | + | let aw = sha256(((bJ.bytes + fromBase58String(bH)) + fromBase58String(bI))) | |
313 | + | let aL = D(bH) | |
314 | + | let aM = D(bI) | |
315 | + | let bK = (size(aH(bJ)) / j) | |
316 | + | let bL = [if ((size(bC.payments) == 1)) | |
293 | 317 | then true | |
294 | - | else | |
318 | + | else C("1 payment is required"), if ((bC.payments[0].assetId == unit)) | |
295 | 319 | then true | |
296 | - | else | |
320 | + | else C("invalid asset"), if ((bC.payments[0].amount == ag())) | |
297 | 321 | then true | |
298 | - | else | |
322 | + | else C("invalid amount"), if (aN(aL, aM)) | |
299 | 323 | then true | |
300 | - | else | |
324 | + | else C("pair is not allowed"), if ((getInteger(P, av(aw)) == unit)) | |
301 | 325 | then true | |
302 | - | else | |
326 | + | else C("account is already exists"), if ((aj() > bK)) | |
303 | 327 | then true | |
304 | - | else | |
305 | - | if (( | |
328 | + | else C(("accounts limit is " + toString(aj())))] | |
329 | + | if ((bL == bL)) | |
306 | 330 | then { | |
307 | - | let | |
308 | - | then $Tuple2([ScriptTransfer( | |
331 | + | let bM = if ((size(aG()) == 0)) | |
332 | + | then $Tuple2([ScriptTransfer(P, ag(), unit)], [invoke(P, "integerEntry", [av(aw), at], nil), invoke(P, "binaryEntry", [aD(), (aE() + aw)], nil)]) | |
309 | 333 | else { | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | $Tuple2([ScriptTransfer( | |
334 | + | let bN = take(aG(), j) | |
335 | + | let al = addressFromPublicKey(bN) | |
336 | + | let bO = addressFromPublicKey(valueOrErrorMessage(getBinary(P, ax(al)), A("invalid creator public key"))) | |
337 | + | $Tuple2([ScriptTransfer(bO, ag(), unit)], [invoke(P, "binaryEntry", [aF(), drop(aG(), j)], nil), invoke(P, "integerEntry", [av(aw), au], nil), invoke(P, "binaryEntry", [aB(aw), bN], nil), invoke(P, "stringEntry", [aC(al), toBase58String(aw)], nil)]) | |
314 | 338 | } | |
315 | - | let | |
316 | - | let | |
317 | - | $Tuple2( | |
339 | + | let bP = bM._1 | |
340 | + | let bQ = bM._2 | |
341 | + | $Tuple2(bP, (bQ ++ [invoke(P, "binaryEntry", [ay(aw), aa], nil), invoke(P, "binaryEntry", [aH(bJ), (aJ(bJ) + aw)], nil), invoke(P, "stringEntry", [az(aw), bH], nil), invoke(P, "stringEntry", [aA(aw), bI], nil)])) | |
318 | 342 | } | |
319 | 343 | else throw("Strict value is not equal to itself.") | |
320 | 344 | } | |
323 | 347 | ||
324 | 348 | ||
325 | 349 | ||
326 | - | @Callable( | |
327 | - | func addAccount ( | |
328 | - | let | |
350 | + | @Callable(bC) | |
351 | + | func addAccount (aa,bF) = { | |
352 | + | let bG = [if (!(U)) | |
329 | 353 | then true | |
330 | - | else | |
331 | - | if (( | |
354 | + | else C("not allowed"), Y(bC.caller)] | |
355 | + | if ((bG == bG)) | |
332 | 356 | then { | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | let | |
337 | - | let | |
357 | + | let bR = fromBase58String(bF[0]) | |
358 | + | let bN = aa | |
359 | + | let al = addressFromPublicKey(aa) | |
360 | + | let bO = addressFromPublicKey(bR) | |
361 | + | let bL = [if ((getBinary(P, ax(al)) == unit)) | |
338 | 362 | then true | |
339 | - | else | |
340 | - | let | |
341 | - | if ($isInstanceOf( | |
363 | + | else C("account is already exists"), if ({ | |
364 | + | let J = scriptHash(al) | |
365 | + | if ($isInstanceOf(J, "ByteVector")) | |
342 | 366 | then { | |
343 | - | let | |
344 | - | ( | |
367 | + | let bS = J | |
368 | + | (bS == blake2b256_32Kb(ae())) | |
345 | 369 | } | |
346 | 370 | else false | |
347 | 371 | }) | |
348 | 372 | then true | |
349 | - | else | |
350 | - | if (( | |
373 | + | else C("invalid script")] | |
374 | + | if ((bL == bL)) | |
351 | 375 | then { | |
352 | - | let | |
353 | - | then $Tuple2(nil, [invoke( | |
376 | + | let bT = if ((size(aE()) == 0)) | |
377 | + | then $Tuple2(nil, [invoke(P, "binaryEntry", [aF(), (aG() + bN)], nil)]) | |
354 | 378 | else { | |
355 | - | let | |
356 | - | $Tuple2(nil, [invoke( | |
379 | + | let aw = take(aE(), j) | |
380 | + | $Tuple2(nil, [invoke(P, "integerEntry", [av(aw), au], nil), invoke(P, "binaryEntry", [aB(aw), bN], nil), invoke(P, "binaryEntry", [aD(), drop(aE(), j)], nil), invoke(P, "stringEntry", [aC(al), toBase58String(aw)], nil), invoke(P, "transferWaves", [bO.bytes, ag()], nil)]) | |
357 | 381 | } | |
358 | - | let | |
359 | - | let | |
360 | - | $Tuple2( | |
382 | + | let bP = bT._1 | |
383 | + | let bQ = bT._2 | |
384 | + | $Tuple2(bP, (bQ ++ [invoke(P, "binaryEntry", [ax(al), bR], nil)])) | |
361 | 385 | } | |
362 | 386 | else throw("Strict value is not equal to itself.") | |
363 | 387 | } | |
366 | 390 | ||
367 | 391 | ||
368 | 392 | ||
369 | - | @Callable( | |
370 | - | func deposit ( | |
371 | - | let | |
372 | - | let | |
393 | + | @Callable(bC) | |
394 | + | func deposit (aa,bF) = { | |
395 | + | let bU = bC.payments[0] | |
396 | + | let bG = [if (!(U)) | |
373 | 397 | then true | |
374 | - | else | |
398 | + | else C("not allowed"), Y(bC.caller), if ((size(bC.payments) == 1)) | |
375 | 399 | then true | |
376 | - | else | |
400 | + | else C("1 payment is required"), if ((bU.assetId == S)) | |
377 | 401 | then true | |
378 | - | else | |
379 | - | if (( | |
402 | + | else C("invalid asset")] | |
403 | + | if ((bG == bG)) | |
380 | 404 | then { | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | $Tuple2( | |
405 | + | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
406 | + | let bP = [ScriptTransfer(al, bU.amount, bU.assetId)] | |
407 | + | let bQ = [invoke(P, "integerEntry", [ak(al), (valueOrElse(am(al), 0) + bU.amount)], nil)] | |
408 | + | $Tuple2(bP, bQ) | |
385 | 409 | } | |
386 | 410 | else throw("Strict value is not equal to itself.") | |
387 | 411 | } | |
388 | 412 | ||
389 | 413 | ||
390 | 414 | ||
391 | - | @Callable( | |
392 | - | func withdraw ( | |
393 | - | let | |
415 | + | @Callable(bC) | |
416 | + | func withdraw (aa,bF) = { | |
417 | + | let bG = [if (!(U)) | |
394 | 418 | then true | |
395 | - | else | |
396 | - | if (( | |
419 | + | else C("not allowed"), Y(bC.caller)] | |
420 | + | if ((bG == bG)) | |
397 | 421 | then { | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | $Tuple2(nil, | |
422 | + | let bJ = addressFromPublicKey(aa) | |
423 | + | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
424 | + | let bV = valueOrErrorMessage(parseInt(bF[1]), A("invalid amount")) | |
425 | + | let H = D(bF[2]) | |
426 | + | let bW = [invoke(al, "transferAsset", [bJ.bytes, bV, H], nil)] | |
427 | + | $Tuple2(nil, bW) | |
404 | 428 | } | |
405 | 429 | else throw("Strict value is not equal to itself.") | |
406 | 430 | } | |
407 | 431 | ||
408 | 432 | ||
409 | 433 | ||
410 | - | @Callable( | |
411 | - | func borrow ( | |
412 | - | let | |
434 | + | @Callable(bC) | |
435 | + | func borrow (aa,bF) = { | |
436 | + | let bG = [if (!(U)) | |
413 | 437 | then true | |
414 | - | else | |
415 | - | if (( | |
438 | + | else C("not allowed"), Y(bC.caller)] | |
439 | + | if ((bG == bG)) | |
416 | 440 | then { | |
417 | - | let | |
418 | - | let | |
419 | - | let | |
420 | - | let | |
421 | - | let | |
422 | - | let | |
423 | - | let | |
424 | - | let | |
425 | - | let | |
426 | - | let | |
427 | - | let | |
428 | - | let | |
429 | - | let | |
430 | - | let | |
431 | - | $Tuple2(nil, [ | |
441 | + | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
442 | + | let H = D(bF[1]) | |
443 | + | let bX = parseInt(bF[2]) | |
444 | + | let bY = bB(al) | |
445 | + | let aL = bY._1 | |
446 | + | let aM = bY._2 | |
447 | + | let bZ = s(valueOrElse(am(al), 0), M(aM)) | |
448 | + | let aW = s(aP(aL), M(S)) | |
449 | + | let aU = s(valueOrElse(getInteger(P, an(al, aL)), 0), M(aL)) | |
450 | + | let aV = s(valueOrElse(getInteger(P, an(al, aM)), 0), M(aM)) | |
451 | + | let bc = aT(aU, aV, aW) | |
452 | + | let ca = 3 | |
453 | + | let bf = s(valueOrElse(getInteger(P, ao(al)), ca), 1) | |
454 | + | let cb = bd(bZ, bf, bc) | |
455 | + | $Tuple2(nil, [v(cb, M(aM))]) | |
432 | 456 | } | |
433 | 457 | else throw("Strict value is not equal to itself.") | |
434 | 458 | } | |
435 | 459 | ||
436 | 460 | ||
437 | 461 | ||
438 | - | @Callable( | |
439 | - | func repay ( | |
440 | - | let | |
462 | + | @Callable(bC) | |
463 | + | func repay (aa,bF) = { | |
464 | + | let bG = [if (!(U)) | |
441 | 465 | then true | |
442 | - | else | |
443 | - | if (( | |
466 | + | else C("not allowed"), Y(bC.caller)] | |
467 | + | if ((bG == bG)) | |
444 | 468 | then $Tuple2(nil, unit) | |
445 | 469 | else throw("Strict value is not equal to itself.") | |
446 | 470 | } | |
447 | 471 | ||
448 | 472 | ||
449 | 473 | ||
450 | - | @Callable( | |
451 | - | func setPairAllowance ( | |
452 | - | let | |
474 | + | @Callable(bC) | |
475 | + | func setPairAllowance (aa,bF) = { | |
476 | + | let bG = [if (!(U)) | |
453 | 477 | then true | |
454 | - | else | |
455 | - | if (( | |
478 | + | else C("not allowed"), Y(bC.caller), Z(aa)] | |
479 | + | if ((bG == bG)) | |
456 | 480 | then { | |
457 | - | let | |
458 | - | let | |
459 | - | let | |
460 | - | let | |
461 | - | let | |
462 | - | let | |
463 | - | let | |
464 | - | $Tuple2(nil, | |
481 | + | let bH = bF[0] | |
482 | + | let bI = bF[1] | |
483 | + | let cc = bF[2] | |
484 | + | let aL = D(bH) | |
485 | + | let aM = D(bI) | |
486 | + | let cd = (cc == "true") | |
487 | + | let bW = [invoke(P, "booleanEntry", [aK(aL, aM), cd], nil)] | |
488 | + | $Tuple2(nil, bW) | |
465 | 489 | } | |
466 | 490 | else throw("Strict value is not equal to itself.") | |
467 | 491 | } | |
468 | 492 | ||
469 | 493 | ||
470 | 494 | ||
471 | - | @Callable( | |
472 | - | func addSyntheticAsset ( | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
495 | + | @Callable(bC) | |
496 | + | func addSyntheticAsset (aa,bF) = { | |
497 | + | let ce = bF[0] | |
498 | + | let aq = D(ce) | |
499 | + | let as = bC.payments[0].assetId | |
500 | + | let bG = [if (!(U)) | |
477 | 501 | then true | |
478 | - | else | |
502 | + | else C("not allowed"), Y(bC.caller), Z(aa), if ((getString(P, ap(aq)) == unit)) | |
479 | 503 | then true | |
480 | - | else | |
504 | + | else C("invalid base asset"), if ((size(bC.payments) == 1)) | |
481 | 505 | then true | |
482 | - | else | |
506 | + | else C("invalid payments"), if ((getString(P, ar(as)) == unit)) | |
483 | 507 | then true | |
484 | - | else | |
485 | - | if (( | |
508 | + | else C("invalid synthetic asset")] | |
509 | + | if ((bG == bG)) | |
486 | 510 | then { | |
487 | - | let | |
488 | - | $Tuple2(nil, | |
511 | + | let bW = [invoke(P, "stringEntry", [ap(aq), F(as)], nil), invoke(P, "stringEntry", [ar(as), F(aq)], nil)] | |
512 | + | $Tuple2(nil, bW) | |
489 | 513 | } | |
490 | 514 | else throw("Strict value is not equal to itself.") | |
491 | 515 | } | |
492 | 516 | ||
493 | 517 | ||
494 | 518 | ||
495 | - | @Callable( | |
496 | - | func doShutdown ( | |
497 | - | let | |
498 | - | if (( | |
519 | + | @Callable(bC) | |
520 | + | func doShutdown (aa,bF) = { | |
521 | + | let bL = [Y(bC.caller), Z(aa)] | |
522 | + | if ((bL == bL)) | |
499 | 523 | then { | |
500 | - | let | |
501 | - | $Tuple2(nil, | |
524 | + | let bW = [invoke(P, "booleanEntry", [p, true], nil)] | |
525 | + | $Tuple2(nil, bW) | |
502 | 526 | } | |
503 | 527 | else throw("Strict value is not equal to itself.") | |
504 | 528 | } | |
505 | 529 | ||
506 | 530 | ||
507 | - | @Verifier( | |
508 | - | func | |
509 | - | then isDefined(getString( | |
531 | + | @Verifier(cf) | |
532 | + | func cg () = if (if (isDefined(O)) | |
533 | + | then isDefined(getString(P, l)) | |
510 | 534 | else false) | |
511 | 535 | then { | |
512 | - | let | |
513 | - | if ($isInstanceOf( | |
536 | + | let J = getString(P, l) | |
537 | + | if ($isInstanceOf(J, "String")) | |
514 | 538 | then { | |
515 | - | let | |
516 | - | let | |
517 | - | let | |
518 | - | | |
539 | + | let ab = J | |
540 | + | let ch = m(toString(this), toBase58String(cf.id)) | |
541 | + | let ci = valueOrElse(getBoolean(addressFromStringValue(ab), ch), false) | |
542 | + | ci | |
519 | 543 | } | |
520 | 544 | else false | |
521 | 545 | } | |
522 | - | else sigVerify( | |
546 | + | else sigVerify(cf.bodyBytes, cf.proofs[0], cf.senderPublicKey) | |
523 | 547 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 7 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = take(drop(this.bytes, 1), 1) | |
7 | 7 | ||
8 | 8 | let c = base58'2W' | |
9 | 9 | ||
10 | 10 | let d = "futures_calculator.ride" | |
11 | 11 | ||
12 | 12 | let e = 100000000 | |
13 | 13 | ||
14 | 14 | let f = toBigInt(1000000000000000000) | |
15 | 15 | ||
16 | 16 | let g = 8 | |
17 | 17 | ||
18 | 18 | let h = 6 | |
19 | 19 | ||
20 | 20 | let i = "WAVES" | |
21 | 21 | ||
22 | 22 | let j = 32 | |
23 | 23 | ||
24 | - | let k = | |
24 | + | let k = toBigInt(0) | |
25 | 25 | ||
26 | - | func l (m,n) = makeString(["%s__status", m, n], a) | |
26 | + | let l = "%s__multisig" | |
27 | + | ||
28 | + | func m (n,o) = makeString(["%s__status", n, o], a) | |
27 | 29 | ||
28 | 30 | ||
29 | - | let | |
31 | + | let p = "%s__shutdown" | |
30 | 32 | ||
31 | - | let | |
33 | + | let q = "%s__publicKeys" | |
32 | 34 | ||
33 | - | let | |
35 | + | let r = "%s__matcherPublicKey" | |
34 | 36 | ||
35 | - | func | |
37 | + | func s (t,u) = fraction(toBigInt(t), f, toBigInt(u)) | |
36 | 38 | ||
37 | 39 | ||
38 | - | func | |
40 | + | func v (w,x) = toInt(fraction(w, toBigInt(x), f)) | |
39 | 41 | ||
40 | 42 | ||
41 | - | func | |
43 | + | func y (z) = isDefined(addressFromString(z)) | |
42 | 44 | ||
43 | 45 | ||
44 | - | func | |
46 | + | func A (B) = ((d + ": ") + B) | |
45 | 47 | ||
46 | 48 | ||
47 | - | func | |
49 | + | func C (B) = throw(A(B)) | |
48 | 50 | ||
49 | 51 | ||
50 | - | func | |
52 | + | func D (E) = if ((E == i)) | |
51 | 53 | then unit | |
52 | - | else fromBase58String( | |
54 | + | else fromBase58String(E) | |
53 | 55 | ||
54 | 56 | ||
55 | - | func | |
57 | + | func F (E) = if ((E == unit)) | |
56 | 58 | then i | |
57 | - | else toBase58String(value( | |
59 | + | else toBase58String(value(E)) | |
58 | 60 | ||
59 | 61 | ||
60 | - | ||
62 | + | func G (H) = valueOrErrorMessage(assetInfo(H), A("invalid asset info")) | |
61 | 63 | ||
62 | - | let G = { | |
63 | - | let H = getString(this, F) | |
64 | - | if ($isInstanceOf(H, "String")) | |
64 | + | ||
65 | + | func I (H) = { | |
66 | + | let J = H | |
67 | + | if ($isInstanceOf(J, "Unit")) | |
68 | + | then g | |
69 | + | else if ($isInstanceOf(J, "ByteVector")) | |
70 | + | then { | |
71 | + | let H = J | |
72 | + | G(H).decimals | |
73 | + | } | |
74 | + | else throw("Match error") | |
75 | + | } | |
76 | + | ||
77 | + | ||
78 | + | func K (L) = pow(10, 0, L, 0, 0, DOWN) | |
79 | + | ||
80 | + | ||
81 | + | func M (H) = K(I(H)) | |
82 | + | ||
83 | + | ||
84 | + | let N = "%s__factoryAddress" | |
85 | + | ||
86 | + | let O = { | |
87 | + | let J = getString(this, N) | |
88 | + | if ($isInstanceOf(J, "String")) | |
65 | 89 | then { | |
66 | - | let | |
67 | - | addressFromString( | |
90 | + | let B = J | |
91 | + | addressFromString(B) | |
68 | 92 | } | |
69 | - | else if ($isInstanceOf( | |
93 | + | else if ($isInstanceOf(J, "Unit")) | |
70 | 94 | then unit | |
71 | 95 | else throw("Match error") | |
72 | 96 | } | |
73 | 97 | ||
74 | - | let | |
98 | + | let P = valueOrErrorMessage(O, A("invalid factory address")) | |
75 | 99 | ||
76 | - | let | |
100 | + | let Q = "%s__usdtAssetId" | |
77 | 101 | ||
78 | - | let | |
79 | - | let | |
80 | - | if ($isInstanceOf( | |
102 | + | let R = { | |
103 | + | let J = getString(this, Q) | |
104 | + | if ($isInstanceOf(J, "String")) | |
81 | 105 | then { | |
82 | - | let | |
83 | - | | |
106 | + | let B = J | |
107 | + | D(B) | |
84 | 108 | } | |
85 | - | else if ($isInstanceOf( | |
109 | + | else if ($isInstanceOf(J, "Unit")) | |
86 | 110 | then unit | |
87 | 111 | else throw("Match error") | |
88 | 112 | } | |
89 | 113 | ||
90 | - | let | |
114 | + | let S = valueOrErrorMessage(R, A("invalid usdt asset id")) | |
91 | 115 | ||
92 | - | let | |
116 | + | let T = "%s__calculatorAddress" | |
93 | 117 | ||
94 | - | let | |
118 | + | let U = valueOrElse(getBoolean(P, p), false) | |
95 | 119 | ||
96 | - | func | |
120 | + | func V (W,z) = if ((W == z)) | |
97 | 121 | then true | |
98 | - | else | |
122 | + | else C("permission denied") | |
99 | 123 | ||
100 | 124 | ||
101 | - | func | |
125 | + | func X (W) = V(W, this) | |
102 | 126 | ||
103 | 127 | ||
104 | - | func | |
128 | + | func Y (W) = V(W, P) | |
105 | 129 | ||
106 | 130 | ||
107 | - | func | |
108 | - | let | |
109 | - | let | |
110 | - | if (containsElement( | |
131 | + | func Z (aa) = { | |
132 | + | let ab = addressFromStringValue(getStringValue(P, l)) | |
133 | + | let ac = split(getStringValue(ab, q), a) | |
134 | + | if (containsElement(ac, toBase58String(aa))) | |
111 | 135 | then true | |
112 | - | else | |
136 | + | else C("not allowed") | |
113 | 137 | } | |
114 | 138 | ||
115 | 139 | ||
116 | - | let | |
140 | + | let ad = "%s__accountScript" | |
117 | 141 | ||
118 | - | func | |
142 | + | func ae () = valueOrErrorMessage(getBinary(P, ad), A("account script is not set")) | |
119 | 143 | ||
120 | 144 | ||
121 | - | let | |
145 | + | let af = "%s__rewardAmount" | |
122 | 146 | ||
123 | - | func | |
147 | + | func ag () = valueOrErrorMessage(getInteger(P, af), A("reward amount is not set")) | |
124 | 148 | ||
125 | 149 | ||
126 | - | let | |
150 | + | let ah = "%s__accountsLimit" | |
127 | 151 | ||
128 | - | let | |
152 | + | let ai = 20 | |
129 | 153 | ||
130 | - | func | |
154 | + | func aj () = valueOrElse(getInteger(P, ah), ai) | |
131 | 155 | ||
132 | 156 | ||
133 | - | func | |
157 | + | func ak (al) = makeString(["%s%s", "deposited", toString(al)], a) | |
134 | 158 | ||
135 | 159 | ||
136 | - | func | |
160 | + | func am (al) = getInteger(P, ak(al)) | |
137 | 161 | ||
138 | 162 | ||
139 | - | func | |
163 | + | func an (al,H) = makeString(["%s%s%s", "credit", toString(al), F(H)], a) | |
140 | 164 | ||
141 | 165 | ||
142 | - | func | |
166 | + | func ao (al) = makeString(["%s%s", "leverage", toString(al)], a) | |
143 | 167 | ||
144 | 168 | ||
145 | - | func | |
169 | + | func ap (aq) = makeString(["%s%s", "syntheticAssetId", F(aq)], a) | |
146 | 170 | ||
147 | 171 | ||
148 | - | func | |
172 | + | func ar (as) = makeString(["%s%s", "baseAssetId", F(as)], a) | |
149 | 173 | ||
150 | 174 | ||
151 | - | let | |
175 | + | let at = 0 | |
152 | 176 | ||
153 | - | let | |
177 | + | let au = 1 | |
154 | 178 | ||
155 | - | func | |
179 | + | func av (aw) = makeString(["%s%s", toBase58String(aw), "status"], a) | |
156 | 180 | ||
157 | 181 | ||
158 | - | func | |
182 | + | func ax (al) = makeString(["%s%s", toString(al), "creatorPublicKey"], a) | |
159 | 183 | ||
160 | 184 | ||
161 | - | func | |
185 | + | func ay (aw) = makeString(["%s%s", toBase58String(aw), "ownerPublicKey"], a) | |
162 | 186 | ||
163 | 187 | ||
164 | - | func | |
188 | + | func az (aw) = makeString(["%s%s", toBase58String(aw), "amountAssetId"], a) | |
165 | 189 | ||
166 | 190 | ||
167 | - | func | |
191 | + | func aA (aw) = makeString(["%s%s", toBase58String(aw), "priceAssetId"], a) | |
168 | 192 | ||
169 | 193 | ||
170 | - | func | |
194 | + | func aB (aw) = makeString(["%s%s", toBase58String(aw), "requestIdToAccountPublicKey"], a) | |
171 | 195 | ||
172 | 196 | ||
173 | - | func | |
197 | + | func aC (al) = makeString(["%s%s", toString(al), "accountAddressToRequestId"], a) | |
174 | 198 | ||
175 | 199 | ||
176 | - | func | |
200 | + | func aD () = makeString(["%s", "requestsQueue"], a) | |
177 | 201 | ||
178 | 202 | ||
179 | - | func | |
203 | + | func aE () = valueOrElse(getBinary(P, aD()), base58'') | |
180 | 204 | ||
181 | 205 | ||
182 | - | func | |
206 | + | func aF () = makeString(["%s", "accountsQueue"], a) | |
183 | 207 | ||
184 | 208 | ||
185 | - | func | |
209 | + | func aG () = valueOrElse(getBinary(P, aF()), base58'') | |
186 | 210 | ||
187 | 211 | ||
188 | - | func | |
212 | + | func aH (aI) = makeString(["%s%s", "requests", toString(aI)], a) | |
189 | 213 | ||
190 | 214 | ||
191 | - | func | |
215 | + | func aJ (aI) = valueOrElse(getBinary(P, aH(aI)), base58'') | |
192 | 216 | ||
193 | 217 | ||
194 | - | func | |
218 | + | func aK (aL,aM) = makeString(["%s%s%s", F(aL), F(aM), "pairAllowed"], a) | |
195 | 219 | ||
196 | 220 | ||
197 | - | func | |
221 | + | func aN (aL,aM) = valueOrElse(getBoolean(P, aK(aL, aM)), false) | |
198 | 222 | ||
199 | 223 | ||
200 | - | func | |
224 | + | func aO (H) = makeString(["%s", F(H)], a) | |
201 | 225 | ||
202 | 226 | ||
203 | - | func | |
204 | - | let | |
205 | - | let | |
206 | - | let | |
207 | - | | |
227 | + | func aP (H) = { | |
228 | + | let aQ = fromBase58String(valueOrErrorMessage(getString(P, r), A("invalid matcher public key"))) | |
229 | + | let aR = addressFromPublicKey(aQ) | |
230 | + | let aS = valueOrErrorMessage(getInteger(aR, aO(H)), A(("invalid price, assetId = " + F(H)))) | |
231 | + | aS | |
208 | 232 | } | |
209 | 233 | ||
210 | 234 | ||
211 | - | func | |
235 | + | func aT (aU,aV,aW) = (fraction(aU, aW, f) + aV) | |
212 | 236 | ||
213 | 237 | ||
214 | - | func | |
238 | + | func aX (aY,aZ,aW) = (fraction(aY, aW, f) + aZ) | |
215 | 239 | ||
216 | 240 | ||
217 | - | func | |
241 | + | func ba (bb,bc) = (bb - bc) | |
218 | 242 | ||
219 | 243 | ||
220 | - | func | |
244 | + | func bd (be,bf,bc) = (fraction(be, bf, f) - bc) | |
221 | 245 | ||
222 | 246 | ||
223 | - | func | |
224 | - | then ( | |
225 | - | else | |
247 | + | func bg (bh,bi) = if ((bh > k)) | |
248 | + | then (bh - bi) | |
249 | + | else k | |
226 | 250 | ||
227 | 251 | ||
228 | - | func | |
229 | - | then ( | |
230 | - | else | |
252 | + | func bj (bh,bi) = if ((bh > k)) | |
253 | + | then (bi - bh) | |
254 | + | else k | |
231 | 255 | ||
232 | 256 | ||
233 | - | func | |
234 | - | then max([ | |
235 | - | else | |
257 | + | func bk (bl,bm) = if ((bm > k)) | |
258 | + | then max([k, fraction(bl, f, bm)]) | |
259 | + | else k | |
236 | 260 | ||
237 | 261 | ||
238 | - | func | |
239 | - | then max([ | |
240 | - | else | |
262 | + | func bn (bl,bm) = if ((bm > k)) | |
263 | + | then max([k, fraction(bm, f, bl)]) | |
264 | + | else k | |
241 | 265 | ||
242 | 266 | ||
243 | - | func | |
267 | + | func bo (bp,bq,aW,br) = fraction((fraction(bp, aW, f) + bq), br, f) | |
244 | 268 | ||
245 | 269 | ||
246 | - | func | |
270 | + | func bs (bt,br,bu) = fraction(bt, bu, br) | |
247 | 271 | ||
248 | 272 | ||
249 | - | func | |
250 | - | let | |
251 | - | then ((( | |
273 | + | func bv (be,bw,bp,bq,bx,by) = { | |
274 | + | let bz = if ((bp > 0)) | |
275 | + | then (((be - bw) / bp) + bx) | |
252 | 276 | else 0 | |
253 | - | let | |
254 | - | then ( | |
277 | + | let bA = if ((bq > 0)) | |
278 | + | then (by - ((be - bw) / (bp / by))) | |
255 | 279 | else 0 | |
256 | - | ( | |
280 | + | (bz + bA) | |
257 | 281 | } | |
258 | 282 | ||
259 | 283 | ||
260 | - | func | |
261 | - | let | |
262 | - | let | |
263 | - | let | |
264 | - | $Tuple2( | |
284 | + | func bB (al) = { | |
285 | + | let aw = fromBase58String(valueOrErrorMessage(getString(P, aC(al)), A("invalid account address"))) | |
286 | + | let aL = D(valueOrErrorMessage(getString(P, az(aw)), A("invalid amount asset id"))) | |
287 | + | let aM = D(valueOrErrorMessage(getString(P, aA(aw)), A("invalid amount price id"))) | |
288 | + | $Tuple2(aL, aM) | |
265 | 289 | } | |
266 | 290 | ||
267 | 291 | ||
268 | - | @Callable( | |
269 | - | func init ( | |
270 | - | let | |
271 | - | if (( | |
272 | - | then $Tuple2([StringEntry( | |
292 | + | @Callable(bC) | |
293 | + | func init (bD) = { | |
294 | + | let bE = X(bC.caller) | |
295 | + | if ((bE == bE)) | |
296 | + | then $Tuple2([StringEntry(N, bD)], unit) | |
273 | 297 | else throw("Strict value is not equal to itself.") | |
274 | 298 | } | |
275 | 299 | ||
276 | 300 | ||
277 | 301 | ||
278 | - | @Callable( | |
279 | - | func requestAccount ( | |
280 | - | let | |
302 | + | @Callable(bC) | |
303 | + | func requestAccount (aa,bF) = { | |
304 | + | let bG = [if (!(U)) | |
281 | 305 | then true | |
282 | - | else | |
283 | - | if (( | |
306 | + | else C("not allowed"), Y(bC.caller)] | |
307 | + | if ((bG == bG)) | |
284 | 308 | then { | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | let | |
289 | - | let | |
290 | - | let | |
291 | - | let | |
292 | - | let | |
309 | + | let bH = bF[0] | |
310 | + | let bI = bF[1] | |
311 | + | let bJ = addressFromPublicKey(aa) | |
312 | + | let aw = sha256(((bJ.bytes + fromBase58String(bH)) + fromBase58String(bI))) | |
313 | + | let aL = D(bH) | |
314 | + | let aM = D(bI) | |
315 | + | let bK = (size(aH(bJ)) / j) | |
316 | + | let bL = [if ((size(bC.payments) == 1)) | |
293 | 317 | then true | |
294 | - | else | |
318 | + | else C("1 payment is required"), if ((bC.payments[0].assetId == unit)) | |
295 | 319 | then true | |
296 | - | else | |
320 | + | else C("invalid asset"), if ((bC.payments[0].amount == ag())) | |
297 | 321 | then true | |
298 | - | else | |
322 | + | else C("invalid amount"), if (aN(aL, aM)) | |
299 | 323 | then true | |
300 | - | else | |
324 | + | else C("pair is not allowed"), if ((getInteger(P, av(aw)) == unit)) | |
301 | 325 | then true | |
302 | - | else | |
326 | + | else C("account is already exists"), if ((aj() > bK)) | |
303 | 327 | then true | |
304 | - | else | |
305 | - | if (( | |
328 | + | else C(("accounts limit is " + toString(aj())))] | |
329 | + | if ((bL == bL)) | |
306 | 330 | then { | |
307 | - | let | |
308 | - | then $Tuple2([ScriptTransfer( | |
331 | + | let bM = if ((size(aG()) == 0)) | |
332 | + | then $Tuple2([ScriptTransfer(P, ag(), unit)], [invoke(P, "integerEntry", [av(aw), at], nil), invoke(P, "binaryEntry", [aD(), (aE() + aw)], nil)]) | |
309 | 333 | else { | |
310 | - | let | |
311 | - | let | |
312 | - | let | |
313 | - | $Tuple2([ScriptTransfer( | |
334 | + | let bN = take(aG(), j) | |
335 | + | let al = addressFromPublicKey(bN) | |
336 | + | let bO = addressFromPublicKey(valueOrErrorMessage(getBinary(P, ax(al)), A("invalid creator public key"))) | |
337 | + | $Tuple2([ScriptTransfer(bO, ag(), unit)], [invoke(P, "binaryEntry", [aF(), drop(aG(), j)], nil), invoke(P, "integerEntry", [av(aw), au], nil), invoke(P, "binaryEntry", [aB(aw), bN], nil), invoke(P, "stringEntry", [aC(al), toBase58String(aw)], nil)]) | |
314 | 338 | } | |
315 | - | let | |
316 | - | let | |
317 | - | $Tuple2( | |
339 | + | let bP = bM._1 | |
340 | + | let bQ = bM._2 | |
341 | + | $Tuple2(bP, (bQ ++ [invoke(P, "binaryEntry", [ay(aw), aa], nil), invoke(P, "binaryEntry", [aH(bJ), (aJ(bJ) + aw)], nil), invoke(P, "stringEntry", [az(aw), bH], nil), invoke(P, "stringEntry", [aA(aw), bI], nil)])) | |
318 | 342 | } | |
319 | 343 | else throw("Strict value is not equal to itself.") | |
320 | 344 | } | |
321 | 345 | else throw("Strict value is not equal to itself.") | |
322 | 346 | } | |
323 | 347 | ||
324 | 348 | ||
325 | 349 | ||
326 | - | @Callable( | |
327 | - | func addAccount ( | |
328 | - | let | |
350 | + | @Callable(bC) | |
351 | + | func addAccount (aa,bF) = { | |
352 | + | let bG = [if (!(U)) | |
329 | 353 | then true | |
330 | - | else | |
331 | - | if (( | |
354 | + | else C("not allowed"), Y(bC.caller)] | |
355 | + | if ((bG == bG)) | |
332 | 356 | then { | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | let | |
337 | - | let | |
357 | + | let bR = fromBase58String(bF[0]) | |
358 | + | let bN = aa | |
359 | + | let al = addressFromPublicKey(aa) | |
360 | + | let bO = addressFromPublicKey(bR) | |
361 | + | let bL = [if ((getBinary(P, ax(al)) == unit)) | |
338 | 362 | then true | |
339 | - | else | |
340 | - | let | |
341 | - | if ($isInstanceOf( | |
363 | + | else C("account is already exists"), if ({ | |
364 | + | let J = scriptHash(al) | |
365 | + | if ($isInstanceOf(J, "ByteVector")) | |
342 | 366 | then { | |
343 | - | let | |
344 | - | ( | |
367 | + | let bS = J | |
368 | + | (bS == blake2b256_32Kb(ae())) | |
345 | 369 | } | |
346 | 370 | else false | |
347 | 371 | }) | |
348 | 372 | then true | |
349 | - | else | |
350 | - | if (( | |
373 | + | else C("invalid script")] | |
374 | + | if ((bL == bL)) | |
351 | 375 | then { | |
352 | - | let | |
353 | - | then $Tuple2(nil, [invoke( | |
376 | + | let bT = if ((size(aE()) == 0)) | |
377 | + | then $Tuple2(nil, [invoke(P, "binaryEntry", [aF(), (aG() + bN)], nil)]) | |
354 | 378 | else { | |
355 | - | let | |
356 | - | $Tuple2(nil, [invoke( | |
379 | + | let aw = take(aE(), j) | |
380 | + | $Tuple2(nil, [invoke(P, "integerEntry", [av(aw), au], nil), invoke(P, "binaryEntry", [aB(aw), bN], nil), invoke(P, "binaryEntry", [aD(), drop(aE(), j)], nil), invoke(P, "stringEntry", [aC(al), toBase58String(aw)], nil), invoke(P, "transferWaves", [bO.bytes, ag()], nil)]) | |
357 | 381 | } | |
358 | - | let | |
359 | - | let | |
360 | - | $Tuple2( | |
382 | + | let bP = bT._1 | |
383 | + | let bQ = bT._2 | |
384 | + | $Tuple2(bP, (bQ ++ [invoke(P, "binaryEntry", [ax(al), bR], nil)])) | |
361 | 385 | } | |
362 | 386 | else throw("Strict value is not equal to itself.") | |
363 | 387 | } | |
364 | 388 | else throw("Strict value is not equal to itself.") | |
365 | 389 | } | |
366 | 390 | ||
367 | 391 | ||
368 | 392 | ||
369 | - | @Callable( | |
370 | - | func deposit ( | |
371 | - | let | |
372 | - | let | |
393 | + | @Callable(bC) | |
394 | + | func deposit (aa,bF) = { | |
395 | + | let bU = bC.payments[0] | |
396 | + | let bG = [if (!(U)) | |
373 | 397 | then true | |
374 | - | else | |
398 | + | else C("not allowed"), Y(bC.caller), if ((size(bC.payments) == 1)) | |
375 | 399 | then true | |
376 | - | else | |
400 | + | else C("1 payment is required"), if ((bU.assetId == S)) | |
377 | 401 | then true | |
378 | - | else | |
379 | - | if (( | |
402 | + | else C("invalid asset")] | |
403 | + | if ((bG == bG)) | |
380 | 404 | then { | |
381 | - | let | |
382 | - | let | |
383 | - | let | |
384 | - | $Tuple2( | |
405 | + | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
406 | + | let bP = [ScriptTransfer(al, bU.amount, bU.assetId)] | |
407 | + | let bQ = [invoke(P, "integerEntry", [ak(al), (valueOrElse(am(al), 0) + bU.amount)], nil)] | |
408 | + | $Tuple2(bP, bQ) | |
385 | 409 | } | |
386 | 410 | else throw("Strict value is not equal to itself.") | |
387 | 411 | } | |
388 | 412 | ||
389 | 413 | ||
390 | 414 | ||
391 | - | @Callable( | |
392 | - | func withdraw ( | |
393 | - | let | |
415 | + | @Callable(bC) | |
416 | + | func withdraw (aa,bF) = { | |
417 | + | let bG = [if (!(U)) | |
394 | 418 | then true | |
395 | - | else | |
396 | - | if (( | |
419 | + | else C("not allowed"), Y(bC.caller)] | |
420 | + | if ((bG == bG)) | |
397 | 421 | then { | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | $Tuple2(nil, | |
422 | + | let bJ = addressFromPublicKey(aa) | |
423 | + | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
424 | + | let bV = valueOrErrorMessage(parseInt(bF[1]), A("invalid amount")) | |
425 | + | let H = D(bF[2]) | |
426 | + | let bW = [invoke(al, "transferAsset", [bJ.bytes, bV, H], nil)] | |
427 | + | $Tuple2(nil, bW) | |
404 | 428 | } | |
405 | 429 | else throw("Strict value is not equal to itself.") | |
406 | 430 | } | |
407 | 431 | ||
408 | 432 | ||
409 | 433 | ||
410 | - | @Callable( | |
411 | - | func borrow ( | |
412 | - | let | |
434 | + | @Callable(bC) | |
435 | + | func borrow (aa,bF) = { | |
436 | + | let bG = [if (!(U)) | |
413 | 437 | then true | |
414 | - | else | |
415 | - | if (( | |
438 | + | else C("not allowed"), Y(bC.caller)] | |
439 | + | if ((bG == bG)) | |
416 | 440 | then { | |
417 | - | let | |
418 | - | let | |
419 | - | let | |
420 | - | let | |
421 | - | let | |
422 | - | let | |
423 | - | let | |
424 | - | let | |
425 | - | let | |
426 | - | let | |
427 | - | let | |
428 | - | let | |
429 | - | let | |
430 | - | let | |
431 | - | $Tuple2(nil, [ | |
441 | + | let al = valueOrErrorMessage(addressFromString(bF[0]), A("invalid account address")) | |
442 | + | let H = D(bF[1]) | |
443 | + | let bX = parseInt(bF[2]) | |
444 | + | let bY = bB(al) | |
445 | + | let aL = bY._1 | |
446 | + | let aM = bY._2 | |
447 | + | let bZ = s(valueOrElse(am(al), 0), M(aM)) | |
448 | + | let aW = s(aP(aL), M(S)) | |
449 | + | let aU = s(valueOrElse(getInteger(P, an(al, aL)), 0), M(aL)) | |
450 | + | let aV = s(valueOrElse(getInteger(P, an(al, aM)), 0), M(aM)) | |
451 | + | let bc = aT(aU, aV, aW) | |
452 | + | let ca = 3 | |
453 | + | let bf = s(valueOrElse(getInteger(P, ao(al)), ca), 1) | |
454 | + | let cb = bd(bZ, bf, bc) | |
455 | + | $Tuple2(nil, [v(cb, M(aM))]) | |
432 | 456 | } | |
433 | 457 | else throw("Strict value is not equal to itself.") | |
434 | 458 | } | |
435 | 459 | ||
436 | 460 | ||
437 | 461 | ||
438 | - | @Callable( | |
439 | - | func repay ( | |
440 | - | let | |
462 | + | @Callable(bC) | |
463 | + | func repay (aa,bF) = { | |
464 | + | let bG = [if (!(U)) | |
441 | 465 | then true | |
442 | - | else | |
443 | - | if (( | |
466 | + | else C("not allowed"), Y(bC.caller)] | |
467 | + | if ((bG == bG)) | |
444 | 468 | then $Tuple2(nil, unit) | |
445 | 469 | else throw("Strict value is not equal to itself.") | |
446 | 470 | } | |
447 | 471 | ||
448 | 472 | ||
449 | 473 | ||
450 | - | @Callable( | |
451 | - | func setPairAllowance ( | |
452 | - | let | |
474 | + | @Callable(bC) | |
475 | + | func setPairAllowance (aa,bF) = { | |
476 | + | let bG = [if (!(U)) | |
453 | 477 | then true | |
454 | - | else | |
455 | - | if (( | |
478 | + | else C("not allowed"), Y(bC.caller), Z(aa)] | |
479 | + | if ((bG == bG)) | |
456 | 480 | then { | |
457 | - | let | |
458 | - | let | |
459 | - | let | |
460 | - | let | |
461 | - | let | |
462 | - | let | |
463 | - | let | |
464 | - | $Tuple2(nil, | |
481 | + | let bH = bF[0] | |
482 | + | let bI = bF[1] | |
483 | + | let cc = bF[2] | |
484 | + | let aL = D(bH) | |
485 | + | let aM = D(bI) | |
486 | + | let cd = (cc == "true") | |
487 | + | let bW = [invoke(P, "booleanEntry", [aK(aL, aM), cd], nil)] | |
488 | + | $Tuple2(nil, bW) | |
465 | 489 | } | |
466 | 490 | else throw("Strict value is not equal to itself.") | |
467 | 491 | } | |
468 | 492 | ||
469 | 493 | ||
470 | 494 | ||
471 | - | @Callable( | |
472 | - | func addSyntheticAsset ( | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
495 | + | @Callable(bC) | |
496 | + | func addSyntheticAsset (aa,bF) = { | |
497 | + | let ce = bF[0] | |
498 | + | let aq = D(ce) | |
499 | + | let as = bC.payments[0].assetId | |
500 | + | let bG = [if (!(U)) | |
477 | 501 | then true | |
478 | - | else | |
502 | + | else C("not allowed"), Y(bC.caller), Z(aa), if ((getString(P, ap(aq)) == unit)) | |
479 | 503 | then true | |
480 | - | else | |
504 | + | else C("invalid base asset"), if ((size(bC.payments) == 1)) | |
481 | 505 | then true | |
482 | - | else | |
506 | + | else C("invalid payments"), if ((getString(P, ar(as)) == unit)) | |
483 | 507 | then true | |
484 | - | else | |
485 | - | if (( | |
508 | + | else C("invalid synthetic asset")] | |
509 | + | if ((bG == bG)) | |
486 | 510 | then { | |
487 | - | let | |
488 | - | $Tuple2(nil, | |
511 | + | let bW = [invoke(P, "stringEntry", [ap(aq), F(as)], nil), invoke(P, "stringEntry", [ar(as), F(aq)], nil)] | |
512 | + | $Tuple2(nil, bW) | |
489 | 513 | } | |
490 | 514 | else throw("Strict value is not equal to itself.") | |
491 | 515 | } | |
492 | 516 | ||
493 | 517 | ||
494 | 518 | ||
495 | - | @Callable( | |
496 | - | func doShutdown ( | |
497 | - | let | |
498 | - | if (( | |
519 | + | @Callable(bC) | |
520 | + | func doShutdown (aa,bF) = { | |
521 | + | let bL = [Y(bC.caller), Z(aa)] | |
522 | + | if ((bL == bL)) | |
499 | 523 | then { | |
500 | - | let | |
501 | - | $Tuple2(nil, | |
524 | + | let bW = [invoke(P, "booleanEntry", [p, true], nil)] | |
525 | + | $Tuple2(nil, bW) | |
502 | 526 | } | |
503 | 527 | else throw("Strict value is not equal to itself.") | |
504 | 528 | } | |
505 | 529 | ||
506 | 530 | ||
507 | - | @Verifier( | |
508 | - | func | |
509 | - | then isDefined(getString( | |
531 | + | @Verifier(cf) | |
532 | + | func cg () = if (if (isDefined(O)) | |
533 | + | then isDefined(getString(P, l)) | |
510 | 534 | else false) | |
511 | 535 | then { | |
512 | - | let | |
513 | - | if ($isInstanceOf( | |
536 | + | let J = getString(P, l) | |
537 | + | if ($isInstanceOf(J, "String")) | |
514 | 538 | then { | |
515 | - | let | |
516 | - | let | |
517 | - | let | |
518 | - | | |
539 | + | let ab = J | |
540 | + | let ch = m(toString(this), toBase58String(cf.id)) | |
541 | + | let ci = valueOrElse(getBoolean(addressFromStringValue(ab), ch), false) | |
542 | + | ci | |
519 | 543 | } | |
520 | 544 | else false | |
521 | 545 | } | |
522 | - | else sigVerify( | |
546 | + | else sigVerify(cf.bodyBytes, cf.proofs[0], cf.senderPublicKey) | |
523 | 547 |
github/deemru/w8io/169f3d6 197.50 ms ◑