tx · 4JnZHetswEK2vsWqraSxe7r7vnkPPqWEAfEXWdgZV7kj

3N3c8hF3E1qiSZ27uH3XZvtWSso9QFckZUb:  -0.03100000 Waves

2024.08.26 13:28 [3255739] smart account 3N3c8hF3E1qiSZ27uH3XZvtWSso9QFckZUb > SELF 0.00000000 Waves

{ "type": 13, "id": "4JnZHetswEK2vsWqraSxe7r7vnkPPqWEAfEXWdgZV7kj", "fee": 3100000, "feeAssetId": null, "timestamp": 1724668121964, "version": 1, "sender": "3N3c8hF3E1qiSZ27uH3XZvtWSso9QFckZUb", "senderPublicKey": "9Dkh2UiuYRqFTQrAXgJJbJuG3Q6VDPhiYHrsdfQx42Zx", "proofs": [ "HTuh3KiVqcah62dj2PSvur9d2GEjyg8vNogZfF8ABsh2uu35Qw1T3jVK99pWYtEtjfJZ34WTNWPfXBKc49BEdTg" ], "script": "base64:BwJhCAISAwoBCBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGBIECgICGGAACXNlcGFyYXRvcgICX18AB2NoYWluSWQJAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEACGNoYWluSWRXAQFXABBjb250cmFjdEZpbGVuYW1lAhdmdXR1cmVzX2NhbGN1bGF0b3IucmlkZQAFbXVsdDgAgMLXLwAMbXVsdDE4QmlnSW50CQC2AgEAgICQu7rWrfANAA13YXZlc0RlY2ltYWxzAAgADHVzZHREZWNpbWFscwAGAAt3YXZlc1N0cmluZwIFV0FWRVMADXF1ZXVlSXRlbVNpemUAIAAEYmlnMAkAtgIBAAAACklOREVYX0xJU1QJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwUDbmlsAAlrTXVsdGlzaWcCDCVzX19tdWx0aXNpZwEHa1N0YXR1cwIEZGFwcAR0eElkCQC5CQIJAMwIAgIKJXNfX3N0YXR1cwkAzAgCBQRkYXBwCQDMCAIFBHR4SWQFA25pbAUJc2VwYXJhdG9yAAlrU2h1dGRvd24CDCVzX19zaHV0ZG93bgALa1B1YmxpY0tleXMCDiVzX19wdWJsaWNLZXlzABFrTWF0Y2hlclB1YmxpY0tleQIUJXNfX21hdGNoZXJQdWJsaWNLZXkBBXRvWDE4AgdvcmlnVmFsDW9yaWdTY2FsZU11bHQJALwCAwkAtgIBBQdvcmlnVmFsBQxtdWx0MThCaWdJbnQJALYCAQUNb3JpZ1NjYWxlTXVsdAEHZnJvbVgxOAIDdmFsD3Jlc3VsdFNjYWxlTXVsdAkAoAMBCQC8AgMFA3ZhbAkAtgIBBQ9yZXN1bHRTY2FsZU11bHQFDG11bHQxOEJpZ0ludAEPdmFsaWRhdGVBZGRyZXNzAQdhZGRyZXNzCQEJaXNEZWZpbmVkAQkApggBBQdhZGRyZXNzAQd3cmFwRXJyAQFzCQCsAgIJAKwCAgUQY29udHJhY3RGaWxlbmFtZQICOiAFAXMBCHRocm93RXJyAQFzCQACAQkBB3dyYXBFcnIBBQFzAQ5lbnN1cmVQb3NpdGl2ZQIBdgFzAwkAZwIFAXYAAAUBdgkBCHRocm93RXJyAQkArAICBQFzAhkgdmFsdWUgc2hvdWxkIGJlIHBvc2l0aXZlAQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBEmdldEFzc2V0SW5mb09yRmFpbAEHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFB2Fzc2V0SWQJAQd3cmFwRXJyAQISaW52YWxpZCBhc3NldCBpbmZvARZnZXRBc3NldERlY2ltYWxzT3JGYWlsAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACBFVuaXQFDXdhdmVzRGVjaW1hbHMDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQHYXNzZXRJZAUHJG1hdGNoMAgJARJnZXRBc3NldEluZm9PckZhaWwBBQdhc3NldElkCGRlY2ltYWxzCQACAQILTWF0Y2ggZXJyb3IBD2dldEFzc2V0QmFsYW5jZQIHYXNzZXRJZAdhZGRyZXNzBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACBFVuaXQICQDvBwEFB2FkZHJlc3MJYXZhaWxhYmxlAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDAJAPAHAgUHYWRkcmVzcwUHYXNzZXRJZAkAAgECC01hdGNoIGVycm9yAQVwb3cxMAEBbgkAbAYACgAABQFuAAAAAAUERE9XTgENcG93MTBEZWNpbWFscwEHYXNzZXRJZAkBBXBvdzEwAQkBFmdldEFzc2V0RGVjaW1hbHNPckZhaWwBBQdhc3NldElkAA9rRmFjdG9yeUFkZHJlc3MCEiVzX19mYWN0b3J5QWRkcmVzcwAUZmFjdG9yeUFkZHJlc3NPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwUPa0ZhY3RvcnlBZGRyZXNzAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAOZmFjdG9yeUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUUZmFjdG9yeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIXaW52YWxpZCBmYWN0b3J5IGFkZHJlc3MADGtVc2R0QXNzZXRJZAIPJXNfX3VzZHRBc3NldElkABF1c2R0QXNzZXRJZE9wdGlvbgQHJG1hdGNoMAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUMa1VzZHRBc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBDHBhcnNlQXNzZXRJZAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAAt1c2R0QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRF1c2R0QXNzZXRJZE9wdGlvbgkBB3dyYXBFcnIBAhVpbnZhbGlkIHVzZHQgYXNzZXQgaWQADmtQcmljZXNBZGRyZXNzAhUlc19fY2FsY3VsYXRvckFkZHJlc3MACHNodXRkb3duCQELdmFsdWVPckVsc2UCCQCbCAIFDmZhY3RvcnlBZGRyZXNzBQlrU2h1dGRvd24HAQttdXN0QWRkcmVzcwIGY2FsbGVyB2FkZHJlc3MDCQAAAgUGY2FsbGVyBQdhZGRyZXNzBgkBCHRocm93RXJyAQIRcGVybWlzc2lvbiBkZW5pZWQBCG11c3RUaGlzAQZjYWxsZXIJAQttdXN0QWRkcmVzcwIFBmNhbGxlcgUEdGhpcwELbXVzdEZhY3RvcnkBBmNhbGxlcgkBC211c3RBZGRyZXNzAgUGY2FsbGVyBQ5mYWN0b3J5QWRkcmVzcwEJbXVzdEFkbWluAQ9jYWxsZXJQdWJsaWNLZXkEFW11bHRpc2lnQWRkcmVzc1N0cmluZwkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnBAdpc0FkbWluBAckbWF0Y2gwBRVtdWx0aXNpZ0FkZHJlc3NTdHJpbmcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBA1hZGRyZXNzU3RyaW5nBQckbWF0Y2gwBAhtdWx0aXNpZwkBEUBleHRyTmF0aXZlKDEwNjIpAQUNYWRkcmVzc1N0cmluZwQOcHVibGljS2V5c0xpc3QJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUIbXVsdGlzaWcFC2tQdWJsaWNLZXlzBQlzZXBhcmF0b3IJAQ9jb250YWluc0VsZW1lbnQCBQ5wdWJsaWNLZXlzTGlzdAkA2AQBBQ9jYWxsZXJQdWJsaWNLZXkJAAACCQCnCAEFD2NhbGxlclB1YmxpY0tleQUOZmFjdG9yeUFkZHJlc3MDBQdpc0FkbWluBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQADmtBY2NvdW50U2NyaXB0AhElc19fYWNjb3VudFNjcmlwdAENYWNjb3VudFNjcmlwdAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwUOa0FjY291bnRTY3JpcHQJAQd3cmFwRXJyAQIZYWNjb3VudCBzY3JpcHQgaXMgbm90IHNldAANa1Jld2FyZEFtb3VudAIQJXNfX3Jld2FyZEFtb3VudAEMcmV3YXJkQW1vdW50AAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzBQ1rUmV3YXJkQW1vdW50CQEHd3JhcEVycgECGHJld2FyZCBhbW91bnQgaXMgbm90IHNldAAOa0FjY291bnRzTGltaXQCESVzX19hY2NvdW50c0xpbWl0ABRhY2NvdW50c0xpbWl0RGVmYXVsdAAUAQ1hY2NvdW50c0xpbWl0AAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwUOa0FjY291bnRzTGltaXQFFGFjY291bnRzTGltaXREZWZhdWx0AQprRGVwb3NpdGVkAQ5hY2NvdW50QWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIJZGVwb3NpdGVkCQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQ9kZXBvc2l0ZWRPcHRpb24BDmFjY291bnRBZGRyZXNzCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEKa0RlcG9zaXRlZAEFDmFjY291bnRBZGRyZXNzAQdrQ3JlZGl0Ag5hY2NvdW50QWRkcmVzcwdhc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBmNyZWRpdAkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQdhc3NldElkBQNuaWwFCXNlcGFyYXRvcgEMY3JlZGl0T3B0aW9uAg5hY2NvdW50QWRkcmVzcwdhc3NldElkCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEHa0NyZWRpdAIFDmFjY291bnRBZGRyZXNzBQdhc3NldElkAQlrTGV2ZXJhZ2UBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghsZXZlcmFnZQkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEQa1JlcXVlc3RMZXZlcmFnZQEJcmVxdWVzdElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg9yZXF1ZXN0TGV2ZXJhZ2UJAMwIAgkA2AQBBQlyZXF1ZXN0SWQFA25pbAUJc2VwYXJhdG9yARFrU3ludGhldGljQXNzZXRJZAELYmFzZUFzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICEHN5bnRoZXRpY0Fzc2V0SWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFC2Jhc2VBc3NldElkBQNuaWwFCXNlcGFyYXRvcgEMa0Jhc2VBc3NldElkARBzeW50aGV0aWNBc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgtiYXNlQXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUQc3ludGhldGljQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IAFFJFUVVFU1RfU1RBVFVTX0VNUFRZAAAAFFJFUVVFU1RfU1RBVFVTX1JFQURZAAEBDmtSZXF1ZXN0U3RhdHVzAQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICBnN0YXR1cwUDbmlsBQlzZXBhcmF0b3IBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEOYWNjb3VudEFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAIJAKUIAQUOYWNjb3VudEFkZHJlc3MJAMwIAgIQY3JlYXRvclB1YmxpY0tleQUDbmlsBQlzZXBhcmF0b3IBFmtSZXF1ZXN0T3duZXJQdWJsaWNLZXkBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgIOb3duZXJQdWJsaWNLZXkFA25pbAUJc2VwYXJhdG9yARVrUmVxdWVzdEFtb3VudEFzc2V0SWQBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgINYW1vdW50QXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBFGtSZXF1ZXN0UHJpY2VBc3NldElkAQlyZXF1ZXN0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIJANgEAQUJcmVxdWVzdElkCQDMCAICDHByaWNlQXNzZXRJZAUDbmlsBQlzZXBhcmF0b3IBHGtSZXF1ZXN0SWRUb0FjY291bnRQdWJsaWNLZXkBCXJlcXVlc3RJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgkA2AQBBQlyZXF1ZXN0SWQJAMwIAgIbcmVxdWVzdElkVG9BY2NvdW50UHVibGljS2V5BQNuaWwFCXNlcGFyYXRvcgEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBDmFjY291bnRBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCCQClCAEFDmFjY291bnRBZGRyZXNzCQDMCAICGWFjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQFA25pbAUJc2VwYXJhdG9yAQ5rUmVxdWVzdHNRdWV1ZQAJALkJAgkAzAgCAgIlcwkAzAgCAg1yZXF1ZXN0c1F1ZXVlBQNuaWwFCXNlcGFyYXRvcgENcmVxdWVzdHNRdWV1ZQAJAQt2YWx1ZU9yRWxzZQIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJAQ5rUmVxdWVzdHNRdWV1ZQABAAEOa0FjY291bnRzUXVldWUACQC5CQIJAMwIAgICJXMJAMwIAgINYWNjb3VudHNRdWV1ZQUDbmlsBQlzZXBhcmF0b3IBDWFjY291bnRzUXVldWUACQELdmFsdWVPckVsc2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEOa0FjY291bnRzUXVldWUAAQABEGtSZXF1ZXN0c0J5T3duZXIBDG93bmVyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIIcmVxdWVzdHMJAMwIAgkApQgBBQxvd25lckFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQ9yZXF1ZXN0c0J5T3duZXIBDG93bmVyQWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBEGtSZXF1ZXN0c0J5T3duZXIBBQxvd25lckFkZHJlc3MBAAEMa1BhaXJBbGxvd2VkAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUNYW1vdW50QXNzZXRJZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUMcHJpY2VBc3NldElkCQDMCAICC3BhaXJBbGxvd2VkBQNuaWwFCXNlcGFyYXRvcgELcGFpckFsbG93ZWQCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkCQELdmFsdWVPckVsc2UCCQCbCAIFDmZhY3RvcnlBZGRyZXNzCQEMa1BhaXJBbGxvd2VkAgUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkBwEGa1ByaWNlAQdhc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFB2Fzc2V0SWQFA25pbAUJc2VwYXJhdG9yARJrUGFpclByaWNlc0xpc3RLZXkCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQ1hbW91bnRBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQxwcmljZUFzc2V0SWQJAMwIAgIRcGFpclNldHRpbmdQcmljZXMFA25pbAUJc2VwYXJhdG9yARFnZXRQYWlyUHJpY2VzTGlzdAINYW1vdW50QXNzZXRJZAxwcmljZUFzc2V0SWQEByRtYXRjaDAJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARJrUGFpclByaWNlc0xpc3RLZXkCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQC1CQIFAXMFCXNlcGFyYXRvcgUDbmlsARBrUGFpclNldHRpbmdzS2V5Aw1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAtwcmljZVN0cmluZwkAuQkCCQDMCAICCCVzJXMlZCVzCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQ1hbW91bnRBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQxwcmljZUFzc2V0SWQJAMwIAgULcHJpY2VTdHJpbmcJAMwIAgIIc2V0dGluZ3MFA25pbAUJc2VwYXJhdG9yAQ9nZXRDdXJyZW50UHJpY2UBB2Fzc2V0SWQEEG1hdGNoZXJQdWJsaWNLZXkJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzBRFrTWF0Y2hlclB1YmxpY0tleQkBB3dyYXBFcnIBAhppbnZhbGlkIG1hdGNoZXIgcHVibGljIGtleQQObWF0Y2hlckFkZHJlc3MJAKcIAQUQbWF0Y2hlclB1YmxpY0tleQQFcHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ5tYXRjaGVyQWRkcmVzcwkBBmtQcmljZQEFB2Fzc2V0SWQJAQd3cmFwRXJyAQkArAICAhlpbnZhbGlkIHByaWNlLCBhc3NldElkID0gCQEPYXNzZXRJZFRvU3RyaW5nAQUHYXNzZXRJZAUFcHJpY2UBD2NhbGNUb3RhbENyZWRpdAMHY3JlZGl0QQdjcmVkaXRCDGN1cnJlbnRQcmljZQkAtwICCQC8AgMFB2NyZWRpdEEFDGN1cnJlbnRQcmljZQUMbXVsdDE4QmlnSW50BQdjcmVkaXRCARBjYWxjVG90YWxCYWxhbmNlAwhiYWxhbmNlQQhiYWxhbmNlQgxjdXJyZW50UHJpY2UJALcCAgkAvAIDBQhiYWxhbmNlQQUMY3VycmVudFByaWNlBQxtdWx0MThCaWdJbnQFCGJhbGFuY2VCAQdjYWxjUG5sAgx0b3RhbEJhbGFuY2ULdG90YWxDcmVkaXQJALgCAgUMdG90YWxCYWxhbmNlBQt0b3RhbENyZWRpdAETY2FsY0NyZWRpdEF2YWlsYWJsZQMHZGVwb3NpdAhsZXZlcmFnZQt0b3RhbENyZWRpdAkAuAICCQC8AgMFB2RlcG9zaXQFCGxldmVyYWdlBQxtdWx0MThCaWdJbnQFC3RvdGFsQ3JlZGl0ARBjYWxjUmVhbEluQ3JlZGl0AgZjcmVkaXQHYmFsYW5jZQMJAL8CAgUGY3JlZGl0BQRiaWcwCQC4AgIFBmNyZWRpdAUHYmFsYW5jZQUEYmlnMAEIY2FsY0ZyZWUCBmNyZWRpdAdiYWxhbmNlAwkAvwICBQZjcmVkaXQFBGJpZzAJALgCAgUHYmFsYW5jZQUGY3JlZGl0BQRiaWcwAQ5jYWxjU2hvcnRQcmljZQIEZnJlZQxyZWFsSW5DcmVkaXQDCQC/AgIFDHJlYWxJbkNyZWRpdAUEYmlnMAkAmAMBCQDMCAIFBGJpZzAJAMwIAgkAvAIDBQRmcmVlBQxtdWx0MThCaWdJbnQFDHJlYWxJbkNyZWRpdAUDbmlsBQRiaWcwAQ1jYWxjTG9uZ1ByaWNlAgRmcmVlDHJlYWxJbkNyZWRpdAMJAL8CAgUMcmVhbEluQ3JlZGl0BQRiaWcwCQCYAwEJAMwIAgUEYmlnMAkAzAgCCQC8AgMFDHJlYWxJbkNyZWRpdAUMbXVsdDE4QmlnSW50BQRmcmVlBQNuaWwFBGJpZzABD2NhbGNTdGFydE1hcmdpbgQNcmVhbEluQ3JlZGl0QQ1yZWFsSW5DcmVkaXRCDGN1cnJlbnRQcmljZQ5zZXR0aW5nc01hcmdpbgkAvAIDCQC3AgIJALwCAwUNcmVhbEluQ3JlZGl0QQUMY3VycmVudFByaWNlBQxtdWx0MThCaWdJbnQFDXJlYWxJbkNyZWRpdEIFDnNldHRpbmdzTWFyZ2luBQxtdWx0MThCaWdJbnQBEGNhbGNNYXJnaW5TdXBwbHkDFHNldHRpbmdzTWFyZ2luU3VwcGx5DnNldHRpbmdzTWFyZ2luC3N0YXJ0TWFyZ2luCQC8AgMFFHNldHRpbmdzTWFyZ2luU3VwcGx5BQtzdGFydE1hcmdpbgUOc2V0dGluZ3NNYXJnaW4BFGNhbGNMaXF1aWRhdGlvblByaWNlBgdkZXBvc2l0DG1hcmdpblN1cHBseQ1yZWFsSW5DcmVkaXRBDXJlYWxJbkNyZWRpdEIKc2hvcnRQcmljZQlsb25nUHJpY2UEEWxpcXVpZGF0aW9uUHJpY2VBAwkAvwICBQ1yZWFsSW5DcmVkaXRBBQRiaWcwCQC3AgIJALoCAgkAuAICBQdkZXBvc2l0BQxtYXJnaW5TdXBwbHkFDXJlYWxJbkNyZWRpdEEFCnNob3J0UHJpY2UFBGJpZzAEEWxpcXVpZGF0aW9uUHJpY2VCAwkAvwICBQ1yZWFsSW5DcmVkaXRCBQRiaWcwCQC4AgIFCWxvbmdQcmljZQkAugICCQC4AgIFB2RlcG9zaXQFDG1hcmdpblN1cHBseQkAugICBQ1yZWFsSW5DcmVkaXRBBQlsb25nUHJpY2UFBGJpZzAJALcCAgURbGlxdWlkYXRpb25QcmljZUEFEWxpcXVpZGF0aW9uUHJpY2VCAQxnZXRSZXF1ZXN0SWQBDmFjY291bnRBZGRyZXNzBAlyZXF1ZXN0SWQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEaa0FjY291bnRBZGRyZXNzVG9SZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwkBB3dyYXBFcnIBAjBpbnZhbGlkIGFjY291bnQgYWRkcmVzczogcmVxdWVzdCBpZCBpcyB1bmRlZmluZWQFCXJlcXVlc3RJZAEQZ2V0QWNjb3VudEFzc2V0cwEOYWNjb3VudEFkZHJlc3MECXJlcXVlc3RJZAkBDGdldFJlcXVlc3RJZAEFDmFjY291bnRBZGRyZXNzBA1hbW91bnRBc3NldElkCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQEVa1JlcXVlc3RBbW91bnRBc3NldElkAQUJcmVxdWVzdElkCQEHd3JhcEVycgECF2ludmFsaWQgYW1vdW50IGFzc2V0IGlkBAxwcmljZUFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJARRrUmVxdWVzdFByaWNlQXNzZXRJZAEFCXJlcXVlc3RJZAkBB3dyYXBFcnIBAhdpbnZhbGlkIGFtb3VudCBwcmljZSBpZAkAlAoCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQBGGdldEFjY291bnRPd25lclB1YmxpY0tleQEOYWNjb3VudEFkZHJlc3MECXJlcXVlc3RJZAkBDGdldFJlcXVlc3RJZAEFDmFjY291bnRBZGRyZXNzBBVyZXF1ZXN0T3duZXJQdWJsaWNLZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBFmtSZXF1ZXN0T3duZXJQdWJsaWNLZXkBBQlyZXF1ZXN0SWQJAQd3cmFwRXJyAQIXaW52YWxpZCBhbW91bnQgYXNzZXQgaWQFFXJlcXVlc3RPd25lclB1YmxpY0tleQEWZ2V0QWNjb3VudEluZm9JbnRlcm5hbAEOYWNjb3VudEFkZHJlc3MEDSR0MDExNDIwMTE0ODgJARBnZXRBY2NvdW50QXNzZXRzAQUOYWNjb3VudEFkZHJlc3MEDWFtb3VudEFzc2V0SWQIBQ0kdDAxMTQyMDExNDg4Al8xBAxwcmljZUFzc2V0SWQIBQ0kdDAxMTQyMDExNDg4Al8yBAhsZXZlcmFnZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEJa0xldmVyYWdlAQUOYWNjb3VudEFkZHJlc3MJAQd3cmFwRXJyAQIabGV2ZXJhZ2Ugc2hvdWxkIGJlIGRlZmluZWQECXJlcXVlc3RJZAkBDGdldFJlcXVlc3RJZAEFDmFjY291bnRBZGRyZXNzBBBhY2NvdW50UHVibGljS2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJARxrUmVxdWVzdElkVG9BY2NvdW50UHVibGljS2V5AQUJcmVxdWVzdElkAiZrUmVxdWVzdElkVG9BY2NvdW50UHVibGljS2V5IG5vdCBmb3VuZAQJZGVwb3NpdGVkCQELdmFsdWVPckVsc2UCCQEPZGVwb3NpdGVkT3B0aW9uAQUOYWNjb3VudEFkZHJlc3MAAAQMY3VycmVudFByaWNlCQEFdG9YMTgCCQEPZ2V0Q3VycmVudFByaWNlAQUNYW1vdW50QXNzZXRJZAkBDXBvdzEwRGVjaW1hbHMBBQxwcmljZUFzc2V0SWQEB2NyZWRpdEEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQdrQ3JlZGl0AgUOYWNjb3VudEFkZHJlc3MFDWFtb3VudEFzc2V0SWQAAAQHY3JlZGl0QgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBB2tDcmVkaXQCBQ5hY2NvdW50QWRkcmVzcwUMcHJpY2VBc3NldElkAAAEBnN0YXR1cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEOa1JlcXVlc3RTdGF0dXMBBQlyZXF1ZXN0SWQJAKwCAgIec3RhdHVzIG5vdCBmb3VuZC4gUmVxdWVzdElkID0gCQDYBAEFCXJlcXVlc3RJZAQSc3ludGhBbW91bnRBc3NldElkCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQERa1N5bnRoZXRpY0Fzc2V0SWQBBQ1hbW91bnRBc3NldElkBBdzeW50aEFtb3VudEFzc2V0QmFsYW5jZQQHJG1hdGNoMAUSc3ludGhBbW91bnRBc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkBD2dldEFzc2V0QmFsYW5jZQIJAQxwYXJzZUFzc2V0SWQBBQFzBQ5hY2NvdW50QWRkcmVzcwAABBFzeW50aFByaWNlQXNzZXRJZAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwkBEWtTeW50aGV0aWNBc3NldElkAQUMcHJpY2VBc3NldElkBBZzeW50aFByaWNlQXNzZXRCYWxhbmNlBAckbWF0Y2gwBRFzeW50aFByaWNlQXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAQ9nZXRBc3NldEJhbGFuY2UCCQEMcGFyc2VBc3NldElkAQUBcwUOYWNjb3VudEFkZHJlc3MAAAkAngoMCQEPYXNzZXRJZFRvU3RyaW5nAQUNYW1vdW50QXNzZXRJZAkBD2Fzc2V0SWRUb1N0cmluZwEFDHByaWNlQXNzZXRJZAkApQgBBQ5hY2NvdW50QWRkcmVzcwkA2AQBBRBhY2NvdW50UHVibGljS2V5BQhsZXZlcmFnZQkA2AQBBQlyZXF1ZXN0SWQFCWRlcG9zaXRlZAUHY3JlZGl0QQUHY3JlZGl0QgUXc3ludGhBbW91bnRBc3NldEJhbGFuY2UFFnN5bnRoUHJpY2VBc3NldEJhbGFuY2UFBnN0YXR1cwEPZGVwb3NpdElOVEVSTkFMAw9jYWxsZXJQdWJsaWNLZXkEYXJncwFpBAdwYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEDmFjY291bnRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQRhcmdzAAAJAQd3cmFwRXJyAQIXaW52YWxpZCBhY2NvdW50IGFkZHJlc3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECFTEgcGF5bWVudCBpcyByZXF1aXJlZAkAzAgCAwkAAAIIBQdwYXltZW50B2Fzc2V0SWQFC3VzZHRBc3NldElkBgkBCHRocm93RXJyAQINaW52YWxpZCBhc3NldAkAzAgCAwkAAAIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQ5rUmVxdWVzdFN0YXR1cwEJAQxnZXRSZXF1ZXN0SWQBBQ5hY2NvdW50QWRkcmVzcwUUUkVRVUVTVF9TVEFUVVNfUkVBRFkGCQEIdGhyb3dFcnIBAhRhY2NvdW50IGlzIG5vdCByZWFkeQUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBAdhY3Rpb25zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDmFjY291bnRBZGRyZXNzCAUHcGF5bWVudAZhbW91bnQIBQdwYXltZW50B2Fzc2V0SWQFA25pbAQOZmFjdG9yeUFjdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQprRGVwb3NpdGVkAQUOYWNjb3VudEFkZHJlc3MJAMwIAgkAZAIJAQt2YWx1ZU9yRWxzZQIJAQ9kZXBvc2l0ZWRPcHRpb24BBQ5hY2NvdW50QWRkcmVzcwAACAUHcGF5bWVudAZhbW91bnQFA25pbAUDbmlsBQNuaWwJAJQKAgUHYWN0aW9ucwUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmJvcnJvd0lOVEVSTkFMAw9jYWxsZXJQdWJsaWNLZXkEYXJncwFpBA5hY2NvdW50QWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUEYXJncwAACQEHd3JhcEVycgECF2ludmFsaWQgYWNjb3VudCBhZGRyZXNzBBBhc3NldElkUmVxdWVzdGVkCQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAEED2Ftb3VudFJlcXVlc3RlZAkBDmVuc3VyZVBvc2l0aXZlAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUEYXJncwACCQEHd3JhcEVycgECGGludmFsaWQgcmVxdWVzdGVkIGFtb3VudAIQcmVxdWVzdGVkIGFtb3VudAQVYWNjb3VudE93bmVyUHVibGljS2V5CQEYZ2V0QWNjb3VudE93bmVyUHVibGljS2V5AQUOYWNjb3VudEFkZHJlc3MEC3VzZXJBZGRyZXNzCQCnCAEFD2NhbGxlclB1YmxpY0tleQQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIDCQAAAgUPY2FsbGVyUHVibGljS2V5BRVhY2NvdW50T3duZXJQdWJsaWNLZXkGCQEIdGhyb3dFcnIBAiNjYW4gYmUgY2FsbGVkIGJ5IGFjY291bnQgb3duZXIgb25seQUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBA1hbW91bnRBc3NldElkCAkBEGdldEFjY291bnRBc3NldHMBBQ5hY2NvdW50QWRkcmVzcwJfMQQJZGVwb3NpdGVkCQEFdG9YMTgCCQELdmFsdWVPckVsc2UCCQEPZGVwb3NpdGVkT3B0aW9uAQUOYWNjb3VudEFkZHJlc3MAAAkBDXBvdzEwRGVjaW1hbHMBBQt1c2R0QXNzZXRJZAQMY3VycmVudFByaWNlCQEFdG9YMTgCCQEPZ2V0Q3VycmVudFByaWNlAQUNYW1vdW50QXNzZXRJZAkBDXBvdzEwRGVjaW1hbHMBBQt1c2R0QXNzZXRJZAQHY3JlZGl0QQkBBXRvWDE4AgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBB2tDcmVkaXQCBQ5hY2NvdW50QWRkcmVzcwUNYW1vdW50QXNzZXRJZAAACQENcG93MTBEZWNpbWFscwEFDWFtb3VudEFzc2V0SWQEB2NyZWRpdEIJAQV0b1gxOAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQdrQ3JlZGl0AgUOYWNjb3VudEFkZHJlc3MFC3VzZHRBc3NldElkAAAJAQ1wb3cxMERlY2ltYWxzAQULdXNkdEFzc2V0SWQEC3RvdGFsQ3JlZGl0CQEPY2FsY1RvdGFsQ3JlZGl0AwUHY3JlZGl0QQUHY3JlZGl0QgUMY3VycmVudFByaWNlBAhsZXZlcmFnZQkBBXRvWDE4AgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDmZhY3RvcnlBZGRyZXNzCQEJa0xldmVyYWdlAQUOYWNjb3VudEFkZHJlc3MJAQd3cmFwRXJyAQIabGV2ZXJhZ2Ugc2hvdWxkIGJlIGRlZmluZWQAAQQTY3JlZGl0QXZhaWxhYmxlVXNkdAkBE2NhbGNDcmVkaXRBdmFpbGFibGUDBQlkZXBvc2l0ZWQFCGxldmVyYWdlBQt0b3RhbENyZWRpdAQPY3JlZGl0QXZhaWxhYmxlAwkAAAIFEGFzc2V0SWRSZXF1ZXN0ZWQFDWFtb3VudEFzc2V0SWQJAQdmcm9tWDE4AgkAvAIDBRNjcmVkaXRBdmFpbGFibGVVc2R0BQxtdWx0MThCaWdJbnQFDGN1cnJlbnRQcmljZQkBDXBvdzEwRGVjaW1hbHMBBQ1hbW91bnRBc3NldElkAwkAAAIFEGFzc2V0SWRSZXF1ZXN0ZWQFC3VzZHRBc3NldElkCQEHZnJvbVgxOAIFE2NyZWRpdEF2YWlsYWJsZVVzZHQJAQ1wb3cxMERlY2ltYWxzAQULdXNkdEFzc2V0SWQJAQh0aHJvd0VycgECGmludmFsaWQgcmVxdWVzdGVkIGFzc2V0IGlkBBBzeW50aGV0aWNBc3NldElkCQEMcGFyc2VBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQERa1N5bnRoZXRpY0Fzc2V0SWQBBRBhc3NldElkUmVxdWVzdGVkCQEHd3JhcEVycgECMHN5bnRoZXRpYyBhc3NldCBmb3IgcmVxdWVzdGVkIGFzc2V0IGlzIHVuZGVmaW5lZAQMYW1vdW50VG9TZW5kAwkAZwIFD2NyZWRpdEF2YWlsYWJsZQUPYW1vdW50UmVxdWVzdGVkBQ9hbW91bnRSZXF1ZXN0ZWQJAQh0aHJvd0VycgEJAKwCAgITY3JlZGl0IGF2YWlsYWJsZSA9IAkApAMBBQ9jcmVkaXRBdmFpbGFibGUEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDGludGVnZXJFbnRyeQkAzAgCCQEHa0NyZWRpdAIFDmFjY291bnRBZGRyZXNzBRBhc3NldElkUmVxdWVzdGVkCQDMCAIJAGQCCQELdmFsdWVPckVsc2UCCQEMY3JlZGl0T3B0aW9uAgUOYWNjb3VudEFkZHJlc3MFEGFzc2V0SWRSZXF1ZXN0ZWQAAAUMYW1vdW50VG9TZW5kBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAg10cmFuc2ZlckFzc2V0CQDMCAIIBQ5hY2NvdW50QWRkcmVzcwVieXRlcwkAzAgCBQxhbW91bnRUb1NlbmQJAMwIAgUQc3ludGhldGljQXNzZXRJZAUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwJAMwIAgUOZmFjdG9yeUFjdGlvbnMJAMwIAgUPY3JlZGl0QXZhaWxhYmxlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4QAWkBBGluaXQBEWZhY3RvcnlBZGRyZXNzU3RyBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQgFAWkGY2FsbGVyAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tGYWN0b3J5QWRkcmVzcwURZmFjdG9yeUFkZHJlc3NTdHIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5yZXF1ZXN0QWNjb3VudAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzBBBhbW91bnRBc3NldElkU3RyCQCRAwIFBGFyZ3MAAAQPcHJpY2VBc3NldElkU3RyCQCRAwIFBGFyZ3MAAQQIbGV2ZXJhZ2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFBGFyZ3MAAgkBB3dyYXBFcnIBAhBpbnZhbGlkIGxldmVyYWdlBAt1c2VyQWRkcmVzcwkApwgBBQ9jYWxsZXJQdWJsaWNLZXkECXJlcXVlc3RJZAkA9wMBCQDLAQIJAMsBAggFC3VzZXJBZGRyZXNzBWJ5dGVzCQDZBAEFEGFtb3VudEFzc2V0SWRTdHIJANkEAQUPcHJpY2VBc3NldElkU3RyBA1hbW91bnRBc3NldElkCQEMcGFyc2VBc3NldElkAQUQYW1vdW50QXNzZXRJZFN0cgQMcHJpY2VBc3NldElkCQEMcGFyc2VBc3NldElkAQUPcHJpY2VBc3NldElkU3RyBBJ1c2VyUmVxdWVzdHNOdW1iZXIJAGkCCQCxAgEJARBrUmVxdWVzdHNCeU93bmVyAQULdXNlckFkZHJlc3MFDXF1ZXVlSXRlbVNpemUEBmNoZWNrcwkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECFTEgcGF5bWVudCBpcyByZXF1aXJlZAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAYJAQh0aHJvd0VycgECDWludmFsaWQgYXNzZXQJAMwIAgMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkBDHJld2FyZEFtb3VudAAGCQEIdGhyb3dFcnIBAg5pbnZhbGlkIGFtb3VudAkAzAgCAwkBC3BhaXJBbGxvd2VkAgUNYW1vdW50QXNzZXRJZAUMcHJpY2VBc3NldElkBgkBCHRocm93RXJyAQITcGFpciBpcyBub3QgYWxsb3dlZAkAzAgCAwkAAAIJAJoIAgUOZmFjdG9yeUFkZHJlc3MJAQ5rUmVxdWVzdFN0YXR1cwEFCXJlcXVlc3RJZAUEdW5pdAYJAQh0aHJvd0VycgECGWFjY291bnQgaXMgYWxyZWFkeSBleGlzdHMJAMwIAgMJAGYCCQENYWNjb3VudHNMaW1pdAAFEnVzZXJSZXF1ZXN0c051bWJlcgYJAQh0aHJvd0VycgEJAKwCAgISYWNjb3VudHMgbGltaXQgaXMgCQCkAwEJAQ1hY2NvdW50c0xpbWl0AAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxODYyODIwMDgzCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOZmFjdG9yeUFkZHJlc3MJAQxyZXdhcmRBbW91bnQABQR1bml0BQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQ5rUmVxdWVzdFN0YXR1cwEFCXJlcXVlc3RJZAkAzAgCBRRSRVFVRVNUX1NUQVRVU19FTVBUWQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBDmtSZXF1ZXN0c1F1ZXVlAAkAzAgCCQDLAQIJAQ1yZXF1ZXN0c1F1ZXVlAAUJcmVxdWVzdElkBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBEGtSZXF1ZXN0TGV2ZXJhZ2UBBQlyZXF1ZXN0SWQJAMwIAgUIbGV2ZXJhZ2UFA25pbAUDbmlsBQNuaWwEB2FjdGlvbnMIBQ0kdDAxODYyODIwMDgzAl8xBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDE4NjI4MjAwODMCXzIJAJQKAgUHYWN0aW9ucwkAzggCBQ5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtiaW5hcnlFbnRyeQkAzAgCCQEWa1JlcXVlc3RPd25lclB1YmxpY0tleQEFCXJlcXVlc3RJZAkAzAgCBQ9jYWxsZXJQdWJsaWNLZXkFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2JpbmFyeUVudHJ5CQDMCAIJARBrUmVxdWVzdHNCeU93bmVyAQULdXNlckFkZHJlc3MJAMwIAgkAywECCQEPcmVxdWVzdHNCeU93bmVyAQULdXNlckFkZHJlc3MFCXJlcXVlc3RJZAUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBFWtSZXF1ZXN0QW1vdW50QXNzZXRJZAEFCXJlcXVlc3RJZAkAzAgCBRBhbW91bnRBc3NldElkU3RyBQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQEUa1JlcXVlc3RQcmljZUFzc2V0SWQBBQlyZXF1ZXN0SWQJAMwIAgUPcHJpY2VBc3NldElkU3RyBQNuaWwFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmFkZEFjY291bnQCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZja2Vja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQQY3JlYXRvclB1YmxpY0tleQkA2QQBCQCRAwIFBGFyZ3MAAAQQYWNjb3VudFB1YmxpY0tleQUPY2FsbGVyUHVibGljS2V5BA5hY2NvdW50QWRkcmVzcwkApwgBBQ9jYWxsZXJQdWJsaWNLZXkEDmNyZWF0b3JBZGRyZXNzCQCnCAEFEGNyZWF0b3JQdWJsaWNLZXkEBmNoZWNrcwkAzAgCAwkAAAIJAJwIAgUOZmFjdG9yeUFkZHJlc3MJARhrQWNjb3VudENyZWF0b3JQdWJsaWNLZXkBBQ5hY2NvdW50QWRkcmVzcwUEdW5pdAYJAQh0aHJvd0VycgECGWFjY291bnQgaXMgYWxyZWFkeSBleGlzdHMJAMwIAgMEByRtYXRjaDAJAPEHAQUOYWNjb3VudEFkZHJlc3MDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkAAAIFAWIJAPEVAQkBDWFjY291bnRTY3JpcHQABwYJAQh0aHJvd0VycgECDmludmFsaWQgc2NyaXB0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDSR0MDIxMzM4MjI2NDkDCQAAAgkAyAEBCQENcmVxdWVzdHNRdWV1ZQAAAAkAlAoCBQNuaWwFA25pbAQJcmVxdWVzdElkCQDJAQIJAQ1yZXF1ZXN0c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQQIbGV2ZXJhZ2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ5mYWN0b3J5QWRkcmVzcwkBEGtSZXF1ZXN0TGV2ZXJhZ2UBBQlyZXF1ZXN0SWQJAQd3cmFwRXJyAQIfcmVxdWVzdCdzIGxldmVyYWdlIGlzIHVuZGVmaW5lZAkAlAoCBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMaW50ZWdlckVudHJ5CQDMCAIJAQ5rUmVxdWVzdFN0YXR1cwEFCXJlcXVlc3RJZAkAzAgCBRRSRVFVRVNUX1NUQVRVU19SRUFEWQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBHGtSZXF1ZXN0SWRUb0FjY291bnRQdWJsaWNLZXkBBQlyZXF1ZXN0SWQJAMwIAgUQYWNjb3VudFB1YmxpY0tleQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBDmtSZXF1ZXN0c1F1ZXVlAAkAzAgCCQDKAQIJAQ1yZXF1ZXN0c1F1ZXVlAAUNcXVldWVJdGVtU2l6ZQUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBGmtBY2NvdW50QWRkcmVzc1RvUmVxdWVzdElkAQUOYWNjb3VudEFkZHJlc3MJAMwIAgkA2AQBBQlyZXF1ZXN0SWQFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCDXRyYW5zZmVyV2F2ZXMJAMwIAggFDmNyZWF0b3JBZGRyZXNzBWJ5dGVzCQDMCAIJAQxyZXdhcmRBbW91bnQABQNuaWwFA25pbAkAzAgCCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgxpbnRlZ2VyRW50cnkJAMwIAgkBCWtMZXZlcmFnZQEFDmFjY291bnRBZGRyZXNzCQDMCAIFCGxldmVyYWdlBQNuaWwFA25pbAUDbmlsBAdhY3Rpb25zCAUNJHQwMjEzMzgyMjY0OQJfMQQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAyMTMzODIyNjQ5Al8yCQCUCgIFB2FjdGlvbnMJAM4IAgUOZmFjdG9yeUFjdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILYmluYXJ5RW50cnkJAMwIAgkBGGtBY2NvdW50Q3JlYXRvclB1YmxpY0tleQEFDmFjY291bnRBZGRyZXNzCQDMCAIFEGNyZWF0b3JQdWJsaWNLZXkFA25pbAUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZjaGVja3MJAMwIAgMJAQEhAQUIc2h1dGRvd24GCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLdXNlckFkZHJlc3MJAKcIAQUPY2FsbGVyUHVibGljS2V5BA5hY2NvdW50QWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUEYXJncwAACQEHd3JhcEVycgECF2ludmFsaWQgYWNjb3VudCBhZGRyZXNzBAZhbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFBGFyZ3MAAQkBB3dyYXBFcnIBAg5pbnZhbGlkIGFtb3VudAQHYXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEJAJEDAgUEYXJncwACBAtpbnZvY2F0aW9ucwkAzAgCCQD8BwQFDmFjY291bnRBZGRyZXNzAg10cmFuc2ZlckFzc2V0CQDMCAIIBQt1c2VyQWRkcmVzcwVieXRlcwkAzAgCBQZhbW91bnQJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFC2ludm9jYXRpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2RlcG9zaXQCD2NhbGxlclB1YmxpY0tleQRhcmdzBA0kdDAyMzY3MDIzNzQzCQEPZGVwb3NpdElOVEVSTkFMAwUPY2FsbGVyUHVibGljS2V5BQRhcmdzBQFpBAdhY3Rpb25zCAUNJHQwMjM2NzAyMzc0MwJfMQQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAyMzY3MDIzNzQzAl8yCQCUCgIFB2FjdGlvbnMFDmZhY3RvcnlBY3Rpb25zAWkBBmJvcnJvdwIPY2FsbGVyUHVibGljS2V5BGFyZ3MEDSR0MDIzODk4MjM5NzAJAQ5ib3Jyb3dJTlRFUk5BTAMFD2NhbGxlclB1YmxpY0tleQUEYXJncwUBaQQHYWN0aW9ucwgFDSR0MDIzODk4MjM5NzACXzEEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjM4OTgyMzk3MAJfMgkAlAoCBQdhY3Rpb25zBQ5mYWN0b3J5QWN0aW9ucwFpARBkZXBvc2l0QW5kQm9ycm93Ag9jYWxsZXJQdWJsaWNLZXkEYXJncwQOYWNjb3VudEFkZHJlc3MJAJEDAgUEYXJncwAABA0kdDAyNDE2NjI0MjY1CQEPZGVwb3NpdElOVEVSTkFMAwUPY2FsbGVyUHVibGljS2V5CQDMCAIFDmFjY291bnRBZGRyZXNzBQNuaWwFAWkEDmRlcG9zaXRBY3Rpb25zCAUNJHQwMjQxNjYyNDI2NQJfMQQVZGVwb3NpdEZhY3RvcnlBY3Rpb25zCAUNJHQwMjQxNjYyNDI2NQJfMgQNJHQwMjQyNjgyNDM1MgkBDmJvcnJvd0lOVEVSTkFMAwUPY2FsbGVyUHVibGljS2V5BQRhcmdzBQFpBA1ib3Jyb3dBY3Rpb25zCAUNJHQwMjQyNjgyNDM1MgJfMQQUYm9ycm93RmFjdG9yeUFjdGlvbnMIBQ0kdDAyNDI2ODI0MzUyAl8yCQCUCgIJAM4IAgUOZGVwb3NpdEFjdGlvbnMFDWJvcnJvd0FjdGlvbnMJAM4IAgUVZGVwb3NpdEZhY3RvcnlBY3Rpb25zBRRib3Jyb3dGYWN0b3J5QWN0aW9ucwFpAQVyZXBheQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNrZWNrcwkAzAgCAwkBASEBBQhzaHV0ZG93bgYJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkCQDMCAIJAQttdXN0RmFjdG9yeQEIBQFpBmNhbGxlcgUDbmlsAwkAAAIFBmNrZWNrcwUGY2tlY2tzCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzZXRQYWlyQWxsb3dhbmNlAg9jYWxsZXJQdWJsaWNLZXkEYXJncwQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIJAQltdXN0QWRtaW4BBQ9jYWxsZXJQdWJsaWNLZXkFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQQYW1vdW50QXNzZXRJZFN0cgkAkQMCBQRhcmdzAAAED3ByaWNlQXNzZXRJZFN0cgkAkQMCBQRhcmdzAAEECGFsbG93U3RyCQCRAwIFBGFyZ3MAAgQNYW1vdW50QXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFEGFtb3VudEFzc2V0SWRTdHIEDHByaWNlQXNzZXRJZAkBDHBhcnNlQXNzZXRJZAEFD3ByaWNlQXNzZXRJZFN0cgQFYWxsb3cJAAACBQhhbGxvd1N0cgIEdHJ1ZQQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMYm9vbGVhbkVudHJ5CQDMCAIJAQxrUGFpckFsbG93ZWQCBQ1hbW91bnRBc3NldElkBQxwcmljZUFzc2V0SWQJAMwIAgUFYWxsb3cFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFhZGRTeW50aGV0aWNBc3NldAIPY2FsbGVyUHVibGljS2V5BGFyZ3MEC2Jhc2VBc3NldElkCQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAAEEHN5bnRoZXRpY0Fzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFBGFyZ3MAAQQGY2tlY2tzCQDMCAIDCQEBIQEFCHNodXRkb3duBgkBCHRocm93RXJyAQILbm90IGFsbG93ZWQJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIJAQltdXN0QWRtaW4BBQ9jYWxsZXJQdWJsaWNLZXkJAMwIAgMJAAACCQCdCAIFDmZhY3RvcnlBZGRyZXNzCQERa1N5bnRoZXRpY0Fzc2V0SWQBBQtiYXNlQXNzZXRJZAUEdW5pdAYJAQh0aHJvd0VycgECEmludmFsaWQgYmFzZSBhc3NldAkAzAgCAwkAAAIJAJ0IAgUOZmFjdG9yeUFkZHJlc3MJAQxrQmFzZUFzc2V0SWQBBRBzeW50aGV0aWNBc3NldElkBQR1bml0BgkBCHRocm93RXJyAQIXaW52YWxpZCBzeW50aGV0aWMgYXNzZXQFA25pbAMJAAACBQZja2Vja3MFBmNrZWNrcwQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBEWtTeW50aGV0aWNBc3NldElkAQULYmFzZUFzc2V0SWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFEHN5bnRoZXRpY0Fzc2V0SWQFA25pbAUDbmlsCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJAQxrQmFzZUFzc2V0SWQBBRBzeW50aGV0aWNBc3NldElkCQDMCAIJAQ9hc3NldElkVG9TdHJpbmcBBQtiYXNlQXNzZXRJZAUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFC2ludm9jYXRpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmRvU2h1dGRvd24CD2NhbGxlclB1YmxpY0tleQRhcmdzBAZjaGVja3MJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyCQDMCAIJAQltdXN0QWRtaW4BBQ9jYWxsZXJQdWJsaWNLZXkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQLaW52b2NhdGlvbnMJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwIMYm9vbGVhbkVudHJ5CQDMCAIFCWtTaHV0ZG93bgkAzAgCBgUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFC2ludm9jYXRpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmdldEFjY291bnRJbmZvUkVBRE9OTFkCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZjaGVja3MJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDmFjY291bnRBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQRhcmdzAAAJAQd3cmFwRXJyAQIXaW52YWxpZCBhY2NvdW50IGFkZHJlc3MEBGRhdGEJARZnZXRBY2NvdW50SW5mb0ludGVybmFsAQUOYWNjb3VudEFkZHJlc3MJAJQKAgUDbmlsBQRkYXRhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2dldFVzZXJJbmZvUkVBRE9OTFkCD2NhbGxlclB1YmxpY0tleQRhcmdzBAZjaGVja3MJAMwIAgkBC211c3RGYWN0b3J5AQgFAWkGY2FsbGVyBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEC3VzZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQRhcmdzAAAJAQd3cmFwRXJyAQIUaW52YWxpZCB1c2VyIGFkZHJlc3MEDHVzZXJSZXF1ZXN0cwkBC3ZhbHVlT3JFbHNlAgkAnAgCBQ5mYWN0b3J5QWRkcmVzcwkBEGtSZXF1ZXN0c0J5T3duZXIBBQt1c2VyQWRkcmVzcwEABBJ1c2VyUmVxdWVzdHNOdW1iZXIJAGkCCQDIAQEFDHVzZXJSZXF1ZXN0cwUNcXVldWVJdGVtU2l6ZQoBD2dldEFjY291bnRzRGF0YQIDYWNjBWNvdW50BA0kdDAyNzI4NTI3MzI3BQNhY2MEC2FjY0RhdGFMaXN0CAUNJHQwMjcyODUyNzMyNwJfMQQIcmF3Qnl0ZXMIBQ0kdDAyNzI4NTI3MzI3Al8yBAdtYXhTaXplCAUNJHQwMjcyODUyNzMyNwJfMwMJAGYCBQdtYXhTaXplBQVjb3VudAQJcmVxdWVzdElkCQDJAQIFCHJhd0J5dGVzBQ1xdWV1ZUl0ZW1TaXplBAtuZXdSYXdCeXRlcwkAygECBQhyYXdCeXRlcwUNcXVldWVJdGVtU2l6ZQQQYWNjb3VudFB1YmxpY0tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmZhY3RvcnlBZGRyZXNzCQEca1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleQEFCXJlcXVlc3RJZAIma1JlcXVlc3RJZFRvQWNjb3VudFB1YmxpY0tleSBub3QgZm91bmQEDmFjY291bnRBZGRyZXNzCQCnCAEFEGFjY291bnRQdWJsaWNLZXkEBGRhdGEJARZnZXRBY2NvdW50SW5mb0ludGVybmFsAQUOYWNjb3VudEFkZHJlc3MJAJUKAwkAzQgCBQthY2NEYXRhTGlzdAUEZGF0YQULbmV3UmF3Qnl0ZXMFB21heFNpemUFA2FjYwQNJHQwMjc4MzEyNzkzNgoAAiRsBQpJTkRFWF9MSVNUCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFDHVzZXJSZXF1ZXN0cwUSdXNlclJlcXVlc3RzTnVtYmVyCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9nZXRBY2NvdW50c0RhdGECBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQLYWNjRGF0YUxpc3QIBQ0kdDAyNzgzMTI3OTM2Al8xBAJfYQgFDSR0MDI3ODMxMjc5MzYCXzIEAl9iCAUNJHQwMjc4MzEyNzkzNgJfMwkAlAoCBQNuaWwFC2FjY0RhdGFMaXN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBG2dldFBhaXJTZXR0aW5nc0luZm9SRUFET05MWQIPY2FsbGVyUHVibGljS2V5BGFyZ3MEC2Ftb3VudEFzc2V0CQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAAECnByaWNlQXNzZXQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFBGFyZ3MAAQQKcHJpY2VzTGlzdAkBEWdldFBhaXJQcmljZXNMaXN0AgULYW1vdW50QXNzZXQFCnByaWNlQXNzZXQKAQ9nZXRQYWlyU2V0dGluZ3MCA2FjYwxwcmljZXNTdHJpbmcEC3NldHRpbmdzS2V5CQEQa1BhaXJTZXR0aW5nc0tleQMFC2Ftb3VudEFzc2V0BQpwcmljZUFzc2V0BQxwcmljZXNTdHJpbmcEE3NldHRpbmdzU3RyaW5nVmFsdWUJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDmZhY3RvcnlBZGRyZXNzBQtzZXR0aW5nc0tleQQFc0xpc3QJALUJAgUTc2V0dGluZ3NTdHJpbmdWYWx1ZQUJc2VwYXJhdG9yBAVwcmljZQkAtgkBBQxwcmljZXNTdHJpbmcEC21heExldmVyYWdlCQC2CQEJAJEDAgUFc0xpc3QAAQQNaW5pdGlhbE1hcmdpbgkAtgkBCQCRAwIFBXNMaXN0AAIEEW1haW50ZW5hbmNlTWFyZ2luCQC2CQEJAJEDAgUFc0xpc3QAAwkAzQgCBQNhY2MJAJYKBAUFcHJpY2UFC21heExldmVyYWdlBQ1pbml0aWFsTWFyZ2luBRFtYWludGVuYW5jZU1hcmdpbgQEZGF0YQoAAiRsBQpwcmljZXNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9nZXRQYWlyU2V0dGluZ3MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAlAoCBQNuaWwFBGRhdGEBaQEQZWRpdFBhaXJTZXR0aW5ncwIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNoZWNrcwkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIJAMwIAgkBCW11c3RBZG1pbgEFD2NhbGxlclB1YmxpY0tleQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAthbW91bnRBc3NldAkBDHBhcnNlQXNzZXRJZAEJAJEDAgUEYXJncwAABApwcmljZUFzc2V0CQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAEEBXByaWNlCQCRAwIFBGFyZ3MAAgQLbWF4TGV2ZXJhZ2UJAJEDAgUEYXJncwADBA1pbml0aWFsTWFyZ2luCQCRAwIFBGFyZ3MABAQRbWFpbnRlbmFuY2VNYXJnaW4JAJEDAgUEYXJncwAFBBFwYWlyUHJpY2VzTGlzdEtleQkBEmtQYWlyUHJpY2VzTGlzdEtleQIFC2Ftb3VudEFzc2V0BQpwcmljZUFzc2V0BAtzZXR0aW5nc0tleQkBEGtQYWlyU2V0dGluZ3NLZXkDBQthbW91bnRBc3NldAUKcHJpY2VBc3NldAUFcHJpY2UECnByaWNlc0xpc3QJARFnZXRQYWlyUHJpY2VzTGlzdAIFC2Ftb3VudEFzc2V0BQpwcmljZUFzc2V0BAduZXdMaXN0BAckbWF0Y2gwCQDPCAIFCnByaWNlc0xpc3QFBXByaWNlAwkAAQIFByRtYXRjaDACA0ludAQDaW5kBQckbWF0Y2gwBQpwcmljZXNMaXN0CQDNCAIFCnByaWNlc0xpc3QFBXByaWNlBAZjaGVjazIJAMwIAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFBXByaWNlCQEHd3JhcEVycgECGXByaWNlIHZhbHVlIGlzIG5vdCBhbiBJbnQJAMwIAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQttYXhMZXZlcmFnZQkBB3dyYXBFcnIBAh9tYXhMZXZlcmFnZSB2YWx1ZSBpcyBub3QgYW4gSW50CQDMCAIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUNaW5pdGlhbE1hcmdpbgkBB3dyYXBFcnIBAiFpbml0aWFsTWFyZ2luIHZhbHVlIGlzIG5vdCBhbiBJbnQJAMwIAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRFtYWludGVuYW5jZU1hcmdpbgkBB3dyYXBFcnIBAiVtYWludGVuYW5jZU1hcmdpbiB2YWx1ZSBpcyBub3QgYW4gSW50CQDMCAIDCQBnAgAUCQCQAwEFB25ld0xpc3QGCQEIdGhyb3dFcnIBAiJleGNlZWRlZCBtYXggcHJpY2VzIGxpc3Qgc2l6ZSAoMjApBQNuaWwDCQAAAgUGY2hlY2syBQZjaGVjazIEEHBhaXJTZXR0aW5nVmFsdWUJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgULbWF4TGV2ZXJhZ2UJAMwIAgUNaW5pdGlhbE1hcmdpbgkAzAgCBRFtYWludGVuYW5jZU1hcmdpbgUDbmlsBQlzZXBhcmF0b3IEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC3N0cmluZ0VudHJ5CQDMCAIJARJrUGFpclByaWNlc0xpc3RLZXkCBQthbW91bnRBc3NldAUKcHJpY2VBc3NldAkAzAgCCQC5CQIFB25ld0xpc3QFCXNlcGFyYXRvcgUDbmlsBQNuaWwJAMwIAgkA/AcEBQ5mYWN0b3J5QWRkcmVzcwILc3RyaW5nRW50cnkJAMwIAgkBEGtQYWlyU2V0dGluZ3NLZXkDBQthbW91bnRBc3NldAUKcHJpY2VBc3NldAUFcHJpY2UJAMwIAgUQcGFpclNldHRpbmdWYWx1ZQUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFC2ludm9jYXRpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEmRlbGV0ZVBhaXJTZXR0aW5ncwIPY2FsbGVyUHVibGljS2V5BGFyZ3MEBmNoZWNrcwkAzAgCCQELbXVzdEZhY3RvcnkBCAUBaQZjYWxsZXIJAMwIAgkBCW11c3RBZG1pbgEFD2NhbGxlclB1YmxpY0tleQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAthbW91bnRBc3NldAkBDHBhcnNlQXNzZXRJZAEJAJEDAgUEYXJncwAABApwcmljZUFzc2V0CQEMcGFyc2VBc3NldElkAQkAkQMCBQRhcmdzAAEEBXByaWNlCQCRAwIFBGFyZ3MAAgQLc2V0dGluZ3NLZXkJARBrUGFpclNldHRpbmdzS2V5AwULYW1vdW50QXNzZXQFCnByaWNlQXNzZXQFBXByaWNlBBFwYWlyUHJpY2VzTGlzdEtleQkBEmtQYWlyUHJpY2VzTGlzdEtleQIFC2Ftb3VudEFzc2V0BQpwcmljZUFzc2V0BApwcmljZXNMaXN0CQERZ2V0UGFpclByaWNlc0xpc3QCBQthbW91bnRBc3NldAUKcHJpY2VBc3NldAQHbmV3TGlzdAQHJG1hdGNoMAkAzwgCBQpwcmljZXNMaXN0BQVwcmljZQMJAAECBQckbWF0Y2gwAgNJbnQEA2luZAUHJG1hdGNoMAkA0QgCBQpwcmljZXNMaXN0BQNpbmQFCnByaWNlc0xpc3QEC2ludm9jYXRpb25zCQDMCAIJAPwHBAUOZmFjdG9yeUFkZHJlc3MCC2RlbGV0ZUVudHJ5CQDMCAIFC3NldHRpbmdzS2V5BQNuaWwFA25pbAkAzAgCAwkAAAIJAJADAQUHbmV3TGlzdAAACQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtkZWxldGVFbnRyeQkAzAgCCQESa1BhaXJQcmljZXNMaXN0S2V5AgULYW1vdW50QXNzZXQFCnByaWNlQXNzZXQFA25pbAUDbmlsCQD8BwQFDmZhY3RvcnlBZGRyZXNzAgtzdHJpbmdFbnRyeQkAzAgCCQESa1BhaXJQcmljZXNMaXN0S2V5AgULYW1vdW50QXNzZXQFCnByaWNlQXNzZXQJAMwIAgkAuQkCBQduZXdMaXN0BQlzZXBhcmF0b3IFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQtpbnZvY2F0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQADAwkBCWlzRGVmaW5lZAEFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEJaXNEZWZpbmVkAQkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnBwQHJG1hdGNoMAkAnQgCBQ5mYWN0b3J5QWRkcmVzcwUJa011bHRpc2lnAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAECXN0YXR1c0tleQkBB2tTdGF0dXMCCQClCAEFBHRoaXMJANgEAQgFAnR4AmlkBAZzdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcFCXN0YXR1c0tleQcFBnN0YXR1cwcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmrzGUl", "chainId": 84, "height": 3255739, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HXTKVZ667TfaWfnxf93X96BJni83XQPZ4Qtke3mU5m2F Next: A7YETDhSCzJGMoQUktAxZAMXJLmVrnG4dmGnquGdajnc Diff:
OldNewDifferences
529529 if ((cv == cv))
530530 then {
531531 let cA = if ((size(aN()) == 0))
532- then $Tuple2(D("requests is empty"), nil)
532+ then $Tuple2(nil, nil)
533533 else {
534534 let ay = take(aN(), j)
535535 let bs = valueOrErrorMessage(getInteger(T, ax(ay)), B("request's leverage is undefined"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = take(drop(this.bytes, 1), 1)
77
88 let c = base58'2W'
99
1010 let d = "futures_calculator.ride"
1111
1212 let e = 100000000
1313
1414 let f = toBigInt(1000000000000000000)
1515
1616 let g = 8
1717
1818 let h = 6
1919
2020 let i = "WAVES"
2121
2222 let j = 32
2323
2424 let k = toBigInt(0)
2525
2626 let l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
2727
2828 let m = "%s__multisig"
2929
3030 func n (o,p) = makeString(["%s__status", o, p], a)
3131
3232
3333 let q = "%s__shutdown"
3434
3535 let r = "%s__publicKeys"
3636
3737 let s = "%s__matcherPublicKey"
3838
3939 func t (u,v) = fraction(toBigInt(u), f, toBigInt(v))
4040
4141
4242 func w (x,y) = toInt(fraction(x, toBigInt(y), f))
4343
4444
4545 func z (A) = isDefined(addressFromString(A))
4646
4747
4848 func B (C) = ((d + ": ") + C)
4949
5050
5151 func D (C) = throw(B(C))
5252
5353
5454 func E (F,C) = if ((F >= 0))
5555 then F
5656 else D((C + " value should be positive"))
5757
5858
5959 func G (H) = if ((H == i))
6060 then unit
6161 else fromBase58String(H)
6262
6363
6464 func I (H) = if ((H == unit))
6565 then i
6666 else toBase58String(value(H))
6767
6868
6969 func J (K) = valueOrErrorMessage(assetInfo(K), B("invalid asset info"))
7070
7171
7272 func L (K) = {
7373 let M = K
7474 if ($isInstanceOf(M, "Unit"))
7575 then g
7676 else if ($isInstanceOf(M, "ByteVector"))
7777 then {
7878 let K = M
7979 J(K).decimals
8080 }
8181 else throw("Match error")
8282 }
8383
8484
8585 func N (K,A) = {
8686 let M = K
8787 if ($isInstanceOf(M, "Unit"))
8888 then wavesBalance(A).available
8989 else if ($isInstanceOf(M, "ByteVector"))
9090 then {
9191 let K = M
9292 assetBalance(A, K)
9393 }
9494 else throw("Match error")
9595 }
9696
9797
9898 func O (P) = pow(10, 0, P, 0, 0, DOWN)
9999
100100
101101 func Q (K) = O(L(K))
102102
103103
104104 let R = "%s__factoryAddress"
105105
106106 let S = {
107107 let M = getString(this, R)
108108 if ($isInstanceOf(M, "String"))
109109 then {
110110 let C = M
111111 addressFromString(C)
112112 }
113113 else if ($isInstanceOf(M, "Unit"))
114114 then unit
115115 else throw("Match error")
116116 }
117117
118118 let T = valueOrErrorMessage(S, B("invalid factory address"))
119119
120120 let U = "%s__usdtAssetId"
121121
122122 let V = {
123123 let M = getString(T, U)
124124 if ($isInstanceOf(M, "String"))
125125 then {
126126 let C = M
127127 G(C)
128128 }
129129 else if ($isInstanceOf(M, "Unit"))
130130 then unit
131131 else throw("Match error")
132132 }
133133
134134 let W = valueOrErrorMessage(V, B("invalid usdt asset id"))
135135
136136 let X = "%s__calculatorAddress"
137137
138138 let Y = valueOrElse(getBoolean(T, q), false)
139139
140140 func Z (aa,A) = if ((aa == A))
141141 then true
142142 else D("permission denied")
143143
144144
145145 func ab (aa) = Z(aa, this)
146146
147147
148148 func ac (aa) = Z(aa, T)
149149
150150
151151 func ad (ae) = {
152152 let af = getString(T, m)
153153 let ag = {
154154 let M = af
155155 if ($isInstanceOf(M, "String"))
156156 then {
157157 let ah = M
158158 let ai = addressFromStringValue(ah)
159159 let aj = split(getStringValue(ai, r), a)
160160 containsElement(aj, toBase58String(ae))
161161 }
162162 else (addressFromPublicKey(ae) == T)
163163 }
164164 if (ag)
165165 then true
166166 else D("not allowed")
167167 }
168168
169169
170170 let ak = "%s__accountScript"
171171
172172 func al () = valueOrErrorMessage(getBinary(T, ak), B("account script is not set"))
173173
174174
175175 let am = "%s__rewardAmount"
176176
177177 func an () = valueOrErrorMessage(getInteger(T, am), B("reward amount is not set"))
178178
179179
180180 let ao = "%s__accountsLimit"
181181
182182 let ap = 20
183183
184184 func aq () = valueOrElse(getInteger(T, ao), ap)
185185
186186
187187 func ar (as) = makeString(["%s%s", "deposited", toString(as)], a)
188188
189189
190190 func at (as) = getInteger(T, ar(as))
191191
192192
193193 func au (as,K) = makeString(["%s%s%s", "credit", toString(as), I(K)], a)
194194
195195
196196 func av (as,K) = getInteger(T, au(as, K))
197197
198198
199199 func aw (as) = makeString(["%s%s", "leverage", toString(as)], a)
200200
201201
202202 func ax (ay) = makeString(["%s%s", "requestLeverage", toBase58String(ay)], a)
203203
204204
205205 func az (aA) = makeString(["%s%s", "syntheticAssetId", I(aA)], a)
206206
207207
208208 func aB (aC) = makeString(["%s%s", "baseAssetId", I(aC)], a)
209209
210210
211211 let aD = 0
212212
213213 let aE = 1
214214
215215 func aF (ay) = makeString(["%s%s", toBase58String(ay), "status"], a)
216216
217217
218218 func aG (as) = makeString(["%s%s", toString(as), "creatorPublicKey"], a)
219219
220220
221221 func aH (ay) = makeString(["%s%s", toBase58String(ay), "ownerPublicKey"], a)
222222
223223
224224 func aI (ay) = makeString(["%s%s", toBase58String(ay), "amountAssetId"], a)
225225
226226
227227 func aJ (ay) = makeString(["%s%s", toBase58String(ay), "priceAssetId"], a)
228228
229229
230230 func aK (ay) = makeString(["%s%s", toBase58String(ay), "requestIdToAccountPublicKey"], a)
231231
232232
233233 func aL (as) = makeString(["%s%s", toString(as), "accountAddressToRequestId"], a)
234234
235235
236236 func aM () = makeString(["%s", "requestsQueue"], a)
237237
238238
239239 func aN () = valueOrElse(getBinary(T, aM()), base58'')
240240
241241
242242 func aO () = makeString(["%s", "accountsQueue"], a)
243243
244244
245245 func aP () = valueOrElse(getBinary(T, aO()), base58'')
246246
247247
248248 func aQ (aR) = makeString(["%s%s", "requests", toString(aR)], a)
249249
250250
251251 func aS (aR) = valueOrElse(getBinary(T, aQ(aR)), base58'')
252252
253253
254254 func aT (aU,aV) = makeString(["%s%s%s", I(aU), I(aV), "pairAllowed"], a)
255255
256256
257257 func aW (aU,aV) = valueOrElse(getBoolean(T, aT(aU, aV)), false)
258258
259259
260260 func aX (K) = makeString(["%s", I(K)], a)
261261
262262
263263 func aY (aU,aV) = makeString(["%s%s%s", I(aU), I(aV), "pairSettingPrices"], a)
264264
265265
266266 func aZ (aU,aV) = {
267267 let M = getString(T, aY(aU, aV))
268268 if ($isInstanceOf(M, "String"))
269269 then {
270270 let C = M
271271 split(C, a)
272272 }
273273 else nil
274274 }
275275
276276
277277 func ba (aU,aV,bb) = makeString(["%s%s%d%s", I(aU), I(aV), bb, "settings"], a)
278278
279279
280280 func bc (K) = {
281281 let bd = fromBase58String(valueOrErrorMessage(getString(T, s), B("invalid matcher public key")))
282282 let be = addressFromPublicKey(bd)
283283 let bf = valueOrErrorMessage(getInteger(be, aX(K)), B(("invalid price, assetId = " + I(K))))
284284 bf
285285 }
286286
287287
288288 func bg (bh,bi,bj) = (fraction(bh, bj, f) + bi)
289289
290290
291291 func bk (bl,bm,bj) = (fraction(bl, bj, f) + bm)
292292
293293
294294 func bn (bo,bp) = (bo - bp)
295295
296296
297297 func bq (br,bs,bp) = (fraction(br, bs, f) - bp)
298298
299299
300300 func bt (bu,bv) = if ((bu > k))
301301 then (bu - bv)
302302 else k
303303
304304
305305 func bw (bu,bv) = if ((bu > k))
306306 then (bv - bu)
307307 else k
308308
309309
310310 func bx (by,bz) = if ((bz > k))
311311 then max([k, fraction(by, f, bz)])
312312 else k
313313
314314
315315 func bA (by,bz) = if ((bz > k))
316316 then max([k, fraction(bz, f, by)])
317317 else k
318318
319319
320320 func bB (bC,bD,bj,bE) = fraction((fraction(bC, bj, f) + bD), bE, f)
321321
322322
323323 func bF (bG,bE,bH) = fraction(bG, bH, bE)
324324
325325
326326 func bI (br,bJ,bC,bD,bK,bL) = {
327327 let bM = if ((bC > k))
328328 then (((br - bJ) / bC) + bK)
329329 else k
330330 let bN = if ((bD > k))
331331 then (bL - ((br - bJ) / (bC / bL)))
332332 else k
333333 (bM + bN)
334334 }
335335
336336
337337 func bO (as) = {
338338 let ay = fromBase58String(valueOrErrorMessage(getString(T, aL(as)), B("invalid account address: request id is undefined")))
339339 ay
340340 }
341341
342342
343343 func bP (as) = {
344344 let ay = bO(as)
345345 let aU = G(valueOrErrorMessage(getString(T, aI(ay)), B("invalid amount asset id")))
346346 let aV = G(valueOrErrorMessage(getString(T, aJ(ay)), B("invalid amount price id")))
347347 $Tuple2(aU, aV)
348348 }
349349
350350
351351 func bQ (as) = {
352352 let ay = bO(as)
353353 let bR = valueOrErrorMessage(getBinary(T, aH(ay)), B("invalid amount asset id"))
354354 bR
355355 }
356356
357357
358358 func bS (as) = {
359359 let bT = bP(as)
360360 let aU = bT._1
361361 let aV = bT._2
362362 let bs = valueOrErrorMessage(getInteger(T, aw(as)), B("leverage should be defined"))
363363 let ay = bO(as)
364364 let bU = valueOrErrorMessage(getBinary(T, aK(ay)), "kRequestIdToAccountPublicKey not found")
365365 let bV = valueOrElse(at(as), 0)
366366 let bj = t(bc(aU), Q(aV))
367367 let bh = valueOrElse(getInteger(T, au(as, aU)), 0)
368368 let bi = valueOrElse(getInteger(T, au(as, aV)), 0)
369369 let bW = valueOrErrorMessage(getInteger(T, aF(ay)), ("status not found. RequestId = " + toBase58String(ay)))
370370 let bX = getString(T, az(aU))
371371 let bY = {
372372 let M = bX
373373 if ($isInstanceOf(M, "String"))
374374 then {
375375 let C = M
376376 N(G(C), as)
377377 }
378378 else 0
379379 }
380380 let bZ = getString(T, az(aV))
381381 let ca = {
382382 let M = bZ
383383 if ($isInstanceOf(M, "String"))
384384 then {
385385 let C = M
386386 N(G(C), as)
387387 }
388388 else 0
389389 }
390390 $Tuple12(I(aU), I(aV), toString(as), toBase58String(bU), bs, toBase58String(ay), bV, bh, bi, bY, ca, bW)
391391 }
392392
393393
394394 func cb (ae,cc,cd) = {
395395 let ce = cd.payments[0]
396396 let as = valueOrErrorMessage(addressFromString(cc[0]), B("invalid account address"))
397397 let cf = [if (!(Y))
398398 then true
399399 else D("not allowed"), ac(cd.caller), if ((size(cd.payments) == 1))
400400 then true
401401 else D("1 payment is required"), if ((ce.assetId == W))
402402 then true
403403 else D("invalid asset"), if ((getInteger(T, aF(bO(as))) == aE))
404404 then true
405405 else D("account is not ready")]
406406 if ((cf == cf))
407407 then {
408408 let cg = [ScriptTransfer(as, ce.amount, ce.assetId)]
409409 let ch = [invoke(T, "integerEntry", [ar(as), (valueOrElse(at(as), 0) + ce.amount)], nil)]
410410 $Tuple2(cg, ch)
411411 }
412412 else throw("Strict value is not equal to itself.")
413413 }
414414
415415
416416 func ci (ae,cc,cd) = {
417417 let as = valueOrErrorMessage(addressFromString(cc[0]), B("invalid account address"))
418418 let cj = G(cc[1])
419419 let ck = E(valueOrErrorMessage(parseInt(cc[2]), B("invalid requested amount")), "requested amount")
420420 let cl = bQ(as)
421421 let cm = addressFromPublicKey(ae)
422422 let cf = [if (!(Y))
423423 then true
424424 else D("not allowed"), ac(cd.caller), if ((ae == cl))
425425 then true
426426 else D("can be called by account owner only")]
427427 if ((cf == cf))
428428 then {
429429 let aU = bP(as)._1
430430 let bV = t(valueOrElse(at(as), 0), Q(W))
431431 let bj = t(bc(aU), Q(W))
432432 let bh = t(valueOrElse(getInteger(T, au(as, aU)), 0), Q(aU))
433433 let bi = t(valueOrElse(getInteger(T, au(as, W)), 0), Q(W))
434434 let bp = bg(bh, bi, bj)
435435 let bs = t(valueOrErrorMessage(getInteger(T, aw(as)), B("leverage should be defined")), 1)
436436 let cn = bq(bV, bs, bp)
437437 let co = if ((cj == aU))
438438 then w(fraction(cn, f, bj), Q(aU))
439439 else if ((cj == W))
440440 then w(cn, Q(W))
441441 else D("invalid requested asset id")
442442 let aC = G(valueOrErrorMessage(getString(T, az(cj)), B("synthetic asset for requested asset is undefined")))
443443 let cp = if ((co >= ck))
444444 then ck
445445 else D(("credit available = " + toString(co)))
446446 let ch = [invoke(T, "integerEntry", [au(as, cj), (valueOrElse(av(as, cj), 0) + cp)], nil), invoke(T, "transferAsset", [as.bytes, cp, aC], nil)]
447447 $Tuple2(nil, [ch, co])
448448 }
449449 else throw("Strict value is not equal to itself.")
450450 }
451451
452452
453453 @Callable(cd)
454454 func init (cq) = {
455455 let cr = ab(cd.caller)
456456 if ((cr == cr))
457457 then $Tuple2([StringEntry(R, cq)], unit)
458458 else throw("Strict value is not equal to itself.")
459459 }
460460
461461
462462
463463 @Callable(cd)
464464 func requestAccount (ae,cc) = {
465465 let cf = [if (!(Y))
466466 then true
467467 else D("not allowed"), ac(cd.caller)]
468468 if ((cf == cf))
469469 then {
470470 let cs = cc[0]
471471 let ct = cc[1]
472472 let bs = valueOrErrorMessage(parseInt(cc[2]), B("invalid leverage"))
473473 let cm = addressFromPublicKey(ae)
474474 let ay = sha256(((cm.bytes + fromBase58String(cs)) + fromBase58String(ct)))
475475 let aU = G(cs)
476476 let aV = G(ct)
477477 let cu = (size(aQ(cm)) / j)
478478 let cv = [if ((size(cd.payments) == 1))
479479 then true
480480 else D("1 payment is required"), if ((cd.payments[0].assetId == unit))
481481 then true
482482 else D("invalid asset"), if ((cd.payments[0].amount == an()))
483483 then true
484484 else D("invalid amount"), if (aW(aU, aV))
485485 then true
486486 else D("pair is not allowed"), if ((getInteger(T, aF(ay)) == unit))
487487 then true
488488 else D("account is already exists"), if ((aq() > cu))
489489 then true
490490 else D(("accounts limit is " + toString(aq())))]
491491 if ((cv == cv))
492492 then {
493493 let cw = $Tuple2([ScriptTransfer(T, an(), unit)], [invoke(T, "integerEntry", [aF(ay), aD], nil), invoke(T, "binaryEntry", [aM(), (aN() + ay)], nil), invoke(T, "integerEntry", [ax(ay), bs], nil)])
494494 let cg = cw._1
495495 let ch = cw._2
496496 $Tuple2(cg, (ch ++ [invoke(T, "binaryEntry", [aH(ay), ae], nil), invoke(T, "binaryEntry", [aQ(cm), (aS(cm) + ay)], nil), invoke(T, "stringEntry", [aI(ay), cs], nil), invoke(T, "stringEntry", [aJ(ay), ct], nil)]))
497497 }
498498 else throw("Strict value is not equal to itself.")
499499 }
500500 else throw("Strict value is not equal to itself.")
501501 }
502502
503503
504504
505505 @Callable(cd)
506506 func addAccount (ae,cc) = {
507507 let cf = [if (!(Y))
508508 then true
509509 else D("not allowed"), ac(cd.caller)]
510510 if ((cf == cf))
511511 then {
512512 let cx = fromBase58String(cc[0])
513513 let bU = ae
514514 let as = addressFromPublicKey(ae)
515515 let cy = addressFromPublicKey(cx)
516516 let cv = [if ((getBinary(T, aG(as)) == unit))
517517 then true
518518 else D("account is already exists"), if ({
519519 let M = scriptHash(as)
520520 if ($isInstanceOf(M, "ByteVector"))
521521 then {
522522 let cz = M
523523 (cz == blake2b256_32Kb(al()))
524524 }
525525 else false
526526 })
527527 then true
528528 else D("invalid script")]
529529 if ((cv == cv))
530530 then {
531531 let cA = if ((size(aN()) == 0))
532- then $Tuple2(D("requests is empty"), nil)
532+ then $Tuple2(nil, nil)
533533 else {
534534 let ay = take(aN(), j)
535535 let bs = valueOrErrorMessage(getInteger(T, ax(ay)), B("request's leverage is undefined"))
536536 $Tuple2(nil, [invoke(T, "integerEntry", [aF(ay), aE], nil), invoke(T, "binaryEntry", [aK(ay), bU], nil), invoke(T, "binaryEntry", [aM(), drop(aN(), j)], nil), invoke(T, "stringEntry", [aL(as), toBase58String(ay)], nil), invoke(T, "transferWaves", [cy.bytes, an()], nil), invoke(T, "integerEntry", [aw(as), bs], nil)])
537537 }
538538 let cg = cA._1
539539 let ch = cA._2
540540 $Tuple2(cg, (ch ++ [invoke(T, "binaryEntry", [aG(as), cx], nil)]))
541541 }
542542 else throw("Strict value is not equal to itself.")
543543 }
544544 else throw("Strict value is not equal to itself.")
545545 }
546546
547547
548548
549549 @Callable(cd)
550550 func withdraw (ae,cc) = {
551551 let cv = [if (!(Y))
552552 then true
553553 else D("not allowed"), ac(cd.caller)]
554554 if ((cv == cv))
555555 then {
556556 let cm = addressFromPublicKey(ae)
557557 let as = valueOrErrorMessage(addressFromString(cc[0]), B("invalid account address"))
558558 let cB = valueOrErrorMessage(parseInt(cc[1]), B("invalid amount"))
559559 let K = G(cc[2])
560560 let cC = [invoke(as, "transferAsset", [cm.bytes, cB, K], nil)]
561561 $Tuple2(nil, cC)
562562 }
563563 else throw("Strict value is not equal to itself.")
564564 }
565565
566566
567567
568568 @Callable(cd)
569569 func deposit (ae,cc) = {
570570 let cD = cb(ae, cc, cd)
571571 let cg = cD._1
572572 let ch = cD._2
573573 $Tuple2(cg, ch)
574574 }
575575
576576
577577
578578 @Callable(cd)
579579 func borrow (ae,cc) = {
580580 let cE = ci(ae, cc, cd)
581581 let cg = cE._1
582582 let ch = cE._2
583583 $Tuple2(cg, ch)
584584 }
585585
586586
587587
588588 @Callable(cd)
589589 func depositAndBorrow (ae,cc) = {
590590 let as = cc[0]
591591 let cF = cb(ae, [as], cd)
592592 let cG = cF._1
593593 let cH = cF._2
594594 let cI = ci(ae, cc, cd)
595595 let cJ = cI._1
596596 let cK = cI._2
597597 $Tuple2((cG ++ cJ), (cH ++ cK))
598598 }
599599
600600
601601
602602 @Callable(cd)
603603 func repay (ae,cc) = {
604604 let cf = [if (!(Y))
605605 then true
606606 else D("not allowed"), ac(cd.caller)]
607607 if ((cf == cf))
608608 then $Tuple2(nil, unit)
609609 else throw("Strict value is not equal to itself.")
610610 }
611611
612612
613613
614614 @Callable(cd)
615615 func setPairAllowance (ae,cc) = {
616616 let cf = [if (!(Y))
617617 then true
618618 else D("not allowed"), ac(cd.caller), ad(ae)]
619619 if ((cf == cf))
620620 then {
621621 let cs = cc[0]
622622 let ct = cc[1]
623623 let cL = cc[2]
624624 let aU = G(cs)
625625 let aV = G(ct)
626626 let cM = (cL == "true")
627627 let cC = [invoke(T, "booleanEntry", [aT(aU, aV), cM], nil)]
628628 $Tuple2(nil, cC)
629629 }
630630 else throw("Strict value is not equal to itself.")
631631 }
632632
633633
634634
635635 @Callable(cd)
636636 func addSyntheticAsset (ae,cc) = {
637637 let aA = G(cc[0])
638638 let aC = G(cc[1])
639639 let cf = [if (!(Y))
640640 then true
641641 else D("not allowed"), ac(cd.caller), ad(ae), if ((getString(T, az(aA)) == unit))
642642 then true
643643 else D("invalid base asset"), if ((getString(T, aB(aC)) == unit))
644644 then true
645645 else D("invalid synthetic asset")]
646646 if ((cf == cf))
647647 then {
648648 let cC = [invoke(T, "stringEntry", [az(aA), I(aC)], nil), invoke(T, "stringEntry", [aB(aC), I(aA)], nil)]
649649 $Tuple2(nil, cC)
650650 }
651651 else throw("Strict value is not equal to itself.")
652652 }
653653
654654
655655
656656 @Callable(cd)
657657 func doShutdown (ae,cc) = {
658658 let cv = [ac(cd.caller), ad(ae)]
659659 if ((cv == cv))
660660 then {
661661 let cC = [invoke(T, "booleanEntry", [q, true], nil)]
662662 $Tuple2(nil, cC)
663663 }
664664 else throw("Strict value is not equal to itself.")
665665 }
666666
667667
668668
669669 @Callable(cd)
670670 func getAccountInfoREADONLY (ae,cc) = {
671671 let cv = [ac(cd.caller)]
672672 if ((cv == cv))
673673 then {
674674 let as = valueOrErrorMessage(addressFromString(cc[0]), B("invalid account address"))
675675 let cN = bS(as)
676676 $Tuple2(nil, cN)
677677 }
678678 else throw("Strict value is not equal to itself.")
679679 }
680680
681681
682682
683683 @Callable(cd)
684684 func getUserInfoREADONLY (ae,cc) = {
685685 let cv = [ac(cd.caller)]
686686 if ((cv == cv))
687687 then {
688688 let cm = valueOrErrorMessage(addressFromString(cc[0]), B("invalid user address"))
689689 let cO = valueOrElse(getBinary(T, aQ(cm)), base58'')
690690 let cu = (size(cO) / j)
691691 func cP (cQ,cR) = {
692692 let cS = cQ
693693 let cT = cS._1
694694 let cU = cS._2
695695 let cV = cS._3
696696 if ((cV > cR))
697697 then {
698698 let ay = take(cU, j)
699699 let cW = drop(cU, j)
700700 let bU = valueOrErrorMessage(getBinary(T, aK(ay)), "kRequestIdToAccountPublicKey not found")
701701 let as = addressFromPublicKey(bU)
702702 let cN = bS(as)
703703 $Tuple3((cT :+ cN), cW, cV)
704704 }
705705 else cQ
706706 }
707707
708708 let cX = {
709709 let cY = l
710710 let cZ = size(cY)
711711 let da = $Tuple3(nil, cO, cu)
712712 func db (dc,dd) = if ((dd >= cZ))
713713 then dc
714714 else cP(dc, cY[dd])
715715
716716 func de (dc,dd) = if ((dd >= cZ))
717717 then dc
718718 else throw("List size exceeds 20")
719719
720720 de(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(da, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
721721 }
722722 let cT = cX._1
723723 let df = cX._2
724724 let dg = cX._3
725725 $Tuple2(nil, cT)
726726 }
727727 else throw("Strict value is not equal to itself.")
728728 }
729729
730730
731731
732732 @Callable(cd)
733733 func getPairSettingsInfoREADONLY (ae,cc) = {
734734 let dh = G(cc[0])
735735 let di = G(cc[1])
736736 let dj = aZ(dh, di)
737737 func dk (cQ,dl) = {
738738 let dm = ba(dh, di, dl)
739739 let dn = getStringValue(T, dm)
740740 let do = split(dn, a)
741741 let bf = parseInt(dl)
742742 let dp = parseInt(do[1])
743743 let dq = parseInt(do[2])
744744 let dr = parseInt(do[3])
745745 (cQ :+ $Tuple4(bf, dp, dq, dr))
746746 }
747747
748748 let cN = {
749749 let cY = dj
750750 let cZ = size(cY)
751751 let da = nil
752752 func db (dc,dd) = if ((dd >= cZ))
753753 then dc
754754 else dk(dc, cY[dd])
755755
756756 func de (dc,dd) = if ((dd >= cZ))
757757 then dc
758758 else throw("List size exceeds 20")
759759
760760 de(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(db(da, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
761761 }
762762 $Tuple2(nil, cN)
763763 }
764764
765765
766766
767767 @Callable(cd)
768768 func editPairSettings (ae,cc) = {
769769 let cv = [ac(cd.caller), ad(ae)]
770770 if ((cv == cv))
771771 then {
772772 let dh = G(cc[0])
773773 let di = G(cc[1])
774774 let bf = cc[2]
775775 let dp = cc[3]
776776 let dq = cc[4]
777777 let dr = cc[5]
778778 let ds = aY(dh, di)
779779 let dm = ba(dh, di, bf)
780780 let dj = aZ(dh, di)
781781 let dt = {
782782 let M = indexOf(dj, bf)
783783 if ($isInstanceOf(M, "Int"))
784784 then {
785785 let du = M
786786 dj
787787 }
788788 else (dj :+ bf)
789789 }
790790 let dv = [valueOrErrorMessage(parseInt(bf), B("price value is not an Int")), valueOrErrorMessage(dp, B("maxLeverage value is not an Int")), valueOrErrorMessage(dq, B("initialMargin value is not an Int")), valueOrErrorMessage(dr, B("maintenanceMargin value is not an Int")), if ((20 >= size(dt)))
791791 then true
792792 else D("exceeded max prices list size (20)")]
793793 if ((dv == dv))
794794 then {
795795 let dw = makeString(["%s%s%s", dp, dq, dr], a)
796796 let cC = [invoke(T, "stringEntry", [aY(dh, di), makeString(dt, a)], nil), invoke(T, "stringEntry", [ba(dh, di, bf), dw], nil)]
797797 $Tuple2(nil, cC)
798798 }
799799 else throw("Strict value is not equal to itself.")
800800 }
801801 else throw("Strict value is not equal to itself.")
802802 }
803803
804804
805805
806806 @Callable(cd)
807807 func deletePairSettings (ae,cc) = {
808808 let cv = [ac(cd.caller), ad(ae)]
809809 if ((cv == cv))
810810 then {
811811 let dh = G(cc[0])
812812 let di = G(cc[1])
813813 let bf = cc[2]
814814 let dm = ba(dh, di, bf)
815815 let ds = aY(dh, di)
816816 let dj = aZ(dh, di)
817817 let dt = {
818818 let M = indexOf(dj, bf)
819819 if ($isInstanceOf(M, "Int"))
820820 then {
821821 let du = M
822822 removeByIndex(dj, du)
823823 }
824824 else dj
825825 }
826826 let cC = [invoke(T, "deleteEntry", [dm], nil), if ((size(dt) == 0))
827827 then invoke(T, "deleteEntry", [aY(dh, di)], nil)
828828 else invoke(T, "stringEntry", [aY(dh, di), makeString(dt, a)], nil)]
829829 $Tuple2(nil, cC)
830830 }
831831 else throw("Strict value is not equal to itself.")
832832 }
833833
834834
835835 @Verifier(dx)
836836 func dy () = if (if (isDefined(S))
837837 then isDefined(getString(T, m))
838838 else false)
839839 then {
840840 let M = getString(T, m)
841841 if ($isInstanceOf(M, "String"))
842842 then {
843843 let ai = M
844844 let dz = n(toString(this), toBase58String(dx.id))
845845 let bW = valueOrElse(getBoolean(addressFromStringValue(ai), dz), false)
846846 bW
847847 }
848848 else false
849849 }
850850 else sigVerify(dx.bodyBytes, dx.proofs[0], dx.senderPublicKey)
851851

github/deemru/w8io/026f985 
92.80 ms