tx · HTkh2RuXqTXMbzuTxVCszTBu1zegK7ZhSmegy4SWnFL5

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.04100000 Waves

2023.03.22 17:17 [2501329] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "HTkh2RuXqTXMbzuTxVCszTBu1zegK7ZhSmegy4SWnFL5", "fee": 4100000, "feeAssetId": null, "timestamp": 1679494677329, "version": 2, "chainId": 84, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "3aPDvinYp2NmZVvjwnmGZ3YvhMB5ubR4mUQy5MKacpFD1Hbdmrp2vMZP1QVJEZEEtvHSM1DFQQe79C1GFHACeVcK" ], "script": "base64:BgLILAgCEgUKAwEEARIHCgUBBAEIARIDCgEIEgMKAQgSABIECgIBBBIECgIBBBIDCgEBEgASBAoCCAESABIECgIIARIECgIIARIECgIBARIDCgEBEgUKAwEBARIFCgMBCAESBAoCAQgSBAoCAQgSBAoCCAgSBAoCCAgSBAoCCAESABIDCgEIEgUKAwEBARIECgIIARIECgIBARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAIgZzY2FsZTgiDHNjYWxlOEJpZ0ludCIHc2NhbGUxOCIKemVyb0JpZ0ludCIEYmlnMCIEYmlnMSIEYmlnMiIEYmlnMyIEYmlnNCIKc2xpcHBhZ2U0RCILd2F2ZXNTdHJpbmciBUFtdWx0IgVEY29udiIDU0VQIgVFTVBUWSIKUG9vbEFjdGl2ZSIKUG9vbFB1dERpcyIOUG9vbE1hdGNoZXJEaXMiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiCWlkeFBvb2xTdCIJaWR4TFBBc0lkIglpZHhBbUFzSWQiCWlkeFByQXNJZCILaWR4QW10QXNEY20iDWlkeFByaWNlQXNEY20iC2lkeElBbXRBc0lkIg1pZHhJUHJpY2VBc0lkIg9pZHhGYWN0U3Rha0NudHIiEmlkeEZhY3RvcnlSZXN0Q250ciIQaWR4RmFjdFNsaXBwQ250ciIRaWR4RmFjdEd3eFJld0NudHIiCmZlZURlZmF1bHQiAnQxIgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0Igh0MUJpZ0ludCICZjEiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igxmcm9tWDE4Um91bmQiBXJvdW5kIgJ0MiICZjIiAnRzIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIBdCIDcGF1IgJ1YSIEdHhJZCIDZ2F1IgJhYSICcGEiA2FtcCINa2V5QW1wSGlzdG9yeSIGaGVpZ2h0IgNhZGEiFGtleUNoYW5nZUFtcExhc3RDYWxsIgZrZXlGZWUiA2ZlZSIGa2V5RExwIhVrZXlETHBSZWZyZXNoZWRIZWlnaHQiEmtleURMcFJlZnJlc2hEZWxheSIWZExwUmVmcmVzaERlbGF5RGVmYXVsdCIPZExwUmVmcmVzaERlbGF5IgRmY2ZnIgRtdHBrIgJwYyIGaUFtdEFzIgVpUHJBcyIDbWJhIgViQVN0ciIDYXBzIhxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIhZrZXlTa2lwT3JkZXJWYWxpZGF0aW9uIgtwb29sQWRkcmVzcyIPdGhyb3dPcmRlckVycm9yIgpvcmRlclZhbGlkIg5vcmRlclZhbGlkSW5mbyILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIEc3RyZiIEYWRkciIDa2V5IgRpbnRmIgh0aHJvd0VyciIDbXNnIgZmbXRFcnIiA2ZjYSIFaW5GZWUiAUAiBm91dEZlZSIBQSIDaWdzIgJtcCITZmVlQ29sbGVjdG9yQWRkcmVzcyIDZ3BjIgVhbXRBcyIHcHJpY2VBcyIIaVByaWNlQXMiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA4MTgyODQxMSIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEmNmZ0luQW1vdW50QXNzZWRJZCIRY2ZnSW5QcmljZUFzc2V0SWQiA2dmYyINZmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0Ig9zbGlwYWdlQ29udHJhY3QiC2d3eENvbnRyYWN0IgxyZXN0Q29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIKc2xpcEJ5VXNlciIMc2xpcHBhZ2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiDHNsaXBhZ2VBbUFtdCIMc2xpcGFnZVByQW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiBGNwYmkiCHByQW10WDE4IghhbUFtdFgxOCIFY3BiaXIiA3ZhZCICQTEiAkEyIghzbGlwcGFnZSIEZGlmZiIEcGFzcyICdmQiAkQxIgJEMCIEc2xwZyIEZmFpbCIDcGNwIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiC2FtdEFzQW10WDE4IgpwckFzQW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIIYW10QXNEY20iB3ByQXNEY20iCHByaWNlWDE4IghscEFtdFgxOCINbHBQckluQW1Bc1gxOCINbHBQckluUHJBc1gxOCIPY2FsY3VsYXRlUHJpY2VzIgFwIgd0YWtlRmVlIgZhbW91bnQiCWZlZUFtb3VudCIEZ2V0RCICeHAiA3hwMCIDeHAxIgFzIgFhIgNhbm4iC3hwMF94cDFfbl9uIgVhbm5fcyIFYW5uXzEiCWNhbGNETmV4dCIBZCICZGQiA2RkZCICZHAiBGNhbGMiA2FjYyIBaSIFZE5leHQiCGREaWZmUmF3IgVkRGlmZiIDYXJyIg0kdDAxMjkxNjEyOTY0IgIkbCICJHMiBSRhY2MwIgUkZjBfMSICJGEiAiRpIgUkZjBfMiIFZm91bmQiA2VnbyIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCILdXNlckFkZHJlc3MiBGxwSWQiBGFtSWQiBHBySWQiBWFtRGNtIgVwckRjbSIDc3RzIgdscEVtaXNzIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiCmxwRW1pc3NYMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIDZXBvIgdpbkFtQW10IgZpbkFtSWQiB2luUHJBbXQiBmluUHJJZCIGaXNFdmFsIgZlbWl0THAiCmlzT25lQXNzZXQiEHZhbGlkYXRlU2xpcHBhZ2UiBnBtdEFtdCIFcG10SWQiB2FtSWRTdHIiB3BySWRTdHIiCWluQW1JZFN0ciIJaW5QcklkU3RyIgZhbXREY20iCHByaWNlRGNtIgRscEVtIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgFyIgZjaGVja0QiC3NsaXBwYWdlWDE4Ig9zbGlwcGFnZVJlYWxYMTgiDWxwRW1pc3Npb25YMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiDSR0MDIwODAzMjExNDgiCndyaXRlQW1BbXQiCndyaXRlUHJBbXQiC2NvbW1vblN0YXRlIgVnZXRZRCIBRCIBbiIBeCIKYVByZWNpc2lvbiIBYyIBYiIDY3VyIg0kdDAyMjM0MzIyMzYzIgF5IgV5TmV4dCIFeURpZmYiDSR0MDIyNjcwMjI3MTciB2NhbGNETHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIKbHBFbWlzc2lvbiIKdXBkYXRlZERMcCIOY2FsY0N1cnJlbnRETHAiEGFtb3VudEFzc2V0RGVsdGEiD3ByaWNlQXNzZXREZWx0YSIUbHBBc3NldEVtaXNzaW9uRGVsdGEiEmFtb3VudEFzc2V0QmFsYW5jZSIRcHJpY2VBc3NldEJhbGFuY2UiD2xwQXNzZXRFbWlzc2lvbiIKY3VycmVudERMcCIScmVmcmVzaERMcEludGVybmFsIhdhbW91bnRBc3NldEJhbGFuY2VEZWx0YSIWcHJpY2VBc3NldEJhbGFuY2VEZWx0YSIHYWN0aW9ucyISdmFsaWRhdGVVcGRhdGVkRExwIgZvbGRETHAiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig0kdDAyNDkxNTI1MTI3IgNkTHAiDSR0MDI1NDY5MjU1NjkiDXVudXNlZEFjdGlvbnMiBmRMcE5ldyIMaXNPcmRlclZhbGlkIgRpbmZvIgJjZyIDcG10IgJjcCIGY2FsbGVyIgdhbUFzUG10IgdwckFzUG10Ig1jYWxjUHV0T25lVGtuIglwbXRBbXRSYXciC3dpdGhUYWtlRmVlIg1jaGVjaEVtaXNzaW9uIg0kdDAyODIyNTI4Njg3IgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCINJHQwMjg2OTMyODg2OSILYW1BbW91bnRSYXciC3ByQW1vdW50UmF3Ig0kdDAyODg3MzI5MTI3IghhbUFtb3VudCIIcHJBbW91bnQiDGFtQmFsYW5jZU5ldyIMcHJCYWxhbmNlTmV3IghscEFtb3VudCIOcG9vbFByb3BvcnRpb24iD2Ftb3VudEFzc2V0UGFydCIOcHJpY2VBc3NldFBhcnQiCWxwQW10Qm90aCIFYm9udXMiE2dldE9uZVRrblYySW50ZXJuYWwiCm91dEFzc2V0SWQiDG1pbk91dEFtb3VudCIIcGF5bWVudHMiDG9yaWdpbkNhbGxlciINdHJhbnNhY3Rpb25JZCIKYW1EZWNpbWFscyIKcHJEZWNpbWFscyIKcG9vbFN0YXR1cyINJHQwMzEyMzkzMTM1MCIIdG90YWxHZXQiC3RvdGFsQW1vdW50Ig0kdDAzMTU0MDMxODQ3IgVvdXRBbSIFb3V0UHIiCGN1clByWDE4IgVjdXJQciIRb3V0QXNzZXRJZE9yV2F2ZXMiEHNlbmRGZWVUb01hdGNoZXIiBGJ1cm4iDSR0MDMyNjMyMzI5ODIiEGZlZUFtb3VudEZvckNhbGMiEG91dEluQW1vdW50QXNzZXQiDSR0MDMyOTg1MzMwOTMiEXJlZnJlc2hETHBBY3Rpb25zIhFpc1VwZGF0ZWRETHBWYWxpZCIBbSIHJG1hdGNoMCICcG0iAnBkIglpc01hbmFnZXIiAnBrIgJtbSIEZ2V0WSIJaXNSZXZlcnNlIhNwb29sQW1vdW50SW5CYWxhbmNlIg0kdDAzNDU0MDM0NTYwIg0kdDAzNDg5MTM0OTM4IhNza2lwT3JkZXJWYWxpZGF0aW9uIg1jbGVhbkFtb3VudEluIg1mZWVQb29sQW1vdW50Ig0kdDAzNTI5MDM1NzE0Ighhc3NldE91dCICZHkiC3RvdGFsR2V0UmF3IgVuZXdYcCIEbmV3RCIMYW1vdW50T3V0TWluIglhZGRyZXNzVG8iC3N3YXBDb250YWN0IgZjaGVja3MiB2Fzc2V0SW4iDSR0MDM3MTUwMzc1NDQiCGNoZWNrTWluIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSICY20iA2hwbSIDY3BtIgRzbGlwIglhdXRvU3Rha2UiB2ZhY3RDZmciC3N0YWtpbmdDbnRyIghzbGlwQ250ciIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIBZSIJbHBBc3NldElkIgJlbCIGbGVnYWN5IgJzYSICc3AiCGxwVHJuc2ZyIgJzcyINJHQwNDIxNjM0MjMwNSIFY2hlY2siFGxwQXNzZXRFbWlzc2lvbkFmdGVyIiBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCINaXNQdXREaXNhYmxlZCINJHQwNDM5NDY0NDEwNCIHZXN0aW1MUCINJHQwNDQ5ODk0NTMzOCIUcGF5bWVudEluQW1vdW50QXNzZXQiDSR0MDQ1MzQxNDU0NDkiB21heFNscGciBmVzdFB1dCINJHQwNDY0Nzk0NjU0NCIJb3V0QW10QW10Ig0kdDA0NzcxNzQ3Nzk5Ig1pc0dldERpc2FibGVkIg0kdDA0ODQxNzQ4NTcyIhhsYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiHWNoZWNrTGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ig0kdDA0OTA5NjQ5MTYwIhBkTHBVcGRhdGVBY3Rpb25zIg1scEFzc2V0QW1vdW50IgVpbmRleCIEbmV3WSINJHQwNTAxNzA1MDIyNSINJHQwNTA2MDA1MDcxNSIOc3VtT2ZHZXRBc3NldHMiEm5vTGVzc1RoZW5BbXRBc3NldCIUbm9MZXNzVGhlblByaWNlQXNzZXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA1MTg4MTUxOTYyIg1jaGVja1BheW1lbnRzIgpmYWN0b3J5Q2ZnIgdzdGFraW5nIgp1bnN0YWtlSW52IgF2IgVidXJuQSINJHQwNTI5ODk1MzA3MCINdW5zdGFrZUFtb3VudCIVbm9MZXNzVGhlbkFtb3VudEFzc2V0IgNyZXMiDGNoZWNrQW1vdW50cyINJHQwNTQzMjE1NDQwMiIXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MiDSR0MDU1NDI0NTU2MTIiEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIg0kdDA1NTc0MDU1ODQzIg0kdDA1NTk5MTU2MDk1IghhbXRBc1N0ciIHcHJBc1N0ciIBayICcHIiDHJlc1NjYWxlTXVsdCIHdXNyQWRkciIHcG10QXNJZCIGY2ZnUmF3Ig0kdDA1ODc4NTU5MDIxIgNzdHIiBGxpc3QiBWRlbGF5IgVkZWx0YSIGdGFyZ2V0IgZjdXJBbXAiCGxhc3RDYWxsIgluZXdBbXBSYXciBm5ld0FtcCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIg0kdDA1OTkxNTYwMDMyIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2iGAQABYQCAwtcvAAFiCQC2AgEAgMLXLwABYwkAtgIBAICAkLu61q3wDQABZAkAtgIBAAAAAWUJALYCAQAAAAFmCQC2AgEAAQABZwkAtgIBAAIAAWgJALYCAQADAAFpCQC2AgEABAABagkAtgIBCQBlAgUBYQkAaQIJAGgCBQFhAAEFAWEAAWsCBVdBVkVTAAFsAgMxMDAAAW0CATEAAW4CAl9fAAFvAgAAAXAAAQABcQACAAFyAAMAAXMABAABdAABAAF1AAIAAXYAAwABdwAEAAF4AAUAAXkABgABegAHAAFBAAgAAUIACQABQwABAAFEAAYAAUUABwABRgAKAAFHCQBrAwAKBQFhAJBOAQFIAgFJAUoJALwCAwkAtgIBBQFJBQFjCQC2AgEFAUoBAUsCAUkBSgkAvAIDBQFJBQFjBQFKAQFMAgFNAU4JAKADAQkAvAIDBQFNCQC2AgEFAU4FAWMBAU8DAU0BTgFQCQCgAwEJAL0CBAUBTQkAtgIBBQFOBQFjBQFQAQFRAgFJAUoJALwCAwUBSQUBYwkAtgIBBQFKAQFSAgFNAU4JALwCAwUBTQkAtgIBBQFOBQFjAQFTAwFUAVUBVgkAawMFAVQFAVUFAVYBAVcBAU0DCQC/AgIFAWQFAU0JAL4CAQUBTQUBTQEBWAEBTQMJAL8CAgUBZAUBTQkAvgIBBQFNBQFNAQFZAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBWgACFCVzX19tYW5hZ2VyUHVibGljS2V5AQJhYQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQECYWIAAhElcyVzX19wcmljZV9fbGFzdAECYWMCAmFkAmFlCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUCYWQJAMwIAgkApAMBBQJhZQUDbmlsBQFuAQJhZgICYWcCYWgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQJhZwICX18FAmFoAQJhaQICYWcCYWgJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQJhZwICX18FAmFoAQJhagACDyVzX19hbW91bnRBc3NldAECYWsAAg4lc19fcHJpY2VBc3NldAECYWwAAgclc19fYW1wAQJhbQECYW4JAKwCAgILJXMlZF9fYW1wX18JAKQDAQUCYW4BAmFvAAINJXNfX2FkZG9uQWRkcgECYXAAAhUlc19fY2hhbmdlQW1wTGFzdENhbGwAAmFxAgclc19fZmVlAAJhcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhcQUBRwACYXMJALkJAgkAzAgCAgIlcwkAzAgCAgNkTHAFA25pbAUBbgACYXQJALkJAgkAzAgCAgIlcwkAzAgCAhJkTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBbgACYXUJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoRExwRGVsYXkFA25pbAUBbgACYXYAHgACYXcJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYXUFAmF2AQJheAACESVzX19mYWN0b3J5Q29uZmlnAQJheQACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYXoCAmFBAmFCCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhQQICX18FAmFCAghfX2NvbmZpZwECYUMBAmFECQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFEAQJhRQACDCVzX19zaHV0ZG93bgECYUYAAh0lc19fYWxsb3dlZExwU3RhYmxlU2NyaXB0SGFzaAECYUcAAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYUgBAmFJCQCsAgICGyVzJXNfX3NraXBPcmRlclZhbGlkYXRpb25fXwUCYUkBAmFKBAJhSwJhTAJhTQJhTgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYUsCAiAoBQJhTAIBKQINIHNlbmRlclZhbGlkPQkApQMBBQJhTQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYU4BAmFPAgJhUAJhUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFQBQJhUQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhUAkAzAgCAgEuCQDMCAIFAmFRCQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABAmFSAgJhUAJhUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFQBQJhUQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhUAkAzAgCAgEuCQDMCAIFAmFRCQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABAmFTAQJhVAkAAgEJALkJAgkAzAgCAg9scF9zdGFibGUucmlkZToJAMwIAgUCYVQFA25pbAIBIAECYVUBAmFUCQC5CQIJAMwIAgIPbHBfc3RhYmxlLnJpZGU6CQDMCAIFAmFUBQNuaWwCASAAAmFWCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYU8CBQR0aGlzCQEBWQAAAmFXCgACYVgJAPwHBAUCYVYCEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhWAIDSW50BQJhWAkAAgEJAKwCAgkAAwEFAmFYAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmFZCgACYVgJAPwHBAUCYVYCEWdldE91dEZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVgCA0ludAUCYVgJAAIBCQCsAgIJAAMBBQJhWAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhWgkBAmFPAgUEdGhpcwkBAmFsAAECYmEACQELdmFsdWVPckVsc2UCCQCbCAIFAmFWCQECYUUABwECYmIACQDZBAEJAQJhTwIFAmFWCQECYXkAAAJiYwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFPAgUCYVYJAQJhRwABAmJkAAQCYmUJAQJhTwIFBHRoaXMJAQJhagAEAmJmCQECYU8CBQR0aGlzCQECYWsABAJiZwkBAmFSAgUCYVYJAQJhQwEFAmJmBAJhQQkBAmFSAgUCYVYJAQJhQwEFAmJlCQC1CQIJAQJhTwIFAmFWCQECYXoCCQCkAwEFAmFBCQCkAwEFAmJnBQFuAQJiaAECYmkDCQAAAgUCYmkFAWsFBHVuaXQJANkEAQUCYmkBAmJqAQJiaQMJAAACBQJiaQUEdW5pdAUBawkA2AQBCQEFdmFsdWUBBQJiaQECYmsBAmJsCQCbCgkJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYmwFAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibAUBdQkA2QQBCQCRAwIFAmJsBQF2CQECYmgBCQCRAwIFAmJsBQF3CQECYmgBCQCRAwIFAmJsBQF4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmwFAXkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibAUBegkA2QQBCQCRAwIFAmJsBQFBCQDZBAEJAJEDAgUCYmwFAUIAAmJtCQECYmsBCQECYmQAAAJibgUCYm0AAmJvCAUCYm4CXzEAAmJwCAUCYm4CXzIAAmJxCAUCYm4CXzMAAmJyCAUCYm4CXzQAAmJzCAUCYm4CXzUAAmJ0CAUCYm4CXzYAAmJ1CAUCYm4CXzcAAmJ2CAUCYm4CXzgAAmJ3CAUCYm4CXzkBAmJ4AAkAtQkCCQECYU8CBQJhVgkBAmF4AAUBbgACYnkJAQJieAAAAmJ6CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJieQUBQwIgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MAAmJBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJieQUBRQIgSW52YWxpZCBzbGlwYWdlIGNvbnRyYWN0IGFkZHJlc3MAAmJCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJieQUBRgIcSW52YWxpZCBnd3ggY29udHJhY3QgYWRkcmVzcwACYkMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJ5BQFEAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAQJiRAoCYkUCYkYCYkcCYkgCYkkCYkoCYksCYkwCYk0CYk4JALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJFCQDMCAIJAKQDAQUCYkYJAMwIAgkApAMBBQJiRwkAzAgCCQCkAwEFAmJICQDMCAIJAKQDAQUCYkkJAMwIAgkApAMBBQJiSgkAzAgCCQCkAwEFAmJLCQDMCAIJAKQDAQUCYkwJAMwIAgkApAMBBQJiTQkAzAgCCQCkAwEFAmJOBQNuaWwFAW4BAmJPBgJiUAJiUQJiUgJiSAJiSwJiTAkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJQCQDMCAIJAKQDAQUCYlEJAMwIAgkApAMBBQJiUgkAzAgCCQCkAwEFAmJICQDMCAIJAKQDAQUCYksJAMwIAgkApAMBBQJiTAUDbmlsBQFuAQJiUwECYlQDCQAAAgUCYlQCBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFAmJUAQJiVQICYlYCYlcJALwCAwUCYlYFAWMFAmJXAQJiWAMCYlYCYlcBUAkAvQIEBQJiVgUBYwUCYlcFAVABAmJZAwJiWgJjYQJjYgQCY2MJALwCAwkAuAICBQJiWgUCY2EFAWIFAmNhBAJjZAkAvwICCQC4AgIFAmNiCQEBVwEFAmNjBQFkAwkBASEBBQJjZAkAAgEJAKwCAgIKQmlnIHNscGc6IAkApgMBBQJjYwkAlAoCBQJjZAkAmQMBCQDMCAIFAmJaCQDMCAIFAmNhBQNuaWwBAmNlAwJjZgJjZwJjaAQCY2MJALwCAwUCY2cFAWIFAmNmBAJjaQkAvwICBQJjaAUCY2MDAwUCY2kGCQC/AgIFAmNnBQJjZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKYDAQUCY2cCASAJAKYDAQUCY2YCASAJAKYDAQUCY2MCASAJAKYDAQUCY2gFAmNpAQJjagQCY2sCY2wCY20CY24EAmNvCQEBSAIFAmNtBQJjawQCY3AJAQFIAgUCY24FAmNsCQECYlUCBQJjcAUCY28BAmNxAwJjbQJjbgJjcgQCY3MFAmJ0BAJjdAUCYnUEAmN1CQECY2oEBQJjcwUCY3QFAmNtBQJjbgQCYlcJAQFIAgUCY20FAmNzBAJiVgkBAUgCBQJjbgUCY3QEAmN2CQEBSAIFAmNyBQFhBAJjdwkBAmJVAgUCYlcFAmN2BAJjeAkBAmJVAgUCYlYFAmN2CQDMCAIFAmN1CQDMCAIFAmN3CQDMCAIFAmN4BQNuaWwBAmN5AwJjbQJjbgJjcgQCY3oJAQJjcQMFAmNtBQJjbgUCY3IJAMwIAgkBAUwCCQCRAwIFAmN6AAAFAWEJAMwIAgkBAUwCCQCRAwIFAmN6AAEFAWEJAMwIAgkBAUwCCQCRAwIFAmN6AAIFAWEFA25pbAECY0ECAmNCAmFyBAJjQwMJAAACBQJhcgAAAAAJAGsDBQJjQgUCYXIFAWEJAJQKAgkAZQIFAmNCBQJjQwUCY0MBAmNEAQJjRQQCY0YJAJEDAgUCY0UAAAQCY0cJAJEDAgUCY0UAAQQCY0gJALcCAgUCY0YFAmNHAwkAAAIFAmNIBQFlBQFlBAJjSQkBDXBhcnNlSW50VmFsdWUBBQJhWgQCY0oJAGgCBQJjSQACBAJjegkAvAIDBQJjRgUCY0cFAWYEAmNLCQC8AgMFAmN6BQFpBQFmBAJjTAkAvAIDCQC2AgEFAmNKBQJjSAUBZgQCY00JALYCAQkAZQIFAmNKAAEKAQJjTgECY08EAmNQCQC8AgMFAmNPBQJjTwUBZgQCY1EJALwCAwUCY1AFAmNPBQFmBAJjUgkAvAIDBQJjUQUBZgUCY0sJALwCAwkAtwICBQJjTAkAvAIDBQJjUgUBZwUBZgUCY08JALcCAgkAvAIDBQJjTQUCY08FAWYJALwCAwUBaAUCY1IFAWYKAQJjUwICY1QCY1UDCAUCY1QCXzIFAmNUBAJjTwgFAmNUAl8xBAJjVgkBAmNOAQUCY08EAmNXCQC4AgIFAmNWCQEFdmFsdWUBBQJjTwQCY1gDCQC/AgIFAWUFAmNXCQC+AgEFAmNXBQJjVwMJAMACAgUBZgUCY1gJAJQKAgUCY1YGCQCUCgIFAmNWBwQCY1kJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPCQDMCAIAEAUDbmlsBAJjWgoAAmRhBQJjWQoAAmRiCQCQAwEFAmRhCgACZGMJAJQKAgUCY0gHCgECZGQCAmRlAmRmAwkAZwIFAmRmBQJkYgUCZGUJAQJjUwIFAmRlCQCRAwIFAmRhBQJkZgoBAmRnAgJkZQJkZgMJAGcCBQJkZgUCZGIFAmRlCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTcJAQJkZwIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIFAmRjAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARBAJjTwgFAmNaAl8xBAJkaAgFAmNaAl8yAwUCZGgFAmNPCQACAQkArAICAhlEIGNhbGN1bGF0aW9uIGVycm9yLCBEID0gCQCmAwEFAmNPAQJkaQQCZGoCZGsCZGwCZG0EAmRuBQJicQQCZG8JANgEAQkBBXZhbHVlAQUCYnIEAmRwCQDYBAEJAQV2YWx1ZQEFAmJzBAJkcQUCYnQEAmRyBQJidQQCZHMJAKQDAQUCYnAEAmR0CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRuAgtXcm9uZyBMUCBpZAhxdWFudGl0eQMJAQIhPQIJANgEAQUCZG4FAmRrCQACAQIPV3JvbmcgcG10IGFzc2V0BAJkdQkBAmJTAQUCZG8EAmR2CQEBSAIFAmR1BQJkcQQCZHcJAQJiUwEFAmRwBAJkeAkBAUgCBQJkdwUCZHIEAmR5CQECYlUCBQJkeAUCZHYEAmR6CQEBTAIFAmR5BQFhBAJkQQkBAUgCBQJkbAUBYQQCZEIJAQFIAgUCZHQFAWEEAmRDCQC8AgMFAmR2BQJkQQUCZEIEAmRECQC8AgMFAmR4BQJkQQUCZEIEAmRFCQEBTwMFAmRDBQJkcQUFRkxPT1IEAmRGCQEBTwMFAmREBQJkcgUFRkxPT1IEAmRHAwkAAAIFAmRqAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJkbQUCZEUDCQAAAgUCZG8CBVdBVkVTBQR1bml0CQDZBAEFAmRvCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmRtBQJkRgMJAAACBQJkcAIFV0FWRVMFBHVuaXQJANkEAQUCZHAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFpAgkApQgBBQJkbQUCZGoJAQJiTwYFAmRFBQJkRgUCZGwFAmR6BQJhbggFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYgAFAmR6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMCBQJhbggFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmR6BQNuaWwJAJwKCgUCZEUFAmRGBQJkbwUCZHAFAmR1BQJkdwUCZHQFAmR5BQJkcwUCZEcBAmRIDQJkagJjYgJkSQJkSgJkSwJkTAJkbQJkTQJkTgJkTwJkUAJkUQJkUgQCZG4FAmJxBAJkUwkA2AQBCQEFdmFsdWUBBQJicgQCZFQJANgEAQkBBXZhbHVlAQUCYnMEAmRVBQJidgQCZFYFAmJ3BAJkVwUCYnQEAmRYBQJidQQCZHMJAKQDAQUCYnAEAmRZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRuAghXciBscCBhcwhxdWFudGl0eQQCZHUDBQJkTQkBAmJTAQUCZFMDAwUCZE8JAAACBQJkUgUCZFMHCQBlAgkBAmJTAQUCZFMFAmRRAwUCZE8JAQJiUwEFAmRTCQBlAgkBAmJTAQUCZFMFAmRJBAJkdwMFAmRNCQECYlMBBQJkVAMDBQJkTwkAAAIFAmRSBQJkVAcJAGUCCQECYlMBBQJkVAUCZFEDBQJkTwkBAmJTAQUCZFQJAGUCCQECYlMBBQJkVAUCZEsEAmRaCQEBSAIFAmRJBQJkVwQCZWEJAQFIAgUCZEsFAmRYBAJlYgkBAmJVAgUCZWEFAmRaBAJkdgkBAUgCBQJkdQUCZFcEAmR4CQEBSAIFAmR3BQJkWAQCY2cJAQJjRAEJAMwIAgUCZHYJAMwIAgUCZHgFA25pbAQCZWMDCQAAAgUCZFkAAAQCY2YJAQJjRAEJAMwIAgkAtwICBQJkdgUCZFoJAMwIAgkAtwICBQJkeAUCZWEFA25pbAQCZWQDCQC/AgIFAmNmBQJjZwYJAAIBAhxEMSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIEQwAwkAAAIFAmVkBQJlZAQCZHkFAWQEAmVlBQFkBAJjdgUCY2YJAJcKBQkBAUwCBQJjdgUBYQkBAUwCBQJkWgUCZFcJAQFMAgUCZWEFAmRYCQECYlUCCQC3AgIFAmR4BQJlYQkAtwICBQJkdgUCZFoFAmVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJkeQkBAmJVAgUCZHgFAmR2BAJlZgkAvAIDCQEBVwEJALgCAgUCZHkFAmViBQFjBQJkeQQCZWUJAQFIAgUCY2IFAWEDAwMFAmRQCQECIT0CBQJkeQUBZAcJAL8CAgUCZWYFAmVlBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJlZgIDID4gCQCmAwEFAmVlBAJlZwkBAUgCBQJkWQUBYQQCZWgJAL0CBAUCZFoJAQJiWAMFAmR4BQJkdgUHQ0VJTElORwUBYwUHQ0VJTElORwQCZWkJAL0CBAUCZWEFAWMJAQJiWAMFAmR4BQJkdgUFRkxPT1IFB0NFSUxJTkcEAmVqAwkAvwICBQJlaAUCZWEJAJQKAgUCZWkFAmVhCQCUCgIFAmRaBQJlaAQCZWsIBQJlagJfMQQCZWwIBQJlagJfMgQCY2YJAQJjRAEJAMwIAgkAtwICBQJkdgUCZWsJAMwIAgkAtwICBQJkeAUCZWwFA25pbAQCZWQDCQC/AgIFAmNmBQJjZwYJAAIBAhxEMSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIEQwAwkAAAIFAmVkBQJlZAQCY3YJALwCAwUCZWcJALgCAgUCY2YFAmNnBQJjZwkAlwoFCQEBTwMFAmN2BQFhBQVGTE9PUgkBAU8DBQJlawUCZFcFB0NFSUxJTkcJAQFPAwUCZWwFAmRYBQdDRUlMSU5HBQJkeQUCZWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAmVtCAUCZWMCXzEEAmVuCAUCZWMCXzIEAmVvCAUCZWMCXzMEAmR6CQEBTAIIBQJlYwJfNAUBYQQCZXAJAQFMAggFAmVjAl81BQFhAwkAZwIAAAUCZW0JAAIBAgdMUCA8PSAwBAJlcQMJAQEhAQUCZE4AAAUCZW0EAmVyCQBlAgUCZEkFAmVuBAJlcwkAZQIFAmRLBQJlbwQCZXQDAwUCZE8JAAACBQJkUgUCZFMHCQCUCgIFAmRRAAADAwUCZE8JAAACBQJkUgUCZFQHCQCUCgIAAAUCZFEJAJQKAgUCZW4FAmVvBAJldQgFAmV0Al8xBAJldggFAmV0Al8yBAJldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFiAAUCZHoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYwIFAmFuCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAgUCZG0FAmRqCQECYkQKBQJldQUCZXYFAmVxBQJkegUCY2IFAmVwBQJhbggFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmVyBQJlcwUDbmlsCQCfCg0FAmVtBQJlcQUCZHoFAmR1BQJkdwUCZFkFAmRuBQJkcwUCZXcFAmVyBQJlcwUCZEoFAmRMAQJleAMCY0UCY1UCZXkEAmV6BQFnBAJlQQkAkQMCBQJjRQMJAAACBQJjVQAAAAEAAAQCZUIJAKcDAQUBbAQCY0kJALkCAgkApwMBBQJhWgUCZUIEAmNIBQJlQQQCY0oJALkCAgUCY0kFAmV6BAJlQwkAugICCQC5AgIJALkCAgkAugICCQC5AgIFAmV5BQJleQkAuQICBQJlQQUCZXoFAmV5BQJlQgkAuQICBQJjSgUCZXoEAmVECQC4AgIJALcCAgUCY0gJALoCAgkAuQICBQJleQUCZUIFAmNKBQJleQoBAmNTAgJjVAJlRQQCZUYFAmNUBAJlRwgFAmVGAl8xBAJkaAgFAmVGAl8yAwkBAiE9AgUCZGgFBHVuaXQFAmNUBAJlSAkAugICCQC3AgIJALkCAgUCZUcFAmVHBQJlQwkAtwICCQC5AgIFAWcFAmVHBQJlRAQCZUkJAQFYAQkAuAICBQJlSAkBBXZhbHVlAQUCZUcDCQDAAgIFAWYFAmVJCQCUCgIFAmVIBQJlRQkAlAoCBQJlSAUEdW5pdAQCY1kJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZUoKAAJkYQUCY1kKAAJkYgkAkAMBBQJkYQoAAmRjCQCUCgIFAmV5BQR1bml0CgECZGQCAmRlAmRmAwkAZwIFAmRmBQJkYgUCZGUJAQJjUwIFAmRlCQCRAwIFAmRhBQJkZgoBAmRnAgJkZQJkZgMJAGcCBQJkZgUCZGIFAmRlCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJkZwIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIJAQJkZAIFAmRjAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmVHCAUCZUoCXzEEAmRoCAUCZUoCXzIDCQECIT0CBQJkaAUEdW5pdAUCZUcJAAIBCQCsAgICGVkgY2FsY3VsYXRpb24gZXJyb3IsIFkgPSAJAKYDAQUCZUcBAmVLAwJlTAJlTQJlTgQCZU8JALwCAwkBAmNEAQkAzAgCCQEBSwIFAmVMCQC2AgEFAmJ0CQDMCAIJAQFLAgUCZU0JALYCAQUCYnUFA25pbAUBYwUCZU4DCQAAAgUCZU4FAWUFAWUFAmVPAQJlUAMCZVECZVICZVMEAmVUCQC4AgIJALYCAQkBAmJTAQkBAmJqAQUCYnIFAmVRBAJlVQkAuAICCQC2AgEJAQJiUwEJAQJiagEFAmJzBQJlUgQCZVYJALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJicQhxdWFudGl0eQUCZVMEAmVXCQECZUsDBQJlVAUCZVUFAmVWBQJlVwECZVgDAmVZAmVaAmVTBAJlVAkAZAIJAQJiUwEJAQJiagEFAmJyBQJlWQQCZVUJAGQCCQECYlMBCQECYmoBBQJicwUCZVoEAmVWCQBkAggJAQV2YWx1ZQEJAOwHAQUCYnEIcXVhbnRpdHkFAmVTBAJlTwkBAmVLAwkAtgIBBQJlVAkAtgIBBQJlVQkAtgIBBQJlVgQCZmEJAMwIAgkBDEludGVnZXJFbnRyeQIFAmF0BQJhbgkAzAgCCQELU3RyaW5nRW50cnkCBQJhcwkApgMBBQJlTwUDbmlsCQCUCgIFAmZhBQJlTwECZmICAmZjAmVPAwkAwAICBQJlTwUCZmMGCQECYVMBAiJ1cGRhdGVkIERMcCBsb3dlciB0aGFuIGN1cnJlbnQgRExwAQJmZAECZmUEAmVUCQECYlMBCQECYmoBBQJicgQCZVUJAQJiUwEJAQJiagEFAmJzBAJmZggFAmZlBmFtb3VudAQCZmcJAG4ECAUCZmUGYW1vdW50CAUCZmUFcHJpY2UFAWEFBUZMT09SBAJmaAMJAAACCAUCZmUJb3JkZXJUeXBlBQNCdXkJAJQKAgUCZmYJAQEtAQUCZmcJAJQKAgkBAS0BBQJmZgUCZmcEAmVZCAUCZmgCXzEEAmVaCAUCZmgCXzIDAwMJAQJiYQAGCQAAAgUCYnAFAXIGCQAAAgUCYnAFAXMJAAIBAg1BZG1pbiBibG9ja2VkAwMJAQIhPQIICAUCZmUJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BQJicgYJAQIhPQIICAUCZmUJYXNzZXRQYWlyCnByaWNlQXNzZXQFAmJzCQACAQIJV3IgYXNzZXRzBAJmaQkApwMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFzAgEwBAJmagkBAmVYAwUCZVkFAmVaAAAEAmZrCAUCZmoCXzEEAmZsCAUCZmoCXzIEAmZtCQDAAgIFAmZsBQJmaQQCZm4JALkJAgkAzAgCAgRkTHA9CQDMCAIJAKYDAQUCZmkJAMwIAgIIIGRMcE5ldz0JAMwIAgkApgMBBQJmbAkAzAgCAhQgYW1vdW50QXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmVUCQDMCAICEyBwcmljZUFzc2V0QmFsYW5jZT0JAMwIAgkApAMBBQJlVQkAzAgCAhkgYW1vdW50QXNzZXRCYWxhbmNlRGVsdGE9CQDMCAIJAKQDAQUCZVkJAMwIAgIYIHByaWNlQXNzZXRCYWxhbmNlRGVsdGE9CQDMCAIJAKQDAQUCZVoJAMwIAgIIIGhlaWdodD0JAMwIAgkApAMBBQJhbgUDbmlsAgAJAJQKAgUCZm0FAmZuAQJmbwECY1UDCQECIT0CCQCQAwEIBQJjVQhwYXltZW50cwABCQACAQIKMSBwbW50IGV4cAQCZnAJAQV2YWx1ZQEJAJEDAggFAmNVCHBheW1lbnRzAAAEAmRrCQEFdmFsdWUBCAUCZnAHYXNzZXRJZAQCZFEIBQJmcAZhbW91bnQEAmVjCQECZGkECQDYBAEIBQJjVQ10cmFuc2FjdGlvbklkCQDYBAEFAmRrBQJkUQgFAmNVBmNhbGxlcgQCZEUIBQJlYwJfMQQCZEYIBQJlYwJfMgQCZHMJAQ1wYXJzZUludFZhbHVlAQgFAmVjAl85BAJkRwgFAmVjA18xMAMDCQECYmEABgkAAAIFAmRzBQFzCQACAQkArAICAg9BZG1pbiBibG9ja2VkOiAJAKQDAQUCZHMJAJcKBQUCZEUFAmRGBQJkUQUCZGsFAmRHAQJmcQoCZnICYWgCZnMCZnQCY2ICZE4CZE8CZFACZFECZFIEAmVjCQECZEgNBQJhaAUCY2IICQEFdmFsdWUBBQJmcwZhbW91bnQICQEFdmFsdWUBBQJmcwdhc3NldElkCAkBBXZhbHVlAQUCZnQGYW1vdW50CAkBBXZhbHVlAQUCZnQHYXNzZXRJZAUCZnIJAAACBQJhaAIABQJkTgUCZE8FAmRQBQJkUQUCZFIEAmRzCQENcGFyc2VJbnRWYWx1ZQEIBQJlYwJfOAMDAwkBAmJhAAYJAAACBQJkcwUBcQYJAAACBQJkcwUBcwkAAgEJAKwCAgIIQmxvY2tlZDoJAKQDAQUCZHMFAmVjAQJmdQUCZnYCZGsCZG0CYWgCZncEAmRvCQDYBAEJAQV2YWx1ZQEFAmJyBAJkcAkA2AQBCQEFdmFsdWUBBQJicwQCZG4FAmJxBAJkVwUCYnQEAmRYBQJidQQCZVYJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkbgIQaW52YWxpZCBscCBhc3NldAhxdWFudGl0eQQCZngDCQC/AgIFAmVWBQFlBgkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZngFAmZ4BAJkdQkBAmJTAQUCZG8EAmR3CQECYlMBBQJkcAQCZnkDCQAAAgUCYWgCAAkAlAoCBQJkdQUCZHcDCQAAAgUCZGsFAmRvAwkAZgIFAmZ2BQJkdQkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgkAZQIFAmR1BQJmdgUCZHcDCQAAAgUCZGsFAmRwAwkAZgIFAmZ2BQJkdwkAAgECFmludmFsaWQgcGF5bWVudCBhbW91bnQJAJQKAgUCZHUJAGUCBQJkdwUCZnYJAAIBAhB3cm9uZyBwbXRBc3NldElkBAJmeggFAmZ5Al8xBAJmQQgFAmZ5Al8yBAJmQgMJAAACBQJkawUCZG8JAJQKAgUCZnYAAAMJAAACBQJkawUCZHAJAJQKAgAABQJmdgkAAgECD2ludmFsaWQgcGF5bWVudAQCZkMIBQJmQgJfMQQCZkQIBQJmQgJfMgQCZkUDBQJmdwkAlQoDCAkBAmNBAgUCZkMFAmFXAl8xCAkBAmNBAgUCZkQFAmFXAl8xCAkBAmNBAgUCZnYFAmFXAl8yCQCVCgMFAmZDBQJmRAAABAJmRggFAmZFAl8xBAJmRwgFAmZFAl8yBAJjQwgFAmZFAl8zBAJmSAkAZAIFAmZ6BQJmRgQCZkkJAGQCBQJmQQUCZkcEAmNnCQECY0QBCQDMCAIJAQFIAgUCZnoFAmJ0CQDMCAIJAQFIAgUCZkEFAmJ1BQNuaWwEAmNmCQECY0QBCQDMCAIJAQFIAgUCZkgFAmJ0CQDMCAIJAQFIAgUCZkkFAmJ1BQNuaWwEAmVkAwkAvwICBQJjZgUCY2cGCQEFdGhyb3cAAwkAAAIFAmVkBQJlZAQCZkoJAL0CBAUCZVYJALgCAgUCY2YFAmNnBQJjZwUFRkxPT1IEAmR6CQEBTAIJAQJiVQIJAQFIAgUCZkkFAmRYCQEBSAIFAmZIBQJkVwUBYQQCZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhYgAFAmR6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWMCBQJhbggFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmR6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgIFAmRtBQJhaAkBAmJECgUCZkMFAmZECQCgAwEFAmZKBQJkegAAAAAFAmFuCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZksJAGsDBQJmQQUBYQUCZnoEAmZMCQBrAwUCZnYFAWEJAGQCBQJmSwUBYQQCZk0JAGUCBQJmdgUCZkwEAmZOCQC8AgMFAmVWCQC2AgEFAmZNCQC2AgEFAmZBBAJmTwkAoAMBCQC8AgMJALgCAgUCZkoFAmZOBQFiBQJmTgkAlgoECQCgAwEFAmZKBQJldwUCY0MFAmZPCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmUAYCZlECZlICZlMCZnICZlQCZlUEAmRuCQDYBAEJAQV2YWx1ZQEFAmJxBAJkbwkA2AQBCQEFdmFsdWUBBQJicgQCZHAJANgEAQkBBXZhbHVlAQUCYnMEAmZWBQJidAQCZlcFAmJ1BAJmWAUCYnAEAmRtAwkAAAIFAmZyBQJiQwUCZlQFAmZyBAJmcAkBBXZhbHVlAQkAkQMCBQJmUwAABAJkawkBBXZhbHVlAQgFAmZwB2Fzc2V0SWQEAmRRCAUCZnAGYW1vdW50BAJlVwkBAmVQAwUBZQUBZQUBZQMJAAACBQJlVwUCZVcEAmRqCQDYBAEFAmZVAwkBAiE9AgUCZG4JANgEAQUCZGsJAAIBAghXcm9uZyBMUAQCZHUJAQJiUwEFAmRvBAJkdwkBAmJTAQUCZHAEAmZZCgACYVgJAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmUQkAzAgCBQJkUQUDbmlsBQNuaWwDCQABAgUCYVgCCihJbnQsIEludCkFAmFYCQACAQkArAICCQADAQUCYVgCHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkDCQAAAgUCZlkFAmZZBAJjQwgFAmZZAl8yBAJmWggFAmZZAl8xBAJnYQMDCQBmAgUCZlIAAAkAZgIFAmZSBQJmWgcJAQJhUwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZlIFA25pbAIABQJmWgQCZ2IDCQAAAgUCZlEFAmRvCQCWCgQFAmdhAAAJAGUCCQBlAgUCZHUFAmdhBQJjQwUCZHcDCQAAAgUCZlEFAmRwCQCWCgQAAAUCZ2EFAmR1CQBlAgkAZQIFAmR3BQJnYQUCY0MJAAIBAhRpbnZhbGlkIG91dCBhc3NldCBpZAQCZ2MIBQJnYgJfMQQCZ2QIBQJnYgJfMgQCZkgIBQJnYgJfMwQCZkkIBQJnYgJfNAQCZ2UJAQJiVQIJAQFIAgUCZkkFAmZXCQEBSAIFAmZIBQJmVgQCZ2YJAQFMAgUCZ2UFAWEEAmdnAwkAAAIFAmZRAgVXQVZFUwUEdW5pdAkA2QQBBQJmUQQCZ2gDCQBmAgUCY0MAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiYwUCY0MFAmdnBQNuaWwFA25pbAQCZEcJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJkbQUCZ2EFAmdnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaQIJAKUIAQUCZG0FAmRqCQECYk8GBQJnYwUCZ2QFAmRRBQJnZgUCYW4IBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWIABQJnZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFjAgUCYW4IBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJnZgUDbmlsBQJnaAMJAAACBQJkRwUCZEcEAmdpCQD8BwQFAmFWAgRidXJuCQDMCAIFAmRRBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRrBQJkUQUDbmlsAwkAAAIFAmdpBQJnaQQCZ2oEAmdrAwkAAAIFBHRoaXMFAmJjAAAFAmNDBAJnbAMJAAACCQECYmgBBQJmUQUCYnIGBwMFAmdsCQCUCgIJAQEtAQkAZAIFAmZaBQJnawAACQCUCgIAAAkBAS0BCQBkAgUCZloFAmdrBAJlWQgFAmdqAl8xBAJlWggFAmdqAl8yBAJnbQkBAmVYAwUCZVkFAmVaAAAEAmduCAUCZ20CXzEEAmVPCAUCZ20CXzIEAmdvCQECZmICBQJlVwUCZU8DCQAAAgUCZ28FAmdvCQCUCgIJAM4IAgUCZEcFAmduBQJnYQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ3AABAJncQkAoggBCQEBWgADCQABAgUCZ3ECBlN0cmluZwQCY0gFAmdxCQDZBAEFAmNIAwkAAQIFAmdxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmdyAAQCZ3EJAKIIAQkBAmFhAAMJAAECBQJncQIGU3RyaW5nBAJjSAUCZ3EJANkEAQUCY0gDCQABAgUCZ3ECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgACZ3MJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAECZ3QBAmNVBAJncQkBAmdwAAMJAAECBQJncQIKQnl0ZVZlY3RvcgQCZ3UFAmdxCQAAAggFAmNVD2NhbGxlclB1YmxpY0tleQUCZ3UDCQABAgUCZ3ECBFVuaXQJAAACCAUCY1UGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBAmd2AQJjVQQCZ3EJAQJncAADCQABAgUCZ3ECCkJ5dGVWZWN0b3IEAmd1BQJncQMJAAACCAUCY1UPY2FsbGVyUHVibGljS2V5BQJndQYFAmdzAwkAAQIFAmdxAgRVbml0AwkAAAIIBQJjVQZjYWxsZXIFBHRoaXMGBQJncwkAAgECC01hdGNoIGVycm9yAQJndwMCZ3gCZXkCZ3kEAmJsCQECYmQABAJkbwkAkQMCBQJibAUBdwQCZHAJAJEDAgUCYmwFAXgEAmV6BQFnBAJlQgkApwMBBQFsBAJjSQkAuQICCQCnAwEFAmFaBQJlQgQCY0UDCQAAAgUCZ3gHCQDMCAIJALcCAgkAtgIBCQECYlMBBQJkbwUCZ3kJAMwIAgkAtgIBCQECYlMBBQJkcAUDbmlsCQDMCAIJALcCAgkAtgIBCQECYlMBBQJkcAUCZ3kJAMwIAgkAtgIBCQECYlMBBQJkbwUDbmlsBAJlQQkAkQMCBQJjRQAABAJjSAUCZUEEAmNKCQC5AgIFAmNJBQJlegQCZUMJALoCAgkAuQICCQC5AgIJALoCAgkAuQICBQJleQUCZXkJALkCAgUCZUEFAmV6BQJleQUCZUIJALkCAgUCY0oFAmV6BAJlRAkAuAICCQC3AgIFAmNICQC6AgIJALkCAgUCZXkFAmVCBQJjSgUCZXkKAQJjUwICY1QCZUUEAmd6BQJjVAQCZUcIBQJnegJfMQQCZGgIBQJnegJfMgMJAQIhPQIFAmRoBQR1bml0BQJjVAQCZUgJALoCAgkAtwICCQC5AgIFAmVHBQJlRwUCZUMJALcCAgkAuQICBQFnBQJlRwUCZUQEAmVJCQEBWAEJALgCAgUCZUgJAQV2YWx1ZQEFAmVHAwkAwAICBQFmBQJlSQkAlAoCBQJlSAUCZUUJAJQKAgUCZUgFBHVuaXQEAmNZCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmdBCgACZGEFAmNZCgACZGIJAJADAQUCZGEKAAJkYwkAlAoCBQJleQUEdW5pdAoBAmRkAgJkZQJkZgMJAGcCBQJkZgUCZGIFAmRlCQECY1MCBQJkZQkAkQMCBQJkYQUCZGYKAQJkZwICZGUCZGYDCQBnAgUCZGYFAmRiBQJkZQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQECZGcCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCCQECZGQCBQJkYwAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJlRwgFAmdBAl8xBAJkaAgFAmdBAl8yAwkBAiE9AgUCZGgFBHVuaXQFAmVHCQACAQkArAICAhlZIGNhbGN1bGF0aW9uIGVycm9yLCBZID0gCQCmAwEFAmVHAQJnQgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYVYJAQJhSAEJAKUIAQUEdGhpcwcfAmNVASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkDAmdDAmd4AmdEBAJnRQMJAAACBQJneAcEAmdGCQECYU8CBQR0aGlzCQECYWsABAJneQkAtwICCQC2AgEJAQJiUwEJAQJhTwIFBHRoaXMJAQJhagAJALYCAQUCZ0MJAJQKAgUCZ0YFAmd5BAJnRgkBAmFPAgUEdGhpcwkBAmFqAAQCZ3kJALcCAgkAtgIBCQECYlMBCQECYU8CBQR0aGlzCQECYWsACQC2AgEFAmdDCQCUCgIFAmdGBQJneQQCZ0YIBQJnRQJfMQQCZ3kIBQJnRQJfMgQCYmwJAQJiZAAEAmRvCQCRAwIFAmJsBQF3BAJkcAkAkQMCBQJibAUBeAQCY0UJAMwIAgkAtgIBCQECYlMBBQJkbwkAzAgCCQC2AgEJAQJiUwEFAmRwBQNuaWwEAmV5CQECY0QBBQJjRQQCZUcJAQJndwMFAmd4BQJleQkAtgIBBQJnQwQCZ0cJALgCAgkAuAICCQC2AgEJAQJiUwEFAmdGBQJlRwkAtgIBAAEEAmdICQCWAwEJAMwIAgAACQDMCAIJAKADAQUCZ0cFA25pbAQCZ0kDCQAAAgUCZ3gHCQDMCAIJALcCAgkAtwICCQC2AgEJAQJiUwEFAmRvCQC2AgEFAmdDCQC2AgEFAmdECQDMCAIJALgCAgkAtgIBCQECYlMBBQJkcAUCZ0cFA25pbAkAzAgCCQC4AgIJALYCAQkBAmJTAQUCZG8FAmdHCQDMCAIJALcCAgkAtwICCQC2AgEJAQJiUwEFAmRwCQC2AgEFAmdDCQC2AgEFAmdEBQNuaWwEAmdKCQECY0QBBQJnSQQCZWQDCQDAAgIFAmdKBQJleQYJAAIBCQC5CQIJAMwIAgIUbmV3IEQgaXMgZmV3ZXIgZXJyb3IJAMwIAgkApgMBBQJleQkAzAgCCQCmAwEFAmdKBQNuaWwCAl9fAwkAAAIFAmVkBQJlZAkAlAoCBQNuaWwFAmdICQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNVASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwUCZ0MCZ3gCZ0sCZ0wCZ0QEAmdNCgACYVgJAPwHBAUCYVYCF2dldFN3YXBDb250cmFjdFJFQURPTkxZBQNuaWwFA25pbAMJAAECBQJhWAIGU3RyaW5nBQJhWAkAAgEJAKwCAgkAAwEFAmFYAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcEAmdOCQDMCAIDCQBnAggJAQV2YWx1ZQEJAJEDAggFAmNVCHBheW1lbnRzAAAGYW1vdW50BQJnQwYJAQJhUwECDFdyb25nIGFtb3VudAkAzAgCAwkAAAIIBQJjVQZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdNBgkBAmFTAQIRUGVybWlzc2lvbiBkZW5pZWQFA25pbAMJAAACBQJnTgUCZ04EAmZwCQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwAABAJnTwkBAmJqAQgFAmZwB2Fzc2V0SWQEAmdQAwkAAAIFAmd4BwQCZ0YJAQJhTwIFBHRoaXMJAQJhawAEAmd5CQBlAgkBAmJTAQUCZ08ICQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwAABmFtb3VudAkAlAoCBQJnRgUCZ3kEAmdGCQECYU8CBQR0aGlzCQECYWoABAJneQkAZQIJAQJiUwEFAmdPCAkBBXZhbHVlAQkAkQMCCAUCY1UIcGF5bWVudHMAAAZhbW91bnQJAJQKAgUCZ0YFAmd5BAJnRggFAmdQAl8xBAJneQgFAmdQAl8yBAJibAkBAmJkAAQCZG8JAJEDAgUCYmwFAXcEAmRwCQCRAwIFAmJsBQF4BAJjRQMJAAACBQJneAcJAMwIAgkAuAICCQC2AgEJAQJiUwEFAmRvCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwAABmFtb3VudAkAzAgCCQC2AgEJAQJiUwEFAmRwBQNuaWwJAMwIAgkAtgIBCQECYlMBBQJkbwkAzAgCCQC4AgIJALYCAQkBAmJTAQUCZHAJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmNVCHBheW1lbnRzAAAGYW1vdW50BQNuaWwEAmV5CQECY0QBBQJjRQQCZUcJAQJndwMFAmd4BQJleQkAtgIBAAAEAmdHCQC4AgIJALgCAgkAtgIBCQECYlMBBQJnRgUCZUcJALYCAQABBAJnSAkAlgMBCQDMCAIAAAkAzAgCCQCgAwEFAmdHBQNuaWwEAmdRAwkAZwIFAmdIBQJnSwYJAAIBAixFeGNoYW5nZSByZXN1bHQgaXMgZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAMJAAACBQJnUQUCZ1EEAmdJAwkAAAIFAmd4BwkAzAgCCQC3AgIJALYCAQkBAmJTAQUCZG8JALYCAQUCZ0QJAMwIAgkAuAICCQC2AgEJAQJiUwEFAmRwBQJnRwUDbmlsCQDMCAIJALgCAgkAtgIBCQECYlMBBQJkbwUCZ0cJAMwIAgkAtwICCQC2AgEJAQJiUwEFAmRwCQC2AgEFAmdEBQNuaWwEAmdKCQECY0QBBQJnSQQCZWQDCQDAAgIFAmdKBQJleQYJAAIBAhRuZXcgRCBpcyBmZXdlciBlcnJvcgMJAAACBQJlZAUCZWQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJnTAUCZ0gJAQJiaAEFAmdGBQNuaWwFAmdICQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNVAQtjb25zdHJ1Y3RvcgEBWQQCZUMJAQJndgEFAmNVAwkAAAIFAmVDBQJlQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBWQAFAVkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVQEKc2V0TWFuYWdlcgECZ1IEAmVDCQECZ3YBBQJjVQMJAAACBQJlQwUCZUMEAmdTCQDZBAEFAmdSAwkAAAIFAmdTBQJnUwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWEABQJnUgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNVAQ5jb25maXJtTWFuYWdlcgAEAmN6CQECZ3IABAJnVAMJAQlpc0RlZmluZWQBBQJjegYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZ1QFAmdUBAJnVQMJAAACCAUCY1UPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJjegYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZ1UFAmdVCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAAkA2AQBCQEFdmFsdWUBBQJjegkAzAgCCQELRGVsZXRlRW50cnkBCQECYWEABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1UBA3B1dAICZ1YCZ1cEAmdYCQECYngABAJnWQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ1gFAUMCCldyIHN0IGFkZHIEAmdaCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJnWAUBRQIKV3Igc2wgYWRkcgMJAGYCAAAFAmdWCQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQJjVQhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJoYQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCY1UIcGF5bWVudHMAAAZhbW91bnQEAmhiCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwABBmFtb3VudAQCZVQJALgCAgkAtgIBCQECYlMBCQECYmoBBQJicgUCaGEDCQAAAgUCZVQFAmVUBAJlVQkAuAICCQC2AgEJAQJiUwEJAQJiagEFAmJzBQJoYgMJAAACBQJlVQUCZVUEAmVWCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJxCHF1YW50aXR5AwkAAAIFAmVWBQJlVgQCZVcJAQJlUAMFAmhhBQJoYgkAtgIBAAADCQAAAgUCZVcFAmVXBAJoYwkBAmZxCgkApQgBCAUCY1UGY2FsbGVyCQDYBAEIBQJjVQ10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmNVCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmNVCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJjVQhwYXltZW50cwABBQJnVgYHBgAAAgAEAmVxCAUCaGMCXzIEAmhkCAUCaGMCXzcEAmRHCAUCaGMCXzkEAmVyCAUCaGMDXzEwBAJlcwgFAmhjA18xMQQCZG8IBQJoYwNfMTIEAmRwCAUCaGMDXzEzBAJlYwkA/AcEBQJhVgIEZW1pdAkAzAgCBQJlcQUDbmlsBQNuaWwDCQAAAgUCZWMFAmVjBAJoZQQCZ3EFAmVjAwkAAQIFAmdxAgdBZGRyZXNzBAJoZgUCZ3EJAPwHBAUCaGYCBGVtaXQJAMwIAgUCZXEFA25pbAUDbmlsBQR1bml0AwkAAAIFAmhlBQJoZQQCaGcDCQBmAgUCZXIAAAkA/AcEBQJnWgIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRvBQJlcgUDbmlsBQNuaWwDCQAAAgUCaGcFAmhnBAJoaAMJAGYCBQJlcwAACQD8BwQFAmdaAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZHAFAmVzBQNuaWwFA25pbAMJAAACBQJoaAUCaGgEAmhpAwUCZ1cEAmhqCQD8BwQFAmdZAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJoZAUCZXEFA25pbAMJAAACBQJoagUCaGoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCY1UGY2FsbGVyBQJlcQUCaGQFA25pbAQCaGsJAQJlWAMAAAAAAAAEAmduCAUCaGsCXzEEAmVPCAUCaGsCXzIEAmhsAwkAwAICBQJlTwUCZVcGCQECYVMBCQC5CQIJAMwIAgIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAkAzAgCCQCmAwEFAmVUCQDMCAIJAKYDAQUCZVUJAMwIAgkApgMBBQJlVgkAzAgCCQCmAwEFAmVXCQDMCAIJAKYDAQUCZU8JAMwIAgkApAMBBQJlcgkAzAgCCQCkAwEFAmVzBQNuaWwCASADCQAAAgUCaGwFAmhsBAJobQgJAQV2YWx1ZQEJAOwHAQUCYnEIcXVhbnRpdHkDCQAAAgUCaG0FAmhtCQDOCAIJAM4IAgUCZEcFAmhpBQJnbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVQELcHV0T25lVGtuVjICAmZSAmdXBAJobgoAAmFYCQD8BwQFAmFWAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVgCB0Jvb2xlYW4FAmFYCQACAQkArAICCQADAQUCYVgCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhvAwMDCQECYmEABgkAAAIFAmJwBQFxBgkAAAIFAmJwBQFzBgUCaG4EAmdOCQDMCAIDAwkBASEBBQJobwYJAQJndAEFAmNVBgkBAmFTAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCY1UIcGF5bWVudHMAAQYJAQJhUwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdOBQJnTgQCZG8JANgEAQkBBXZhbHVlAQUCYnIEAmRwCQDYBAEJAQV2YWx1ZQEFAmJzBAJkbgUCYnEEAmZWBQJidAQCZlcFAmJ1BAJkbQMJAAACCAUCY1UGY2FsbGVyBQR0aGlzCAUCY1UMb3JpZ2luQ2FsbGVyCAUCY1UGY2FsbGVyBAJmcAkBBXZhbHVlAQkAkQMCCAUCY1UIcGF5bWVudHMAAAQCZGsJANgEAQkBBXZhbHVlAQgFAmZwB2Fzc2V0SWQEAmRRCAUCZnAGYW1vdW50BAJlVwMJAAACCAUCZnAHYXNzZXRJZAUCYnIJAQJlUAMJALYCAQUCZFEJALYCAQAACQC2AgEAAAkBAmVQAwkAtgIBAAAJALYCAQUCZFEJALYCAQAAAwkAAAIFAmVXBQJlVwQCaHAJAQJmdQUFAmRRBQJkawkApQgBBQJkbQkA2AQBCAUCY1UNdHJhbnNhY3Rpb25JZAYDCQAAAgUCaHAFAmhwBAJjQwgFAmhwAl8zBAJkRwgFAmhwAl8yBAJocQgFAmhwAl8xBAJlcQMDCQBmAgUCZlIAAAkAZgIFAmZSBQJocQcJAQJhUwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZlIFA25pbAIABQJocQQCaGMJAPwHBAUCYVYCBGVtaXQJAMwIAgUCZXEFA25pbAUDbmlsAwkAAAIFAmhjBQJoYwQCaGUEAmdxBQJoYwMJAAECBQJncQIHQWRkcmVzcwQCaGYFAmdxCQD8BwQFAmhmAgRlbWl0CQDMCAIFAmVxBQNuaWwFA25pbAUEdW5pdAMJAAACBQJoZQUCaGUEAmhpAwUCZ1cEAmhqCQD8BwQFAmJ6AghzdGFrZUZvcgkAzAgCCQClCAEIBQJjVQZjYWxsZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZG4FAmVxBQNuaWwDCQAAAgUCaGoFAmhqBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmNVBmNhbGxlcgUCZXEFAmRuBQNuaWwEAmdoAwkAZgIFAmNDAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYmMFAmNDCQDZBAEFAmRrBQNuaWwFA25pbAQCaHIDCQAAAgUEdGhpcwUCYmMJAJQKAgAAAAAEAmhzAwkAAAIIBQJmcAdhc3NldElkBQJicgYHAwUCaHMJAJQKAgkBAS0BBQJjQwAACQCUCgIAAAkBAS0BBQJjQwQCZVkIBQJocgJfMQQCZVoIBQJocgJfMgQCaHQJAQJlWAMFAmVZBQJlWgAABAJnbggFAmh0Al8xBAJlTwgFAmh0Al8yBAJnbwkBAmZiAgUCZVcFAmVPAwkAAAIFAmdvBQJnbwkAlAoCCQDOCAIJAM4IAgkAzggCBQJkRwUCaGkFAmdoBQJnbgUCZXEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1UBCnB1dEZvckZyZWUBAmh1AwkAZgIAAAUCaHUJAAIBAgpXcm9uZyBzbHBnAwkBAiE9AgkAkAMBCAUCY1UIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCaHYJAQJmcQoJAKUIAQgFAmNVBmNhbGxlcgkA2AQBCAUCY1UNdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwAABmFtb3VudAkAkQMCCAUCY1UIcGF5bWVudHMAAQUCaHUHBwYAAAIABAJkRwgFAmh2Al85BAJoYQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCY1UIcGF5bWVudHMAAAZhbW91bnQEAmhiCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJjVQhwYXltZW50cwABBmFtb3VudAQCZVcJAQJlUAMFAmhhBQJoYgkAtgIBAAADCQAAAgUCZVcFAmVXBAJodwkBAmVYAwAAAAAAAAQCZ24IBQJodwJfMQQCZU8IBQJodwJfMgQCZ28JAQJmYgIFAmVXBQJlTwMJAAACBQJnbwUCZ28JAM4IAgUCZEcFAmduCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNVAQNnZXQABAJlVwkBAmVQAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlVwUCZVcEAmVjCQECZm8BBQJjVQQCaHgIBQJlYwJfMQQCZEYIBQJlYwJfMgQCZFEIBQJlYwJfMwQCZGsIBQJlYwJfNAQCZEcIBQJlYwJfNQQCZUQJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCZFEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGsFAmRRBQNuaWwDCQAAAgUCZUQFAmVEBAJoeQkBAmVYAwkBAS0BBQJoeAkBAS0BBQJkRgAABAJnbggFAmh5Al8xBAJlTwgFAmh5Al8yBAJnbwkBAmZiAgUCZVcFAmVPAwkAAAIFAmdvBQJnbwkAzggCBQJkRwUCZ24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1UBC2dldE9uZVRrblYyAgJmUQJmUgQCaG4KAAJhWAkA/AcEBQJhVgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFYAgdCb29sZWFuBQJhWAkAAgEJAKwCAgkAAwEFAmFYAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJoegMDCQECYmEABgkAAAIFAmJwBQFzBgUCaG4EAmdOCQDMCAIDAwkBASEBBQJoegYJAQJndAEFAmNVBgkBAmFTAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCY1UIcGF5bWVudHMAAQYJAQJhUwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdOBQJnTgQCaEEJAQJmUAYFAmZRBQJmUggFAmNVCHBheW1lbnRzCAUCY1UGY2FsbGVyCAUCY1UMb3JpZ2luQ2FsbGVyCAUCY1UNdHJhbnNhY3Rpb25JZAQCZEcIBQJoQQJfMQQCZ2EIBQJoQQJfMgkAlAoCBQJkRwUCZ2EJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1UBCnJlZnJlc2hETHAABAJoQgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhdAAABAJoQwMJAGcCCQBlAgUCYW4FAmhCBQJhdwUEdW5pdAkBAmFTAQkAuQkCCQDMCAIJAKQDAQUCYXcJAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFAmhDBQJoQwQCZmkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFzAgEwCQECYVUBAgtpbnZhbGlkIGRMcAQCaEQJAQJlWAMAAAAAAAAEAmhFCAUCaEQCXzEEAmVPCAUCaEQCXzIEAmZhAwkBAiE9AgUCZmkFAmVPBQJoRQkBAmFTAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFAmZhCQCmAwEFAmVPCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNVARNnZXRPbmVUa25WMlJFQURPTkxZAgJmUQJoRgQCZG8JANgEAQkBBXZhbHVlAQUCYnIEAmRwCQDYBAEJAQV2YWx1ZQEFAmJzBAJkbgkA2AQBCQEFdmFsdWUBBQJicQQCY0UJAMwIAgkAtgIBCQECYlMBBQJkbwkAzAgCCQC2AgEJAQJiUwEFAmRwBQNuaWwEAmVOCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJkbgIQaW52YWxpZCBscCBhc3NldAhxdWFudGl0eQQCY2cJAQJjRAEFAmNFBAJjZgkAuAICBQJjZwkAvAIDCQC2AgEFAmhGBQJjZwUCZU4EAmhHAwkAAAIFAmZRBQJkbwAAAwkAAAIFAmZRBQJkcAABCQACAQIUaW52YWxpZCBvdXQgYXNzZXQgaWQEAmhICQECZXgDBQJjRQUCaEcFAmNmBAJnRwkAuAICCQCRAwIFAmNFBQJoRwUCaEgEAmdICQCWAwEJAMwIAgAACQDMCAIJAKADAQkAuAICBQJnRwUBZgUDbmlsBAJoSQkBAmNBAgUCZ0gFAmFZBAJmWggFAmhJAl8xBAJjQwgFAmhJAl8yCQCUCgIFA25pbAkAlAoCBQJmWgUCY0MCY1UBHGdldE9uZVRrblYyV2l0aEJvbnVzUkVBRE9OTFkCAmZRAmhGBAJkbwkA2AQBCQEFdmFsdWUBBQJicgQCZHAJANgEAQkBBXZhbHVlAQUCYnMEAmRuCQDYBAEJAQV2YWx1ZQEFAmJxBAJkdQkBAmJTAQUCZG8EAmR3CQECYlMBBQJkcAQCaEoKAAJhWAkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZRCQDMCAIFAmhGBQNuaWwFA25pbAMJAAECBQJhWAIKKEludCwgSW50KQUCYVgJAAIBCQCsAgIJAAMBBQJhWAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQQCZloIBQJoSgJfMQQCY0MIBQJoSgJfMgQCZWMJAQJkaQQCAAUCZG4FAmhGBQR0aGlzBAJkRQgFAmVjAl8xBAJkRggFAmVjAl8yBAJoSwkAZAIFAmRFBQJkRgQCZk8DCQAAAgUCaEsAAAMJAAACBQJmWgAAAAAJAAIBAhdib251cyBjYWxjdWxhdGlvbiBlcnJvcgkAawMJAGUCBQJmWgUCaEsFAWEFAmhLCQCUCgIFA25pbAkAlQoDBQJmWgUCY0MFAmZPAmNVAQlnZXROb0xlc3MCAmhMAmhNBAJlYwkBAmZvAQUCY1UEAmRFCAUCZWMCXzEEAmRGCAUCZWMCXzIEAmRRCAUCZWMCXzMEAmRrCAUCZWMCXzQEAmRHCAUCZWMCXzUDCQBmAgUCaEwFAmRFCQACAQkArAICCQCsAgIJAKwCAgIJRmFpbGVkOiAgCQCkAwEFAmRFAgMgPCAJAKQDAQUCaEwDCQBmAgUCaE0FAmRGCQACAQkArAICCQCsAgIJAKwCAgIIRmFpbGVkOiAJAKQDAQUCZEYCAyA8IAkApAMBBQJoTQQCZVcJAQJlUAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZVcFAmVXBAJoTgkA/AcEBQJhVgIEYnVybgkAzAgCBQJkUQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkawUCZFEFA25pbAMJAAACBQJoTgUCaE4EAmhPCQECZVgDCQEBLQEFAmRFCQEBLQEFAmRGAAAEAmduCAUCaE8CXzEEAmVPCAUCaE8CXzIEAmdvCQECZmICBQJlVwUCZU8DCQAAAgUCZ28FAmdvCQDOCAIFAmRHBQJnbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVQENdW5zdGFrZUFuZEdldAECY0IEAmhQAwkBAiE9AgkAkAMBCAUCY1UIcGF5bWVudHMAAAkAAgECDU5vIHBtbnRzIGV4cGQGAwkAAAIFAmhQBQJoUAQCaFEJAQJieAAEAmhkBQJicQQCaFIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmhRBQFDAgpXciBzdCBhZGRyBAJlVwkBAmVQAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlVwUCZVcEAmhTCQD8BwQFAmhSAgd1bnN0YWtlCQDMCAIJANgEAQUCaGQJAMwIAgUCY0IFA25pbAUDbmlsAwkAAAIFAmhTBQJoUwQCZWMJAQJkaQQJANgEAQgFAmNVDXRyYW5zYWN0aW9uSWQJANgEAQUCaGQFAmNCCAUCY1UGY2FsbGVyBAJkRQgFAmVjAl8xBAJkRggFAmVjAl8yBAJkcwkBDXBhcnNlSW50VmFsdWUBCAUCZWMCXzkEAmRHCAUCZWMDXzEwBAJoVAMDCQECYmEABgkAAAIFAmRzBQFzCQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUCZHMGAwkAAAIFAmhUBQJoVAQCaFUJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCY0IFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCaGQFAmNCBQNuaWwDCQAAAgUCaFUFAmhVBAJoVgkBAmVYAwkBAS0BBQJkRQkBAS0BBQJkRgAABAJnbggFAmhWAl8xBAJlTwgFAmhWAl8yBAJnbwkBAmZiAgUCZVcFAmVPAwkAAAIFAmdvBQJnbwkAzggCBQJkRwUCZ24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CY1UBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhXAmhYAmhNBAJoegMJAQJiYQAGCQAAAgUCYnAFAXMEAmdOCQDMCAIDCQEBIQEFAmh6BgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmNVCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZ04FAmdOBAJlVwkBAmVQAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlVwUCZVcEAmhTCQD8BwQFAmJ6Agd1bnN0YWtlCQDMCAIJANgEAQUCYnEJAMwIAgUCaFcFA25pbAUDbmlsAwkAAAIFAmhTBQJoUwQCaFkJAQJkaQQJANgEAQgFAmNVDXRyYW5zYWN0aW9uSWQJANgEAQUCYnEFAmhXCAUCY1UGY2FsbGVyBAJkRQgFAmhZAl8xBAJkRggFAmhZAl8yBAJkRwgFAmhZA18xMAQCaFoJAMwIAgMJAGcCBQJkRQUCaFgGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaFgFA25pbAIACQDMCAIDCQBnAgUCZEYFAmhNBgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaE0FA25pbAIABQNuaWwDCQAAAgUCaFoFAmhaBAJoTgkA/AcEBQJhVgIEYnVybgkAzAgCBQJoVwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJicQUCaFcFA25pbAMJAAACBQJoTgUCaE4EAmlhCQECZVgDCQEBLQEFAmRFCQEBLQEFAmRGAAAEAmduCAUCaWECXzEEAmVPCAUCaWECXzIEAmdvCQECZmICBQJlVwUCZU8DCQAAAgUCZ28FAmdvCQDOCAIFAmRHBQJnbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJjVQEVdW5zdGFrZUFuZEdldE9uZVRrblYyAwJoVwJmUQJmUgQCaG4KAAJhWAkA/AcEBQJhVgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFYAgdCb29sZWFuBQJhWAkAAgEJAKwCAgkAAwEFAmFYAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJoegMDCQECYmEABgkAAAIFAmJwBQFzBgUCaG4EAmdOCQDMCAIDAwkBASEBBQJoegYJAQJndAEFAmNVBgkBAmFTAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCY1UIcGF5bWVudHMAAAYJAQJhUwECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdOBQJnTgQCaFEJAQJieAAEAmhkBQJicQQCaFIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmhRBQFDAgpXciBzdCBhZGRyBAJkbQgFAmNVBmNhbGxlcgQCaWIFBHRoaXMEAmhTCQD8BwQFAmhSAg91bnN0YWtlSU5URVJOQUwJAMwIAgUCaGQJAMwIAgUCaFcJAMwIAggFAmRtBWJ5dGVzCQDMCAIIBQJpYgVieXRlcwUDbmlsBQNuaWwDCQAAAgUCaFMFAmhTBAJpYwkBAmZQBgUCZlEFAmZSCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJoZAUCaFcFA25pbAgFAmNVBmNhbGxlcggFAmNVDG9yaWdpbkNhbGxlcggFAmNVDXRyYW5zYWN0aW9uSWQEAmRHCAUCaWMCXzEEAmdhCAUCaWMCXzIJAJQKAgUCZEcFAmdhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNVARxwdXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJpZAJpZQQCaWYJAQJmdQUFAmlkBQJpZQIAAgAGBAJmSggFAmlmAl8xBAJkRwgFAmlmAl8yBAJjQwgFAmlmAl8zBAJmTwgFAmlmAl80CQCUCgIFA25pbAkAlQoDBQJmSgUCY0MFAmZPAmNVASFwdXRPbmVUa25WMldpdGhvdXRUYWtlRmVlUkVBRE9OTFkCAmlkAmllBAJpZwkBAmZ1BQUCaWQFAmllAgACAAcEAmZKCAUCaWcCXzEEAmRHCAUCaWcCXzIEAmNDCAUCaWcCXzMEAmZPCAUCaWcCXzQJAJQKAgUDbmlsCQCVCgMFAmZKBQJjQwUCZk8CY1UBCGFjdGl2YXRlAgJpaAJpaQMJAQIhPQIJAKUIAQgFAmNVBmNhbGxlcgkApQgBBQJhVgkAAgECBmRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhagAFAmloCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhawAFAmlpBQNuaWwCB3N1Y2Nlc3MCY1UBBHNldFMCAmlqAmhUAwkBAiE9AgkApQgBCAUCY1UGY2FsbGVyCQECYU8CBQR0aGlzCQECYW8ABQJncwkAzAgCCQELU3RyaW5nRW50cnkCBQJpagUCaFQFA25pbAJjVQEEc2V0SQICaWoCaFQDCQECIT0CCQClCAEIBQJjVQZjYWxsZXIJAQJhTwIFBHRoaXMJAQJhbwAFAmdzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJpagUCaFQFA25pbAJjVQEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYmQAAmNVARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJiVAkAlAoCBQNuaWwJAQJiUwEFAmJUAmNVARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJjbQJjbgJjcgQCaWsJAQJjcQMFAmNtBQJjbgUCY3IJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJpawAACQDMCAIJAKYDAQkAkQMCBQJpawABCQDMCAIJAKYDAQkAkQMCBQJpawACBQNuaWwCY1UBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAU0CaWwJAJQKAgUDbmlsCQEBTAIJAKcDAQUBTQUCaWwCY1UBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFJAUoJAJQKAgUDbmlsCQCmAwEJAQFIAgUBSQUBSgJjVQEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAgJiVgJiVwkAlAoCBQNuaWwJAKYDAQkBAmJVAgkApwMBBQJiVgkApwMBBQJiVwJjVQEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJAmRqAmNiAmRJAmRKAmRLAmRMAmltAmRNAmROCQCUCgIFA25pbAkBAmRIDQUCZGoFAmNiBQJkSQUCZEoFAmRLBQJkTAUCaW0FAmRNBQJkTgYHAAACAAJjVQEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmRqAmluAmRsAmltBAJlYwkBAmRpBAUCZGoFAmluBQJkbAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCaW0JAJQKAgUDbmlsCQCcCgoIBQJlYwJfMQgFAmVjAl8yCAUCZWMCXzMIBQJlYwJfNAgFAmVjAl81CAUCZWMCXzYIBQJlYwJfNwkApgMBCAUCZWMCXzgIBQJlYwJfOQgFAmVjA18xMAJjVQEJY2hhbmdlQW1wAAQCaW8JAPwHBAUCYVYCGmdldENoYW5nZUFtcENvbmZpZ1JFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwEAmlwBAJncQUCaW8DCQABAgUCZ3ECBlN0cmluZwQCaXEFAmdxBAJpcgkAtQkCBQJpcQUBbgkAlQoDCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaXIAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmlyAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJpcgACCQACAQISaW52YWxpZCBlbnRyeSB0eXBlBAJpcwgFAmlwAl8xBAJpdAgFAmlwAl8yBAJpdQgFAmlwAl8zBAJpdgkBDXBhcnNlSW50VmFsdWUBCQERQGV4dHJOYXRpdmUoMTA1OCkBCQECYWwABAJpdwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYXAAAAAEAml4CQBkAgUCaXYFAml0BAJpeQMJAGYCAAAFAml0AwkAZgIFAml1BQJpeAUCaXUFAml4AwkAZgIFAml4BQJpdQUCaXUFAml4BAJnTgkAzAgCAwkAZgIFAmFuCQBkAgUCaXcFAmlzBgkBAmFTAQIXdHJ5IGFnYWluIGluIGZldyBibG9ja3MJAMwIAgMJAQIhPQIFAml2BQJpeQYJAQJhUwECFmFscmVhZHkgcmVhY2hlZCB0YXJnZXQFA25pbAMJAAACBQJnTgUCZ04JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcAAFAmFuCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhbAAJAKQDAQUCaXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFtAQUCYW4JAKQDAQUCaXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECaXoBAmlBAAQCaUIEAmdxCQECZ3AAAwkAAQIFAmdxAgpCeXRlVmVjdG9yBAJndQUCZ3EFAmd1AwkAAQIFAmdxAgRVbml0CAUCaXoPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmdxBQJpegMJAAECBQJncQIFT3JkZXIEAmZlBQJncQQCaUMJAQJiYgAEAmlEAwkBAmdCAAkAlAoCBgIACQECZmQBBQJmZQQCYUsIBQJpRAJfMQQCYUwIBQJpRAJfMgQCYU0JAPQDAwgFAmZlCWJvZHlCeXRlcwkAkQMCCAUCZmUGcHJvb2ZzAAAIBQJmZQ9zZW5kZXJQdWJsaWNLZXkEAmFOCQD0AwMIBQJmZQlib2R5Qnl0ZXMJAJEDAggFAmZlBnByb29mcwABBQJpQwMDAwUCYUsFAmFNBwUCYU4HBgkBAmFKBAUCYUsFAmFMBQJhTQUCYU4DCQABAgUCZ3ECFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJjSAUCZ3EDCQD0AwMIBQJpeglib2R5Qnl0ZXMJAJEDAggFAml6BnByb29mcwAABQJpQgYEAmlFCQD2AwEJAQV2YWx1ZQEIBQJjSAZzY3JpcHQEAmlGCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYVYJAQJhRgAEAmlHCQDxBwEFBHRoaXMDCQAAAgUCaUYFAmlFCQECIT0CBQJpRwUCaUUHCQD0AwMIBQJpeglib2R5Qnl0ZXMJAJEDAggFAml6BnByb29mcwAABQJpQoGQDfw=", "height": 2501329, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HujMHDi7aGKCDeUYxgibsGuu3at6kLEXn6c81UC2hZVc Next: H43vYkug9L9Ne9o6njKb1YZdt6bFqULVGWo6U6Afd8iv Diff:
OldNewDifferences
17571757 let io = invoke(aV, "getChangeAmpConfigREADONLY", [toString(this)], nil)
17581758 let ip = {
17591759 let gq = io
1760- if ($isInstanceOf(gq, "List[Any]"))
1760+ if ($isInstanceOf(gq, "String"))
17611761 then {
17621762 let iq = gq
1763- $Tuple3({
1764- let aX = iq[0]
1765- if ($isInstanceOf(aX, "Int"))
1766- then aX
1767- else throw(($getType(aX) + " couldn't be cast to Int"))
1768- }, {
1769- let aX = iq[1]
1770- if ($isInstanceOf(aX, "Int"))
1771- then aX
1772- else throw(($getType(aX) + " couldn't be cast to Int"))
1773- }, {
1774- let aX = iq[2]
1775- if ($isInstanceOf(aX, "Int"))
1776- then aX
1777- else throw(($getType(aX) + " couldn't be cast to Int"))
1778- })
1763+ let ir = split(iq, n)
1764+ $Tuple3(parseIntValue(ir[0]), parseIntValue(ir[1]), parseIntValue(ir[2]))
17791765 }
17801766 else throw("invalid entry type")
17811767 }
1782- let ir = ip._1
1783- let is = ip._2
1784- let it = ip._3
1785- let iu = parseIntValue(getStringValue(al()))
1786- let iv = valueOrElse(getInteger(ap()), 0)
1787- let iw = (iu + is)
1788- let ix = if ((0 > is))
1789- then if ((it > iw))
1790- then it
1791- else iw
1792- else if ((iw > it))
1793- then it
1794- else iw
1795- let gN = [if ((an > (iv + ir)))
1768+ let is = ip._1
1769+ let it = ip._2
1770+ let iu = ip._3
1771+ let iv = parseIntValue(getStringValue(al()))
1772+ let iw = valueOrElse(getInteger(ap()), 0)
1773+ let ix = (iv + it)
1774+ let iy = if ((0 > it))
1775+ then if ((iu > ix))
1776+ then iu
1777+ else ix
1778+ else if ((ix > iu))
1779+ then iu
1780+ else ix
1781+ let gN = [if ((an > (iw + is)))
17961782 then true
1797- else aS("try again in few blocks"), if ((iu != ix))
1783+ else aS("try again in few blocks"), if ((iv != iy))
17981784 then true
17991785 else aS("already reached target")]
18001786 if ((gN == gN))
1801- then [IntegerEntry(ap(), an), StringEntry(al(), toString(ix)), StringEntry(am(an), toString(ix))]
1787+ then [IntegerEntry(ap(), an), StringEntry(al(), toString(iy)), StringEntry(am(an), toString(iy))]
18021788 else throw("Strict value is not equal to itself.")
18031789 }
18041790
18051791
1806-@Verifier(iy)
1807-func iz () = {
1808- let iA = {
1792+@Verifier(iz)
1793+func iA () = {
1794+ let iB = {
18091795 let gq = gp()
18101796 if ($isInstanceOf(gq, "ByteVector"))
18111797 then {
18131799 gu
18141800 }
18151801 else if ($isInstanceOf(gq, "Unit"))
1816- then iy.senderPublicKey
1802+ then iz.senderPublicKey
18171803 else throw("Match error")
18181804 }
1819- let gq = iy
1805+ let gq = iz
18201806 if ($isInstanceOf(gq, "Order"))
18211807 then {
18221808 let fe = gq
1823- let iB = bb()
1824- let iC = if (gB())
1809+ let iC = bb()
1810+ let iD = if (gB())
18251811 then $Tuple2(true, "")
18261812 else fd(fe)
1827- let aK = iC._1
1828- let aL = iC._2
1813+ let aK = iD._1
1814+ let aL = iD._2
18291815 let aM = sigVerify(fe.bodyBytes, fe.proofs[0], fe.senderPublicKey)
1830- let aN = sigVerify(fe.bodyBytes, fe.proofs[1], iB)
1816+ let aN = sigVerify(fe.bodyBytes, fe.proofs[1], iC)
18311817 if (if (if (aK)
18321818 then aM
18331819 else false)
18391825 else if ($isInstanceOf(gq, "SetScriptTransaction"))
18401826 then {
18411827 let cH = gq
1842- if (sigVerify(iy.bodyBytes, iy.proofs[0], iA))
1828+ if (sigVerify(iz.bodyBytes, iz.proofs[0], iB))
18431829 then true
18441830 else {
1845- let iD = blake2b256(value(cH.script))
1846- let iE = fromBase64String(value(getString(aV, aF())))
1847- let iF = scriptHash(this)
1848- if ((iE == iD))
1849- then (iF != iD)
1831+ let iE = blake2b256(value(cH.script))
1832+ let iF = fromBase64String(value(getString(aV, aF())))
1833+ let iG = scriptHash(this)
1834+ if ((iF == iE))
1835+ then (iG != iE)
18501836 else false
18511837 }
18521838 }
1853- else sigVerify(iy.bodyBytes, iy.proofs[0], iA)
1839+ else sigVerify(iz.bodyBytes, iz.proofs[0], iB)
18541840 }
18551841
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = toBigInt(100000000)
77
88 let c = toBigInt(1000000000000000000)
99
1010 let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(1)
1515
1616 let g = toBigInt(2)
1717
1818 let h = toBigInt(3)
1919
2020 let i = toBigInt(4)
2121
2222 let j = toBigInt((a - ((a * 1) / a)))
2323
2424 let k = "WAVES"
2525
2626 let l = "100"
2727
2828 let m = "1"
2929
3030 let n = "__"
3131
3232 let o = ""
3333
3434 let p = 1
3535
3636 let q = 2
3737
3838 let r = 3
3939
4040 let s = 4
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 3
4747
4848 let w = 4
4949
5050 let x = 5
5151
5252 let y = 6
5353
5454 let z = 7
5555
5656 let A = 8
5757
5858 let B = 9
5959
6060 let C = 1
6161
6262 let D = 6
6363
6464 let E = 7
6565
6666 let F = 10
6767
6868 let G = fraction(10, a, 10000)
6969
7070 func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
7171
7272
7373 func K (I,J) = fraction(I, c, J)
7474
7575
7676 func L (M,N) = toInt(fraction(M, toBigInt(N), c))
7777
7878
7979 func O (M,N,P) = toInt(fraction(M, toBigInt(N), c, P))
8080
8181
8282 func Q (I,J) = fraction(I, c, toBigInt(J))
8383
8484
8585 func R (M,N) = fraction(M, toBigInt(N), c)
8686
8787
8888 func S (T,U,V) = fraction(T, U, V)
8989
9090
9191 func W (M) = if ((d > M))
9292 then -(M)
9393 else M
9494
9595
9696 func X (M) = if ((d > M))
9797 then -(M)
9898 else M
9999
100100
101101 func Y () = "%s__factoryContract"
102102
103103
104104 func Z () = "%s__managerPublicKey"
105105
106106
107107 func aa () = "%s__pendingManagerPublicKey"
108108
109109
110110 func ab () = "%s%s__price__last"
111111
112112
113113 func ac (ad,ae) = makeString(["%s%s%d%d__price__history", toString(ad), toString(ae)], n)
114114
115115
116116 func af (ag,ah) = ((("%s%s%s__P__" + ag) + "__") + ah)
117117
118118
119119 func ai (ag,ah) = ((("%s%s%s__G__" + ag) + "__") + ah)
120120
121121
122122 func aj () = "%s__amountAsset"
123123
124124
125125 func ak () = "%s__priceAsset"
126126
127127
128128 func al () = "%s__amp"
129129
130130
131131 func am (an) = ("%s%d__amp__" + toString(an))
132132
133133
134134 func ao () = "%s__addonAddr"
135135
136136
137137 func ap () = "%s__changeAmpLastCall"
138138
139139
140140 let aq = "%s__fee"
141141
142142 let ar = valueOrElse(getInteger(this, aq), G)
143143
144144 let as = makeString(["%s", "dLp"], n)
145145
146146 let at = makeString(["%s", "dLpRefreshedHeight"], n)
147147
148148 let au = makeString(["%s", "refreshDLpDelay"], n)
149149
150150 let av = 30
151151
152152 let aw = valueOrElse(getInteger(this, au), av)
153153
154154 func ax () = "%s__factoryConfig"
155155
156156
157157 func ay () = "%s%s__matcher__publicKey"
158158
159159
160160 func az (aA,aB) = (((("%d%d%s__" + aA) + "__") + aB) + "__config")
161161
162162
163163 func aC (aD) = ("%s%s%s__mappings__baseAsset2internalId__" + aD)
164164
165165
166166 func aE () = "%s__shutdown"
167167
168168
169169 func aF () = "%s__allowedLpStableScriptHash"
170170
171171
172172 func aG () = "%s__feeCollectorAddress"
173173
174174
175175 func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
176176
177177
178178 func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
179179
180180
181181 func aO (aP,aQ) = valueOrErrorMessage(getString(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " not defined"], ""))
182182
183183
184184 func aR (aP,aQ) = valueOrErrorMessage(getInteger(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " not defined"], ""))
185185
186186
187187 func aS (aT) = throw(makeString(["lp_stable.ride:", aT], " "))
188188
189189
190190 func aU (aT) = makeString(["lp_stable.ride:", aT], " ")
191191
192192
193193 let aV = addressFromStringValue(aO(this, Y()))
194194
195195 let aW = {
196196 let aX = invoke(aV, "getInFeeREADONLY", [toString(this)], nil)
197197 if ($isInstanceOf(aX, "Int"))
198198 then aX
199199 else throw(($getType(aX) + " couldn't be cast to Int"))
200200 }
201201
202202 let aY = {
203203 let aX = invoke(aV, "getOutFeeREADONLY", [toString(this)], nil)
204204 if ($isInstanceOf(aX, "Int"))
205205 then aX
206206 else throw(($getType(aX) + " couldn't be cast to Int"))
207207 }
208208
209209 let aZ = aO(this, al())
210210
211211 func ba () = valueOrElse(getBoolean(aV, aE()), false)
212212
213213
214214 func bb () = fromBase58String(aO(aV, ay()))
215215
216216
217217 let bc = addressFromStringValue(aO(aV, aG()))
218218
219219 func bd () = {
220220 let be = aO(this, aj())
221221 let bf = aO(this, ak())
222222 let bg = aR(aV, aC(bf))
223223 let aA = aR(aV, aC(be))
224224 split(aO(aV, az(toString(aA), toString(bg))), n)
225225 }
226226
227227
228228 func bh (bi) = if ((bi == k))
229229 then unit
230230 else fromBase58String(bi)
231231
232232
233233 func bj (bi) = if ((bi == unit))
234234 then k
235235 else toBase58String(value(bi))
236236
237237
238238 func bk (bl) = $Tuple9(addressFromStringValue(bl[t]), parseIntValue(bl[u]), fromBase58String(bl[v]), bh(bl[w]), bh(bl[x]), parseIntValue(bl[y]), parseIntValue(bl[z]), fromBase58String(bl[A]), fromBase58String(bl[B]))
239239
240240
241241 let bm = bk(bd())
242242
243243 let bn = bm
244244
245245 let bo = bn._1
246246
247247 let bp = bn._2
248248
249249 let bq = bn._3
250250
251251 let br = bn._4
252252
253253 let bs = bn._5
254254
255255 let bt = bn._6
256256
257257 let bu = bn._7
258258
259259 let bv = bn._8
260260
261261 let bw = bn._9
262262
263263 func bx () = split(aO(aV, ax()), n)
264264
265265
266266 let by = bx()
267267
268268 let bz = valueOrErrorMessage(addressFromString(by[C]), "Invalid staking contract address")
269269
270270 let bA = valueOrErrorMessage(addressFromString(by[E]), "Invalid slipage contract address")
271271
272272 let bB = valueOrErrorMessage(addressFromString(by[F]), "Invalid gwx contract address")
273273
274274 let bC = valueOrErrorMessage(addressFromString(by[D]), "Invalid gwx contract address")
275275
276276 func bD (bE,bF,bG,bH,bI,bJ,bK,bL,bM,bN) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bE), toString(bF), toString(bG), toString(bH), toString(bI), toString(bJ), toString(bK), toString(bL), toString(bM), toString(bN)], n)
277277
278278
279279 func bO (bP,bQ,bR,bH,bK,bL) = makeString(["%d%d%d%d%d%d", toString(bP), toString(bQ), toString(bR), toString(bH), toString(bK), toString(bL)], n)
280280
281281
282282 func bS (bT) = if ((bT == "WAVES"))
283283 then wavesBalance(this).available
284284 else assetBalance(this, fromBase58String(bT))
285285
286286
287287 func bU (bV,bW) = fraction(bV, c, bW)
288288
289289
290290 func bX (bV,bW,P) = fraction(bV, c, bW, P)
291291
292292
293293 func bY (bZ,ca,cb) = {
294294 let cc = fraction((bZ - ca), b, ca)
295295 let cd = ((cb - W(cc)) > d)
296296 if (!(cd))
297297 then throw(("Big slpg: " + toString(cc)))
298298 else $Tuple2(cd, min([bZ, ca]))
299299 }
300300
301301
302302 func ce (cf,cg,ch) = {
303303 let cc = fraction(cg, b, cf)
304304 let ci = (ch > cc)
305305 if (if (ci)
306306 then true
307307 else (cg > cf))
308308 then throw(((((((toString(cg) + " ") + toString(cf)) + " ") + toString(cc)) + " ") + toString(ch)))
309309 else ci
310310 }
311311
312312
313313 func cj (ck,cl,cm,cn) = {
314314 let co = H(cm, ck)
315315 let cp = H(cn, cl)
316316 bU(cp, co)
317317 }
318318
319319
320320 func cq (cm,cn,cr) = {
321321 let cs = bt
322322 let ct = bu
323323 let cu = cj(cs, ct, cm, cn)
324324 let bW = H(cm, cs)
325325 let bV = H(cn, ct)
326326 let cv = H(cr, a)
327327 let cw = bU(bW, cv)
328328 let cx = bU(bV, cv)
329329 [cu, cw, cx]
330330 }
331331
332332
333333 func cy (cm,cn,cr) = {
334334 let cz = cq(cm, cn, cr)
335335 [L(cz[0], a), L(cz[1], a), L(cz[2], a)]
336336 }
337337
338338
339339 func cA (cB,ar) = {
340340 let cC = if ((ar == 0))
341341 then 0
342342 else fraction(cB, ar, a)
343343 $Tuple2((cB - cC), cC)
344344 }
345345
346346
347347 func cD (cE) = {
348348 let cF = cE[0]
349349 let cG = cE[1]
350350 let cH = (cF + cG)
351351 if ((cH == e))
352352 then e
353353 else {
354354 let cI = parseIntValue(aZ)
355355 let cJ = (cI * 2)
356356 let cz = fraction(cF, cG, f)
357357 let cK = fraction(cz, i, f)
358358 let cL = fraction(toBigInt(cJ), cH, f)
359359 let cM = toBigInt((cJ - 1))
360360 func cN (cO) = {
361361 let cP = fraction(cO, cO, f)
362362 let cQ = fraction(cP, cO, f)
363363 let cR = fraction(cQ, f, cK)
364364 fraction((cL + fraction(cR, g, f)), cO, (fraction(cM, cO, f) + fraction(h, cR, f)))
365365 }
366366
367367 func cS (cT,cU) = if (cT._2)
368368 then cT
369369 else {
370370 let cO = cT._1
371371 let cV = cN(cO)
372372 let cW = (cV - value(cO))
373373 let cX = if ((e > cW))
374374 then -(cW)
375375 else cW
376376 if ((f >= cX))
377377 then $Tuple2(cV, true)
378378 else $Tuple2(cV, false)
379379 }
380380
381381 let cY = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
382382 let cZ = {
383383 let da = cY
384384 let db = size(da)
385385 let dc = $Tuple2(cH, false)
386386 func dd (de,df) = if ((df >= db))
387387 then de
388388 else cS(de, da[df])
389389
390390 func dg (de,df) = if ((df >= db))
391391 then de
392392 else throw("List size exceeds 17")
393393
394394 dg(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17)
395395 }
396396 let cO = cZ._1
397397 let dh = cZ._2
398398 if (dh)
399399 then cO
400400 else throw(("D calculation error, D = " + toString(cO)))
401401 }
402402 }
403403
404404
405405 func di (dj,dk,dl,dm) = {
406406 let dn = bq
407407 let do = toBase58String(value(br))
408408 let dp = toBase58String(value(bs))
409409 let dq = bt
410410 let dr = bu
411411 let ds = toString(bp)
412412 let dt = valueOrErrorMessage(assetInfo(dn), "Wrong LP id").quantity
413413 if ((toBase58String(dn) != dk))
414414 then throw("Wrong pmt asset")
415415 else {
416416 let du = bS(do)
417417 let dv = H(du, dq)
418418 let dw = bS(dp)
419419 let dx = H(dw, dr)
420420 let dy = bU(dx, dv)
421421 let dz = L(dy, a)
422422 let dA = H(dl, a)
423423 let dB = H(dt, a)
424424 let dC = fraction(dv, dA, dB)
425425 let dD = fraction(dx, dA, dB)
426426 let dE = O(dC, dq, FLOOR)
427427 let dF = O(dD, dr, FLOOR)
428428 let dG = if ((dj == ""))
429429 then nil
430430 else [ScriptTransfer(dm, dE, if ((do == "WAVES"))
431431 then unit
432432 else fromBase58String(do)), ScriptTransfer(dm, dF, if ((dp == "WAVES"))
433433 then unit
434434 else fromBase58String(dp)), StringEntry(ai(toString(dm), dj), bO(dE, dF, dl, dz, an, lastBlock.timestamp)), IntegerEntry(ab(), dz), IntegerEntry(ac(an, lastBlock.timestamp), dz)]
435435 $Tuple10(dE, dF, do, dp, du, dw, dt, dy, ds, dG)
436436 }
437437 }
438438
439439
440440 func dH (dj,cb,dI,dJ,dK,dL,dm,dM,dN,dO,dP,dQ,dR) = {
441441 let dn = bq
442442 let dS = toBase58String(value(br))
443443 let dT = toBase58String(value(bs))
444444 let dU = bv
445445 let dV = bw
446446 let dW = bt
447447 let dX = bu
448448 let ds = toString(bp)
449449 let dY = valueOrErrorMessage(assetInfo(dn), "Wr lp as").quantity
450450 let du = if (dM)
451451 then bS(dS)
452452 else if (if (dO)
453453 then (dR == dS)
454454 else false)
455455 then (bS(dS) - dQ)
456456 else if (dO)
457457 then bS(dS)
458458 else (bS(dS) - dI)
459459 let dw = if (dM)
460460 then bS(dT)
461461 else if (if (dO)
462462 then (dR == dT)
463463 else false)
464464 then (bS(dT) - dQ)
465465 else if (dO)
466466 then bS(dT)
467467 else (bS(dT) - dK)
468468 let dZ = H(dI, dW)
469469 let ea = H(dK, dX)
470470 let eb = bU(ea, dZ)
471471 let dv = H(du, dW)
472472 let dx = H(dw, dX)
473473 let cg = cD([dv, dx])
474474 let ec = if ((dY == 0))
475475 then {
476476 let cf = cD([(dv + dZ), (dx + ea)])
477477 let ed = if ((cf > cg))
478478 then true
479479 else throw("D1 should be greater than D0")
480480 if ((ed == ed))
481481 then {
482482 let dy = d
483483 let ee = d
484484 let cv = cf
485485 $Tuple5(L(cv, a), L(dZ, dW), L(ea, dX), bU((dx + ea), (dv + dZ)), ee)
486486 }
487487 else throw("Strict value is not equal to itself.")
488488 }
489489 else {
490490 let dy = bU(dx, dv)
491491 let ef = fraction(W((dy - eb)), c, dy)
492492 let ee = H(cb, a)
493493 if (if (if (dP)
494494 then (dy != d)
495495 else false)
496496 then (ef > ee)
497497 else false)
498498 then throw(((("Price slippage " + toString(ef)) + " > ") + toString(ee)))
499499 else {
500500 let eg = H(dY, a)
501501 let eh = fraction(dZ, bX(dx, dv, CEILING), c, CEILING)
502502 let ei = fraction(ea, c, bX(dx, dv, FLOOR), CEILING)
503503 let ej = if ((eh > ea))
504504 then $Tuple2(ei, ea)
505505 else $Tuple2(dZ, eh)
506506 let ek = ej._1
507507 let el = ej._2
508508 let cf = cD([(dv + ek), (dx + el)])
509509 let ed = if ((cf > cg))
510510 then true
511511 else throw("D1 should be greater than D0")
512512 if ((ed == ed))
513513 then {
514514 let cv = fraction(eg, (cf - cg), cg)
515515 $Tuple5(O(cv, a, FLOOR), O(ek, dW, CEILING), O(el, dX, CEILING), dy, ee)
516516 }
517517 else throw("Strict value is not equal to itself.")
518518 }
519519 }
520520 let em = ec._1
521521 let en = ec._2
522522 let eo = ec._3
523523 let dz = L(ec._4, a)
524524 let ep = L(ec._5, a)
525525 if ((0 >= em))
526526 then throw("LP <= 0")
527527 else {
528528 let eq = if (!(dN))
529529 then 0
530530 else em
531531 let er = (dI - en)
532532 let es = (dK - eo)
533533 let et = if (if (dO)
534534 then (dR == dS)
535535 else false)
536536 then $Tuple2(dQ, 0)
537537 else if (if (dO)
538538 then (dR == dT)
539539 else false)
540540 then $Tuple2(0, dQ)
541541 else $Tuple2(en, eo)
542542 let eu = et._1
543543 let ev = et._2
544544 let ew = [IntegerEntry(ab(), dz), IntegerEntry(ac(an, lastBlock.timestamp), dz), StringEntry(af(dm, dj), bD(eu, ev, eq, dz, cb, ep, an, lastBlock.timestamp, er, es))]
545545 $Tuple13(em, eq, dz, du, dw, dY, dn, ds, ew, er, es, dJ, dL)
546546 }
547547 }
548548
549549
550550 func ex (cE,cU,ey) = {
551551 let ez = g
552552 let eA = cE[if ((cU == 0))
553553 then 1
554554 else 0]
555555 let eB = parseBigIntValue(l)
556556 let cI = (parseBigIntValue(aZ) * eB)
557557 let cH = eA
558558 let cJ = (cI * ez)
559559 let eC = (((((ey * ey) / (eA * ez)) * ey) * eB) / (cJ * ez))
560560 let eD = ((cH + ((ey * eB) / cJ)) - ey)
561561 func cS (cT,eE) = {
562562 let eF = cT
563563 let eG = eF._1
564564 let dh = eF._2
565565 if ((dh != unit))
566566 then cT
567567 else {
568568 let eH = (((eG * eG) + eC) / ((g * eG) + eD))
569569 let eI = X((eH - value(eG)))
570570 if ((f >= eI))
571571 then $Tuple2(eH, eE)
572572 else $Tuple2(eH, unit)
573573 }
574574 }
575575
576576 let cY = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
577577 let eJ = {
578578 let da = cY
579579 let db = size(da)
580580 let dc = $Tuple2(ey, unit)
581581 func dd (de,df) = if ((df >= db))
582582 then de
583583 else cS(de, da[df])
584584
585585 func dg (de,df) = if ((df >= db))
586586 then de
587587 else throw("List size exceeds 15")
588588
589589 dg(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
590590 }
591591 let eG = eJ._1
592592 let dh = eJ._2
593593 if ((dh != unit))
594594 then eG
595595 else throw(("Y calculation error, Y = " + toString(eG)))
596596 }
597597
598598
599599 func eK (eL,eM,eN) = {
600600 let eO = fraction(cD([K(eL, toBigInt(bt)), K(eM, toBigInt(bu))]), c, eN)
601601 if ((eN == e))
602602 then e
603603 else eO
604604 }
605605
606606
607607 func eP (eQ,eR,eS) = {
608608 let eT = (toBigInt(bS(bj(br))) - eQ)
609609 let eU = (toBigInt(bS(bj(bs))) - eR)
610610 let eV = (toBigInt(value(assetInfo(bq)).quantity) - eS)
611611 let eW = eK(eT, eU, eV)
612612 eW
613613 }
614614
615615
616616 func eX (eY,eZ,eS) = {
617617 let eT = (bS(bj(br)) + eY)
618618 let eU = (bS(bj(bs)) + eZ)
619619 let eV = (value(assetInfo(bq)).quantity + eS)
620620 let eO = eK(toBigInt(eT), toBigInt(eU), toBigInt(eV))
621621 let fa = [IntegerEntry(at, an), StringEntry(as, toString(eO))]
622622 $Tuple2(fa, eO)
623623 }
624624
625625
626626 func fb (fc,eO) = if ((eO >= fc))
627627 then true
628628 else aS("updated DLp lower than current DLp")
629629
630630
631631 func fd (fe) = {
632632 let eT = bS(bj(br))
633633 let eU = bS(bj(bs))
634634 let ff = fe.amount
635635 let fg = fraction(fe.amount, fe.price, a, FLOOR)
636636 let fh = if ((fe.orderType == Buy))
637637 then $Tuple2(ff, -(fg))
638638 else $Tuple2(-(ff), fg)
639639 let eY = fh._1
640640 let eZ = fh._2
641641 if (if (if (ba())
642642 then true
643643 else (bp == r))
644644 then true
645645 else (bp == s))
646646 then throw("Admin blocked")
647647 else if (if ((fe.assetPair.amountAsset != br))
648648 then true
649649 else (fe.assetPair.priceAsset != bs))
650650 then throw("Wr assets")
651651 else {
652652 let fi = parseBigIntValue(valueOrElse(getString(this, as), "0"))
653653 let fj = eX(eY, eZ, 0)
654654 let fk = fj._1
655655 let fl = fj._2
656656 let fm = (fl >= fi)
657657 let fn = makeString(["dLp=", toString(fi), " dLpNew=", toString(fl), " amountAssetBalance=", toString(eT), " priceAssetBalance=", toString(eU), " amountAssetBalanceDelta=", toString(eY), " priceAssetBalanceDelta=", toString(eZ), " height=", toString(an)], "")
658658 $Tuple2(fm, fn)
659659 }
660660 }
661661
662662
663663 func fo (cU) = if ((size(cU.payments) != 1))
664664 then throw("1 pmnt exp")
665665 else {
666666 let fp = value(cU.payments[0])
667667 let dk = value(fp.assetId)
668668 let dQ = fp.amount
669669 let ec = di(toBase58String(cU.transactionId), toBase58String(dk), dQ, cU.caller)
670670 let dE = ec._1
671671 let dF = ec._2
672672 let ds = parseIntValue(ec._9)
673673 let dG = ec._10
674674 if (if (ba())
675675 then true
676676 else (ds == s))
677677 then throw(("Admin blocked: " + toString(ds)))
678678 else $Tuple5(dE, dF, dQ, dk, dG)
679679 }
680680
681681
682682 func fq (fr,ah,fs,ft,cb,dN,dO,dP,dQ,dR) = {
683683 let ec = dH(ah, cb, value(fs).amount, value(fs).assetId, value(ft).amount, value(ft).assetId, fr, (ah == ""), dN, dO, dP, dQ, dR)
684684 let ds = parseIntValue(ec._8)
685685 if (if (if (ba())
686686 then true
687687 else (ds == q))
688688 then true
689689 else (ds == s))
690690 then throw(("Blocked:" + toString(ds)))
691691 else ec
692692 }
693693
694694
695695 func fu (fv,dk,dm,ah,fw) = {
696696 let do = toBase58String(value(br))
697697 let dp = toBase58String(value(bs))
698698 let dn = bq
699699 let dW = bt
700700 let dX = bu
701701 let eV = toBigInt(valueOrErrorMessage(assetInfo(dn), "invalid lp asset").quantity)
702702 let fx = if ((eV > e))
703703 then true
704704 else throw("initial deposit requires all coins")
705705 if ((fx == fx))
706706 then {
707707 let du = bS(do)
708708 let dw = bS(dp)
709709 let fy = if ((ah == ""))
710710 then $Tuple2(du, dw)
711711 else if ((dk == do))
712712 then if ((fv > du))
713713 then throw("invalid payment amount")
714714 else $Tuple2((du - fv), dw)
715715 else if ((dk == dp))
716716 then if ((fv > dw))
717717 then throw("invalid payment amount")
718718 else $Tuple2(du, (dw - fv))
719719 else throw("wrong pmtAssetId")
720720 let fz = fy._1
721721 let fA = fy._2
722722 let fB = if ((dk == do))
723723 then $Tuple2(fv, 0)
724724 else if ((dk == dp))
725725 then $Tuple2(0, fv)
726726 else throw("invalid payment")
727727 let fC = fB._1
728728 let fD = fB._2
729729 let fE = if (fw)
730730 then $Tuple3(cA(fC, aW)._1, cA(fD, aW)._1, cA(fv, aW)._2)
731731 else $Tuple3(fC, fD, 0)
732732 let fF = fE._1
733733 let fG = fE._2
734734 let cC = fE._3
735735 let fH = (fz + fF)
736736 let fI = (fA + fG)
737737 let cg = cD([H(fz, bt), H(fA, bu)])
738738 let cf = cD([H(fH, bt), H(fI, bu)])
739739 let ed = if ((cf > cg))
740740 then true
741741 else throw()
742742 if ((ed == ed))
743743 then {
744744 let fJ = fraction(eV, (cf - cg), cg, FLOOR)
745745 let dz = L(bU(H(fI, dX), H(fH, dW)), a)
746746 let ew = [IntegerEntry(ab(), dz), IntegerEntry(ac(an, lastBlock.timestamp), dz), StringEntry(af(dm, ah), bD(fC, fD, toInt(fJ), dz, 0, 0, an, lastBlock.timestamp, 0, 0))]
747747 let fK = fraction(fA, a, fz)
748748 let fL = fraction(fv, a, (fK + a))
749749 let fM = (fv - fL)
750750 let fN = fraction(eV, toBigInt(fM), toBigInt(fA))
751751 let fO = toInt(fraction((fJ - fN), b, fN))
752752 $Tuple4(toInt(fJ), ew, cC, fO)
753753 }
754754 else throw("Strict value is not equal to itself.")
755755 }
756756 else throw("Strict value is not equal to itself.")
757757 }
758758
759759
760760 func fP (fQ,fR,fS,fr,fT,fU) = {
761761 let dn = toBase58String(value(bq))
762762 let do = toBase58String(value(br))
763763 let dp = toBase58String(value(bs))
764764 let fV = bt
765765 let fW = bu
766766 let fX = bp
767767 let dm = if ((fr == bC))
768768 then fT
769769 else fr
770770 let fp = value(fS[0])
771771 let dk = value(fp.assetId)
772772 let dQ = fp.amount
773773 let eW = eP(e, e, e)
774774 if ((eW == eW))
775775 then {
776776 let dj = toBase58String(fU)
777777 if ((dn != toBase58String(dk)))
778778 then throw("Wrong LP")
779779 else {
780780 let du = bS(do)
781781 let dw = bS(dp)
782782 let fY = {
783783 let aX = invoke(this, "getOneTknV2READONLY", [fQ, dQ], nil)
784784 if ($isInstanceOf(aX, "(Int, Int)"))
785785 then aX
786786 else throw(($getType(aX) + " couldn't be cast to (Int, Int)"))
787787 }
788788 if ((fY == fY))
789789 then {
790790 let cC = fY._2
791791 let fZ = fY._1
792792 let ga = if (if ((fR > 0))
793793 then (fR > fZ)
794794 else false)
795795 then aS(makeString(["amount to receive is less than ", toString(fR)], ""))
796796 else fZ
797797 let gb = if ((fQ == do))
798798 then $Tuple4(ga, 0, ((du - ga) - cC), dw)
799799 else if ((fQ == dp))
800800 then $Tuple4(0, ga, du, ((dw - ga) - cC))
801801 else throw("invalid out asset id")
802802 let gc = gb._1
803803 let gd = gb._2
804804 let fH = gb._3
805805 let fI = gb._4
806806 let ge = bU(H(fI, fW), H(fH, fV))
807807 let gf = L(ge, a)
808808 let gg = if ((fQ == "WAVES"))
809809 then unit
810810 else fromBase58String(fQ)
811811 let gh = if ((cC > 0))
812812 then [ScriptTransfer(bc, cC, gg)]
813813 else nil
814814 let dG = ([ScriptTransfer(dm, ga, gg), StringEntry(ai(toString(dm), dj), bO(gc, gd, dQ, gf, an, lastBlock.timestamp)), IntegerEntry(ab(), gf), IntegerEntry(ac(an, lastBlock.timestamp), gf)] ++ gh)
815815 if ((dG == dG))
816816 then {
817817 let gi = invoke(aV, "burn", [dQ], [AttachedPayment(dk, dQ)])
818818 if ((gi == gi))
819819 then {
820820 let gj = {
821821 let gk = if ((this == bc))
822822 then 0
823823 else cC
824824 let gl = if ((bh(fQ) == br))
825825 then true
826826 else false
827827 if (gl)
828828 then $Tuple2(-((fZ + gk)), 0)
829829 else $Tuple2(0, -((fZ + gk)))
830830 }
831831 let eY = gj._1
832832 let eZ = gj._2
833833 let gm = eX(eY, eZ, 0)
834834 let gn = gm._1
835835 let eO = gm._2
836836 let go = fb(eW, eO)
837837 if ((go == go))
838838 then $Tuple2((dG ++ gn), ga)
839839 else throw("Strict value is not equal to itself.")
840840 }
841841 else throw("Strict value is not equal to itself.")
842842 }
843843 else throw("Strict value is not equal to itself.")
844844 }
845845 else throw("Strict value is not equal to itself.")
846846 }
847847 }
848848 else throw("Strict value is not equal to itself.")
849849 }
850850
851851
852852 func gp () = {
853853 let gq = getString(Z())
854854 if ($isInstanceOf(gq, "String"))
855855 then {
856856 let cH = gq
857857 fromBase58String(cH)
858858 }
859859 else if ($isInstanceOf(gq, "Unit"))
860860 then unit
861861 else throw("Match error")
862862 }
863863
864864
865865 func gr () = {
866866 let gq = getString(aa())
867867 if ($isInstanceOf(gq, "String"))
868868 then {
869869 let cH = gq
870870 fromBase58String(cH)
871871 }
872872 else if ($isInstanceOf(gq, "Unit"))
873873 then unit
874874 else throw("Match error")
875875 }
876876
877877
878878 let gs = throw("Permission denied")
879879
880880 func gt (cU) = {
881881 let gq = gp()
882882 if ($isInstanceOf(gq, "ByteVector"))
883883 then {
884884 let gu = gq
885885 (cU.callerPublicKey == gu)
886886 }
887887 else if ($isInstanceOf(gq, "Unit"))
888888 then (cU.caller == this)
889889 else throw("Match error")
890890 }
891891
892892
893893 func gv (cU) = {
894894 let gq = gp()
895895 if ($isInstanceOf(gq, "ByteVector"))
896896 then {
897897 let gu = gq
898898 if ((cU.callerPublicKey == gu))
899899 then true
900900 else gs
901901 }
902902 else if ($isInstanceOf(gq, "Unit"))
903903 then if ((cU.caller == this))
904904 then true
905905 else gs
906906 else throw("Match error")
907907 }
908908
909909
910910 func gw (gx,ey,gy) = {
911911 let bl = bd()
912912 let do = bl[w]
913913 let dp = bl[x]
914914 let ez = g
915915 let eB = parseBigIntValue(l)
916916 let cI = (parseBigIntValue(aZ) * eB)
917917 let cE = if ((gx == false))
918918 then [(toBigInt(bS(do)) + gy), toBigInt(bS(dp))]
919919 else [(toBigInt(bS(dp)) + gy), toBigInt(bS(do))]
920920 let eA = cE[0]
921921 let cH = eA
922922 let cJ = (cI * ez)
923923 let eC = (((((ey * ey) / (eA * ez)) * ey) * eB) / (cJ * ez))
924924 let eD = ((cH + ((ey * eB) / cJ)) - ey)
925925 func cS (cT,eE) = {
926926 let gz = cT
927927 let eG = gz._1
928928 let dh = gz._2
929929 if ((dh != unit))
930930 then cT
931931 else {
932932 let eH = (((eG * eG) + eC) / ((g * eG) + eD))
933933 let eI = X((eH - value(eG)))
934934 if ((f >= eI))
935935 then $Tuple2(eH, eE)
936936 else $Tuple2(eH, unit)
937937 }
938938 }
939939
940940 let cY = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
941941 let gA = {
942942 let da = cY
943943 let db = size(da)
944944 let dc = $Tuple2(ey, unit)
945945 func dd (de,df) = if ((df >= db))
946946 then de
947947 else cS(de, da[df])
948948
949949 func dg (de,df) = if ((df >= db))
950950 then de
951951 else throw("List size exceeds 15")
952952
953953 dg(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dd(dc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
954954 }
955955 let eG = gA._1
956956 let dh = gA._2
957957 if ((dh != unit))
958958 then eG
959959 else throw(("Y calculation error, Y = " + toString(eG)))
960960 }
961961
962962
963963 func gB () = valueOrElse(getBoolean(aV, aH(toString(this))), false)
964964
965965
966966 @Callable(cU)
967967 func calculateAmountOutForSwapREADONLY (gC,gx,gD) = {
968968 let gE = if ((gx == false))
969969 then {
970970 let gF = aO(this, ak())
971971 let gy = (toBigInt(bS(aO(this, aj()))) + toBigInt(gC))
972972 $Tuple2(gF, gy)
973973 }
974974 else {
975975 let gF = aO(this, aj())
976976 let gy = (toBigInt(bS(aO(this, ak()))) + toBigInt(gC))
977977 $Tuple2(gF, gy)
978978 }
979979 let gF = gE._1
980980 let gy = gE._2
981981 let bl = bd()
982982 let do = bl[w]
983983 let dp = bl[x]
984984 let cE = [toBigInt(bS(do)), toBigInt(bS(dp))]
985985 let ey = cD(cE)
986986 let eG = gw(gx, ey, toBigInt(gC))
987987 let gG = ((toBigInt(bS(gF)) - eG) - toBigInt(1))
988988 let gH = max([0, toInt(gG)])
989989 let gI = if ((gx == false))
990990 then [((toBigInt(bS(do)) + toBigInt(gC)) + toBigInt(gD)), (toBigInt(bS(dp)) - gG)]
991991 else [(toBigInt(bS(do)) - gG), ((toBigInt(bS(dp)) + toBigInt(gC)) + toBigInt(gD))]
992992 let gJ = cD(gI)
993993 let ed = if ((gJ >= ey))
994994 then true
995995 else throw(makeString(["new D is fewer error", toString(ey), toString(gJ)], "__"))
996996 if ((ed == ed))
997997 then $Tuple2(nil, gH)
998998 else throw("Strict value is not equal to itself.")
999999 }
10001000
10011001
10021002
10031003 @Callable(cU)
10041004 func calculateAmountOutForSwapAndSendTokens (gC,gx,gK,gL,gD) = {
10051005 let gM = {
10061006 let aX = invoke(aV, "getSwapContractREADONLY", nil, nil)
10071007 if ($isInstanceOf(aX, "String"))
10081008 then aX
10091009 else throw(($getType(aX) + " couldn't be cast to String"))
10101010 }
10111011 let gN = [if ((value(cU.payments[0]).amount >= gC))
10121012 then true
10131013 else aS("Wrong amount"), if ((cU.caller == addressFromStringValue(gM)))
10141014 then true
10151015 else aS("Permission denied")]
10161016 if ((gN == gN))
10171017 then {
10181018 let fp = value(cU.payments[0])
10191019 let gO = bj(fp.assetId)
10201020 let gP = if ((gx == false))
10211021 then {
10221022 let gF = aO(this, ak())
10231023 let gy = (bS(gO) - value(cU.payments[0]).amount)
10241024 $Tuple2(gF, gy)
10251025 }
10261026 else {
10271027 let gF = aO(this, aj())
10281028 let gy = (bS(gO) - value(cU.payments[0]).amount)
10291029 $Tuple2(gF, gy)
10301030 }
10311031 let gF = gP._1
10321032 let gy = gP._2
10331033 let bl = bd()
10341034 let do = bl[w]
10351035 let dp = bl[x]
10361036 let cE = if ((gx == false))
10371037 then [(toBigInt(bS(do)) - toBigInt(value(cU.payments[0]).amount)), toBigInt(bS(dp))]
10381038 else [toBigInt(bS(do)), (toBigInt(bS(dp)) - toBigInt(value(cU.payments[0]).amount))]
10391039 let ey = cD(cE)
10401040 let eG = gw(gx, ey, toBigInt(0))
10411041 let gG = ((toBigInt(bS(gF)) - eG) - toBigInt(1))
10421042 let gH = max([0, toInt(gG)])
10431043 let gQ = if ((gH >= gK))
10441044 then true
10451045 else throw("Exchange result is fewer coins than expected")
10461046 if ((gQ == gQ))
10471047 then {
10481048 let gI = if ((gx == false))
10491049 then [(toBigInt(bS(do)) + toBigInt(gD)), (toBigInt(bS(dp)) - gG)]
10501050 else [(toBigInt(bS(do)) - gG), (toBigInt(bS(dp)) + toBigInt(gD))]
10511051 let gJ = cD(gI)
10521052 let ed = if ((gJ >= ey))
10531053 then true
10541054 else throw("new D is fewer error")
10551055 if ((ed == ed))
10561056 then $Tuple2([ScriptTransfer(addressFromStringValue(gL), gH, bh(gF))], gH)
10571057 else throw("Strict value is not equal to itself.")
10581058 }
10591059 else throw("Strict value is not equal to itself.")
10601060 }
10611061 else throw("Strict value is not equal to itself.")
10621062 }
10631063
10641064
10651065
10661066 @Callable(cU)
10671067 func constructor (Y) = {
10681068 let eC = gv(cU)
10691069 if ((eC == eC))
10701070 then [StringEntry(Y(), Y)]
10711071 else throw("Strict value is not equal to itself.")
10721072 }
10731073
10741074
10751075
10761076 @Callable(cU)
10771077 func setManager (gR) = {
10781078 let eC = gv(cU)
10791079 if ((eC == eC))
10801080 then {
10811081 let gS = fromBase58String(gR)
10821082 if ((gS == gS))
10831083 then [StringEntry(aa(), gR)]
10841084 else throw("Strict value is not equal to itself.")
10851085 }
10861086 else throw("Strict value is not equal to itself.")
10871087 }
10881088
10891089
10901090
10911091 @Callable(cU)
10921092 func confirmManager () = {
10931093 let cz = gr()
10941094 let gT = if (isDefined(cz))
10951095 then true
10961096 else throw("No pending manager")
10971097 if ((gT == gT))
10981098 then {
10991099 let gU = if ((cU.callerPublicKey == value(cz)))
11001100 then true
11011101 else throw("You are not pending manager")
11021102 if ((gU == gU))
11031103 then [StringEntry(Z(), toBase58String(value(cz))), DeleteEntry(aa())]
11041104 else throw("Strict value is not equal to itself.")
11051105 }
11061106 else throw("Strict value is not equal to itself.")
11071107 }
11081108
11091109
11101110
11111111 @Callable(cU)
11121112 func put (gV,gW) = {
11131113 let gX = bx()
11141114 let gY = valueOrErrorMessage(addressFromString(gX[C]), "Wr st addr")
11151115 let gZ = valueOrErrorMessage(addressFromString(gX[E]), "Wr sl addr")
11161116 if ((0 > gV))
11171117 then throw("Wrong slippage")
11181118 else if ((size(cU.payments) != 2))
11191119 then throw("2 pmnts expd")
11201120 else {
11211121 let ha = toBigInt(value(cU.payments[0]).amount)
11221122 let hb = toBigInt(value(cU.payments[1]).amount)
11231123 let eT = (toBigInt(bS(bj(br))) - ha)
11241124 if ((eT == eT))
11251125 then {
11261126 let eU = (toBigInt(bS(bj(bs))) - hb)
11271127 if ((eU == eU))
11281128 then {
11291129 let eV = toBigInt(value(assetInfo(bq)).quantity)
11301130 if ((eV == eV))
11311131 then {
11321132 let eW = eP(ha, hb, toBigInt(0))
11331133 if ((eW == eW))
11341134 then {
11351135 let hc = fq(toString(cU.caller), toBase58String(cU.transactionId), AttachedPayment(value(cU.payments[0]).assetId, value(cU.payments[0]).amount), cU.payments[1], gV, true, false, true, 0, "")
11361136 let eq = hc._2
11371137 let hd = hc._7
11381138 let dG = hc._9
11391139 let er = hc._10
11401140 let es = hc._11
11411141 let do = hc._12
11421142 let dp = hc._13
11431143 let ec = invoke(aV, "emit", [eq], nil)
11441144 if ((ec == ec))
11451145 then {
11461146 let he = {
11471147 let gq = ec
11481148 if ($isInstanceOf(gq, "Address"))
11491149 then {
11501150 let hf = gq
11511151 invoke(hf, "emit", [eq], nil)
11521152 }
11531153 else unit
11541154 }
11551155 if ((he == he))
11561156 then {
11571157 let hg = if ((er > 0))
11581158 then invoke(gZ, "put", nil, [AttachedPayment(do, er)])
11591159 else nil
11601160 if ((hg == hg))
11611161 then {
11621162 let hh = if ((es > 0))
11631163 then invoke(gZ, "put", nil, [AttachedPayment(dp, es)])
11641164 else nil
11651165 if ((hh == hh))
11661166 then {
11671167 let hi = if (gW)
11681168 then {
11691169 let hj = invoke(gY, "stake", nil, [AttachedPayment(hd, eq)])
11701170 if ((hj == hj))
11711171 then nil
11721172 else throw("Strict value is not equal to itself.")
11731173 }
11741174 else [ScriptTransfer(cU.caller, eq, hd)]
11751175 let hk = eX(0, 0, 0)
11761176 let gn = hk._1
11771177 let eO = hk._2
11781178 let hl = if ((eO >= eW))
11791179 then true
11801180 else aS(makeString(["updated DLp lower than current DLp", toString(eT), toString(eU), toString(eV), toString(eW), toString(eO), toString(er), toString(es)], " "))
11811181 if ((hl == hl))
11821182 then {
11831183 let hm = value(assetInfo(bq)).quantity
11841184 if ((hm == hm))
11851185 then ((dG ++ hi) ++ gn)
11861186 else throw("Strict value is not equal to itself.")
11871187 }
11881188 else throw("Strict value is not equal to itself.")
11891189 }
11901190 else throw("Strict value is not equal to itself.")
11911191 }
11921192 else throw("Strict value is not equal to itself.")
11931193 }
11941194 else throw("Strict value is not equal to itself.")
11951195 }
11961196 else throw("Strict value is not equal to itself.")
11971197 }
11981198 else throw("Strict value is not equal to itself.")
11991199 }
12001200 else throw("Strict value is not equal to itself.")
12011201 }
12021202 else throw("Strict value is not equal to itself.")
12031203 }
12041204 else throw("Strict value is not equal to itself.")
12051205 }
12061206 }
12071207
12081208
12091209
12101210 @Callable(cU)
12111211 func putOneTknV2 (fR,gW) = {
12121212 let hn = {
12131213 let aX = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12141214 if ($isInstanceOf(aX, "Boolean"))
12151215 then aX
12161216 else throw(($getType(aX) + " couldn't be cast to Boolean"))
12171217 }
12181218 let ho = if (if (if (ba())
12191219 then true
12201220 else (bp == q))
12211221 then true
12221222 else (bp == s))
12231223 then true
12241224 else hn
12251225 let gN = [if (if (!(ho))
12261226 then true
12271227 else gt(cU))
12281228 then true
12291229 else aS("put operation is blocked by admin"), if ((size(cU.payments) == 1))
12301230 then true
12311231 else aS("exactly 1 payment are expected")]
12321232 if ((gN == gN))
12331233 then {
12341234 let do = toBase58String(value(br))
12351235 let dp = toBase58String(value(bs))
12361236 let dn = bq
12371237 let fV = bt
12381238 let fW = bu
12391239 let dm = if ((cU.caller == this))
12401240 then cU.originCaller
12411241 else cU.caller
12421242 let fp = value(cU.payments[0])
12431243 let dk = toBase58String(value(fp.assetId))
12441244 let dQ = fp.amount
12451245 let eW = if ((fp.assetId == br))
12461246 then eP(toBigInt(dQ), toBigInt(0), toBigInt(0))
12471247 else eP(toBigInt(0), toBigInt(dQ), toBigInt(0))
12481248 if ((eW == eW))
12491249 then {
12501250 let hp = fu(dQ, dk, toString(dm), toBase58String(cU.transactionId), true)
12511251 if ((hp == hp))
12521252 then {
12531253 let cC = hp._3
12541254 let dG = hp._2
12551255 let hq = hp._1
12561256 let eq = if (if ((fR > 0))
12571257 then (fR > hq)
12581258 else false)
12591259 then aS(makeString(["amount to receive is less than ", toString(fR)], ""))
12601260 else hq
12611261 let hc = invoke(aV, "emit", [eq], nil)
12621262 if ((hc == hc))
12631263 then {
12641264 let he = {
12651265 let gq = hc
12661266 if ($isInstanceOf(gq, "Address"))
12671267 then {
12681268 let hf = gq
12691269 invoke(hf, "emit", [eq], nil)
12701270 }
12711271 else unit
12721272 }
12731273 if ((he == he))
12741274 then {
12751275 let hi = if (gW)
12761276 then {
12771277 let hj = invoke(bz, "stakeFor", [toString(cU.caller)], [AttachedPayment(dn, eq)])
12781278 if ((hj == hj))
12791279 then nil
12801280 else throw("Strict value is not equal to itself.")
12811281 }
12821282 else [ScriptTransfer(cU.caller, eq, dn)]
12831283 let gh = if ((cC > 0))
12841284 then [ScriptTransfer(bc, cC, fromBase58String(dk))]
12851285 else nil
12861286 let hr = if ((this == bc))
12871287 then $Tuple2(0, 0)
12881288 else {
12891289 let hs = if ((fp.assetId == br))
12901290 then true
12911291 else false
12921292 if (hs)
12931293 then $Tuple2(-(cC), 0)
12941294 else $Tuple2(0, -(cC))
12951295 }
12961296 let eY = hr._1
12971297 let eZ = hr._2
12981298 let ht = eX(eY, eZ, 0)
12991299 let gn = ht._1
13001300 let eO = ht._2
13011301 let go = fb(eW, eO)
13021302 if ((go == go))
13031303 then $Tuple2((((dG ++ hi) ++ gh) ++ gn), eq)
13041304 else throw("Strict value is not equal to itself.")
13051305 }
13061306 else throw("Strict value is not equal to itself.")
13071307 }
13081308 else throw("Strict value is not equal to itself.")
13091309 }
13101310 else throw("Strict value is not equal to itself.")
13111311 }
13121312 else throw("Strict value is not equal to itself.")
13131313 }
13141314 else throw("Strict value is not equal to itself.")
13151315 }
13161316
13171317
13181318
13191319 @Callable(cU)
13201320 func putForFree (hu) = if ((0 > hu))
13211321 then throw("Wrong slpg")
13221322 else if ((size(cU.payments) != 2))
13231323 then throw("2 pmnts expd")
13241324 else {
13251325 let hv = fq(toString(cU.caller), toBase58String(cU.transactionId), AttachedPayment(value(cU.payments[0]).assetId, value(cU.payments[0]).amount), cU.payments[1], hu, false, false, true, 0, "")
13261326 let dG = hv._9
13271327 let ha = toBigInt(value(cU.payments[0]).amount)
13281328 let hb = toBigInt(value(cU.payments[1]).amount)
13291329 let eW = eP(ha, hb, toBigInt(0))
13301330 if ((eW == eW))
13311331 then {
13321332 let hw = eX(0, 0, 0)
13331333 let gn = hw._1
13341334 let eO = hw._2
13351335 let go = fb(eW, eO)
13361336 if ((go == go))
13371337 then (dG ++ gn)
13381338 else throw("Strict value is not equal to itself.")
13391339 }
13401340 else throw("Strict value is not equal to itself.")
13411341 }
13421342
13431343
13441344
13451345 @Callable(cU)
13461346 func get () = {
13471347 let eW = eP(toBigInt(0), toBigInt(0), toBigInt(0))
13481348 if ((eW == eW))
13491349 then {
13501350 let ec = fo(cU)
13511351 let hx = ec._1
13521352 let dF = ec._2
13531353 let dQ = ec._3
13541354 let dk = ec._4
13551355 let dG = ec._5
13561356 let eD = invoke(aV, "burn", [dQ], [AttachedPayment(dk, dQ)])
13571357 if ((eD == eD))
13581358 then {
13591359 let hy = eX(-(hx), -(dF), 0)
13601360 let gn = hy._1
13611361 let eO = hy._2
13621362 let go = fb(eW, eO)
13631363 if ((go == go))
13641364 then (dG ++ gn)
13651365 else throw("Strict value is not equal to itself.")
13661366 }
13671367 else throw("Strict value is not equal to itself.")
13681368 }
13691369 else throw("Strict value is not equal to itself.")
13701370 }
13711371
13721372
13731373
13741374 @Callable(cU)
13751375 func getOneTknV2 (fQ,fR) = {
13761376 let hn = {
13771377 let aX = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
13781378 if ($isInstanceOf(aX, "Boolean"))
13791379 then aX
13801380 else throw(($getType(aX) + " couldn't be cast to Boolean"))
13811381 }
13821382 let hz = if (if (ba())
13831383 then true
13841384 else (bp == s))
13851385 then true
13861386 else hn
13871387 let gN = [if (if (!(hz))
13881388 then true
13891389 else gt(cU))
13901390 then true
13911391 else aS("get operation is blocked by admin"), if ((size(cU.payments) == 1))
13921392 then true
13931393 else aS("exactly 1 payment are expected")]
13941394 if ((gN == gN))
13951395 then {
13961396 let hA = fP(fQ, fR, cU.payments, cU.caller, cU.originCaller, cU.transactionId)
13971397 let dG = hA._1
13981398 let ga = hA._2
13991399 $Tuple2(dG, ga)
14001400 }
14011401 else throw("Strict value is not equal to itself.")
14021402 }
14031403
14041404
14051405
14061406 @Callable(cU)
14071407 func refreshDLp () = {
14081408 let hB = valueOrElse(getInteger(at), 0)
14091409 let hC = if (((an - hB) >= aw))
14101410 then unit
14111411 else aS(makeString([toString(aw), " blocks have not passed since the previous call"], ""))
14121412 if ((hC == hC))
14131413 then {
14141414 let fi = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, as), "0")), aU("invalid dLp"))
14151415 let hD = eX(0, 0, 0)
14161416 let hE = hD._1
14171417 let eO = hD._2
14181418 let fa = if ((fi != eO))
14191419 then hE
14201420 else aS("nothing to refresh")
14211421 $Tuple2(fa, toString(eO))
14221422 }
14231423 else throw("Strict value is not equal to itself.")
14241424 }
14251425
14261426
14271427
14281428 @Callable(cU)
14291429 func getOneTknV2READONLY (fQ,hF) = {
14301430 let do = toBase58String(value(br))
14311431 let dp = toBase58String(value(bs))
14321432 let dn = toBase58String(value(bq))
14331433 let cE = [toBigInt(bS(do)), toBigInt(bS(dp))]
14341434 let eN = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(dn)), "invalid lp asset").quantity)
14351435 let cg = cD(cE)
14361436 let cf = (cg - fraction(toBigInt(hF), cg, eN))
14371437 let hG = if ((fQ == do))
14381438 then 0
14391439 else if ((fQ == dp))
14401440 then 1
14411441 else throw("invalid out asset id")
14421442 let hH = ex(cE, hG, cf)
14431443 let gG = (cE[hG] - hH)
14441444 let gH = max([0, toInt((gG - f))])
14451445 let hI = cA(gH, aY)
14461446 let fZ = hI._1
14471447 let cC = hI._2
14481448 $Tuple2(nil, $Tuple2(fZ, cC))
14491449 }
14501450
14511451
14521452
14531453 @Callable(cU)
14541454 func getOneTknV2WithBonusREADONLY (fQ,hF) = {
14551455 let do = toBase58String(value(br))
14561456 let dp = toBase58String(value(bs))
14571457 let dn = toBase58String(value(bq))
14581458 let du = bS(do)
14591459 let dw = bS(dp)
14601460 let hJ = {
14611461 let aX = invoke(this, "getOneTknV2READONLY", [fQ, hF], nil)
14621462 if ($isInstanceOf(aX, "(Int, Int)"))
14631463 then aX
14641464 else throw(($getType(aX) + " couldn't be cast to (Int, Int)"))
14651465 }
14661466 let fZ = hJ._1
14671467 let cC = hJ._2
14681468 let ec = di("", dn, hF, this)
14691469 let dE = ec._1
14701470 let dF = ec._2
14711471 let hK = (dE + dF)
14721472 let fO = if ((hK == 0))
14731473 then if ((fZ == 0))
14741474 then 0
14751475 else throw("bonus calculation error")
14761476 else fraction((fZ - hK), a, hK)
14771477 $Tuple2(nil, $Tuple3(fZ, cC, fO))
14781478 }
14791479
14801480
14811481
14821482 @Callable(cU)
14831483 func getNoLess (hL,hM) = {
14841484 let ec = fo(cU)
14851485 let dE = ec._1
14861486 let dF = ec._2
14871487 let dQ = ec._3
14881488 let dk = ec._4
14891489 let dG = ec._5
14901490 if ((hL > dE))
14911491 then throw(((("Failed: " + toString(dE)) + " < ") + toString(hL)))
14921492 else if ((hM > dF))
14931493 then throw(((("Failed: " + toString(dF)) + " < ") + toString(hM)))
14941494 else {
14951495 let eW = eP(toBigInt(0), toBigInt(0), toBigInt(0))
14961496 if ((eW == eW))
14971497 then {
14981498 let hN = invoke(aV, "burn", [dQ], [AttachedPayment(dk, dQ)])
14991499 if ((hN == hN))
15001500 then {
15011501 let hO = eX(-(dE), -(dF), 0)
15021502 let gn = hO._1
15031503 let eO = hO._2
15041504 let go = fb(eW, eO)
15051505 if ((go == go))
15061506 then (dG ++ gn)
15071507 else throw("Strict value is not equal to itself.")
15081508 }
15091509 else throw("Strict value is not equal to itself.")
15101510 }
15111511 else throw("Strict value is not equal to itself.")
15121512 }
15131513 }
15141514
15151515
15161516
15171517 @Callable(cU)
15181518 func unstakeAndGet (cB) = {
15191519 let hP = if ((size(cU.payments) != 0))
15201520 then throw("No pmnts expd")
15211521 else true
15221522 if ((hP == hP))
15231523 then {
15241524 let hQ = bx()
15251525 let hd = bq
15261526 let hR = valueOrErrorMessage(addressFromString(hQ[C]), "Wr st addr")
15271527 let eW = eP(toBigInt(0), toBigInt(0), toBigInt(0))
15281528 if ((eW == eW))
15291529 then {
15301530 let hS = invoke(hR, "unstake", [toBase58String(hd), cB], nil)
15311531 if ((hS == hS))
15321532 then {
15331533 let ec = di(toBase58String(cU.transactionId), toBase58String(hd), cB, cU.caller)
15341534 let dE = ec._1
15351535 let dF = ec._2
15361536 let ds = parseIntValue(ec._9)
15371537 let dG = ec._10
15381538 let hT = if (if (ba())
15391539 then true
15401540 else (ds == s))
15411541 then throw(("Blocked: " + toString(ds)))
15421542 else true
15431543 if ((hT == hT))
15441544 then {
15451545 let hU = invoke(aV, "burn", [cB], [AttachedPayment(hd, cB)])
15461546 if ((hU == hU))
15471547 then {
15481548 let hV = eX(-(dE), -(dF), 0)
15491549 let gn = hV._1
15501550 let eO = hV._2
15511551 let go = fb(eW, eO)
15521552 if ((go == go))
15531553 then (dG ++ gn)
15541554 else throw("Strict value is not equal to itself.")
15551555 }
15561556 else throw("Strict value is not equal to itself.")
15571557 }
15581558 else throw("Strict value is not equal to itself.")
15591559 }
15601560 else throw("Strict value is not equal to itself.")
15611561 }
15621562 else throw("Strict value is not equal to itself.")
15631563 }
15641564 else throw("Strict value is not equal to itself.")
15651565 }
15661566
15671567
15681568
15691569 @Callable(cU)
15701570 func unstakeAndGetNoLess (hW,hX,hM) = {
15711571 let hz = if (ba())
15721572 then true
15731573 else (bp == s)
15741574 let gN = [if (!(hz))
15751575 then true
15761576 else throw("get operation is blocked by admin"), if ((size(cU.payments) == 0))
15771577 then true
15781578 else throw("no payments are expected")]
15791579 if ((gN == gN))
15801580 then {
15811581 let eW = eP(toBigInt(0), toBigInt(0), toBigInt(0))
15821582 if ((eW == eW))
15831583 then {
15841584 let hS = invoke(bz, "unstake", [toBase58String(bq), hW], nil)
15851585 if ((hS == hS))
15861586 then {
15871587 let hY = di(toBase58String(cU.transactionId), toBase58String(bq), hW, cU.caller)
15881588 let dE = hY._1
15891589 let dF = hY._2
15901590 let dG = hY._10
15911591 let hZ = [if ((dE >= hX))
15921592 then true
15931593 else throw(makeString(["amount asset amount to receive is less than ", toString(hX)], "")), if ((dF >= hM))
15941594 then true
15951595 else throw(makeString(["price asset amount to receive is less than ", toString(hM)], ""))]
15961596 if ((hZ == hZ))
15971597 then {
15981598 let hN = invoke(aV, "burn", [hW], [AttachedPayment(bq, hW)])
15991599 if ((hN == hN))
16001600 then {
16011601 let ia = eX(-(dE), -(dF), 0)
16021602 let gn = ia._1
16031603 let eO = ia._2
16041604 let go = fb(eW, eO)
16051605 if ((go == go))
16061606 then (dG ++ gn)
16071607 else throw("Strict value is not equal to itself.")
16081608 }
16091609 else throw("Strict value is not equal to itself.")
16101610 }
16111611 else throw("Strict value is not equal to itself.")
16121612 }
16131613 else throw("Strict value is not equal to itself.")
16141614 }
16151615 else throw("Strict value is not equal to itself.")
16161616 }
16171617 else throw("Strict value is not equal to itself.")
16181618 }
16191619
16201620
16211621
16221622 @Callable(cU)
16231623 func unstakeAndGetOneTknV2 (hW,fQ,fR) = {
16241624 let hn = {
16251625 let aX = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
16261626 if ($isInstanceOf(aX, "Boolean"))
16271627 then aX
16281628 else throw(($getType(aX) + " couldn't be cast to Boolean"))
16291629 }
16301630 let hz = if (if (ba())
16311631 then true
16321632 else (bp == s))
16331633 then true
16341634 else hn
16351635 let gN = [if (if (!(hz))
16361636 then true
16371637 else gt(cU))
16381638 then true
16391639 else aS("get operation is blocked by admin"), if ((size(cU.payments) == 0))
16401640 then true
16411641 else aS("no payments are expected")]
16421642 if ((gN == gN))
16431643 then {
16441644 let hQ = bx()
16451645 let hd = bq
16461646 let hR = valueOrErrorMessage(addressFromString(hQ[C]), "Wr st addr")
16471647 let dm = cU.caller
16481648 let ib = this
16491649 let hS = invoke(hR, "unstakeINTERNAL", [hd, hW, dm.bytes, ib.bytes], nil)
16501650 if ((hS == hS))
16511651 then {
16521652 let ic = fP(fQ, fR, [AttachedPayment(hd, hW)], cU.caller, cU.originCaller, cU.transactionId)
16531653 let dG = ic._1
16541654 let ga = ic._2
16551655 $Tuple2(dG, ga)
16561656 }
16571657 else throw("Strict value is not equal to itself.")
16581658 }
16591659 else throw("Strict value is not equal to itself.")
16601660 }
16611661
16621662
16631663
16641664 @Callable(cU)
16651665 func putOneTknV2WithBonusREADONLY (id,ie) = {
16661666 let if = fu(id, ie, "", "", true)
16671667 let fJ = if._1
16681668 let dG = if._2
16691669 let cC = if._3
16701670 let fO = if._4
16711671 $Tuple2(nil, $Tuple3(fJ, cC, fO))
16721672 }
16731673
16741674
16751675
16761676 @Callable(cU)
16771677 func putOneTknV2WithoutTakeFeeREADONLY (id,ie) = {
16781678 let ig = fu(id, ie, "", "", false)
16791679 let fJ = ig._1
16801680 let dG = ig._2
16811681 let cC = ig._3
16821682 let fO = ig._4
16831683 $Tuple2(nil, $Tuple3(fJ, cC, fO))
16841684 }
16851685
16861686
16871687
16881688 @Callable(cU)
16891689 func activate (ih,ii) = if ((toString(cU.caller) != toString(aV)))
16901690 then throw("denied")
16911691 else $Tuple2([StringEntry(aj(), ih), StringEntry(ak(), ii)], "success")
16921692
16931693
16941694
16951695 @Callable(cU)
16961696 func setS (ij,hT) = if ((toString(cU.caller) != aO(this, ao())))
16971697 then gs
16981698 else [StringEntry(ij, hT)]
16991699
17001700
17011701
17021702 @Callable(cU)
17031703 func setI (ij,hT) = if ((toString(cU.caller) != aO(this, ao())))
17041704 then gs
17051705 else [IntegerEntry(ij, hT)]
17061706
17071707
17081708
17091709 @Callable(cU)
17101710 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bd())
17111711
17121712
17131713
17141714 @Callable(cU)
17151715 func getAccBalanceWrapperREADONLY (bT) = $Tuple2(nil, bS(bT))
17161716
17171717
17181718
17191719 @Callable(cU)
17201720 func calcPricesWrapperREADONLY (cm,cn,cr) = {
17211721 let ik = cq(cm, cn, cr)
17221722 $Tuple2(nil, [toString(ik[0]), toString(ik[1]), toString(ik[2])])
17231723 }
17241724
17251725
17261726
17271727 @Callable(cU)
17281728 func fromX18WrapperREADONLY (M,il) = $Tuple2(nil, L(parseBigIntValue(M), il))
17291729
17301730
17311731
17321732 @Callable(cU)
17331733 func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
17341734
17351735
17361736
17371737 @Callable(cU)
17381738 func calcPriceBigIntWrapperREADONLY (bV,bW) = $Tuple2(nil, toString(bU(parseBigIntValue(bV), parseBigIntValue(bW))))
17391739
17401740
17411741
17421742 @Callable(cU)
17431743 func estimatePutOperationWrapperREADONLY (dj,cb,dI,dJ,dK,dL,im,dM,dN) = $Tuple2(nil, dH(dj, cb, dI, dJ, dK, dL, im, dM, dN, true, false, 0, ""))
17441744
17451745
17461746
17471747 @Callable(cU)
17481748 func estimateGetOperationWrapperREADONLY (dj,in,dl,im) = {
17491749 let ec = di(dj, in, dl, addressFromStringValue(im))
17501750 $Tuple2(nil, $Tuple10(ec._1, ec._2, ec._3, ec._4, ec._5, ec._6, ec._7, toString(ec._8), ec._9, ec._10))
17511751 }
17521752
17531753
17541754
17551755 @Callable(cU)
17561756 func changeAmp () = {
17571757 let io = invoke(aV, "getChangeAmpConfigREADONLY", [toString(this)], nil)
17581758 let ip = {
17591759 let gq = io
1760- if ($isInstanceOf(gq, "List[Any]"))
1760+ if ($isInstanceOf(gq, "String"))
17611761 then {
17621762 let iq = gq
1763- $Tuple3({
1764- let aX = iq[0]
1765- if ($isInstanceOf(aX, "Int"))
1766- then aX
1767- else throw(($getType(aX) + " couldn't be cast to Int"))
1768- }, {
1769- let aX = iq[1]
1770- if ($isInstanceOf(aX, "Int"))
1771- then aX
1772- else throw(($getType(aX) + " couldn't be cast to Int"))
1773- }, {
1774- let aX = iq[2]
1775- if ($isInstanceOf(aX, "Int"))
1776- then aX
1777- else throw(($getType(aX) + " couldn't be cast to Int"))
1778- })
1763+ let ir = split(iq, n)
1764+ $Tuple3(parseIntValue(ir[0]), parseIntValue(ir[1]), parseIntValue(ir[2]))
17791765 }
17801766 else throw("invalid entry type")
17811767 }
1782- let ir = ip._1
1783- let is = ip._2
1784- let it = ip._3
1785- let iu = parseIntValue(getStringValue(al()))
1786- let iv = valueOrElse(getInteger(ap()), 0)
1787- let iw = (iu + is)
1788- let ix = if ((0 > is))
1789- then if ((it > iw))
1790- then it
1791- else iw
1792- else if ((iw > it))
1793- then it
1794- else iw
1795- let gN = [if ((an > (iv + ir)))
1768+ let is = ip._1
1769+ let it = ip._2
1770+ let iu = ip._3
1771+ let iv = parseIntValue(getStringValue(al()))
1772+ let iw = valueOrElse(getInteger(ap()), 0)
1773+ let ix = (iv + it)
1774+ let iy = if ((0 > it))
1775+ then if ((iu > ix))
1776+ then iu
1777+ else ix
1778+ else if ((ix > iu))
1779+ then iu
1780+ else ix
1781+ let gN = [if ((an > (iw + is)))
17961782 then true
1797- else aS("try again in few blocks"), if ((iu != ix))
1783+ else aS("try again in few blocks"), if ((iv != iy))
17981784 then true
17991785 else aS("already reached target")]
18001786 if ((gN == gN))
1801- then [IntegerEntry(ap(), an), StringEntry(al(), toString(ix)), StringEntry(am(an), toString(ix))]
1787+ then [IntegerEntry(ap(), an), StringEntry(al(), toString(iy)), StringEntry(am(an), toString(iy))]
18021788 else throw("Strict value is not equal to itself.")
18031789 }
18041790
18051791
1806-@Verifier(iy)
1807-func iz () = {
1808- let iA = {
1792+@Verifier(iz)
1793+func iA () = {
1794+ let iB = {
18091795 let gq = gp()
18101796 if ($isInstanceOf(gq, "ByteVector"))
18111797 then {
18121798 let gu = gq
18131799 gu
18141800 }
18151801 else if ($isInstanceOf(gq, "Unit"))
1816- then iy.senderPublicKey
1802+ then iz.senderPublicKey
18171803 else throw("Match error")
18181804 }
1819- let gq = iy
1805+ let gq = iz
18201806 if ($isInstanceOf(gq, "Order"))
18211807 then {
18221808 let fe = gq
1823- let iB = bb()
1824- let iC = if (gB())
1809+ let iC = bb()
1810+ let iD = if (gB())
18251811 then $Tuple2(true, "")
18261812 else fd(fe)
1827- let aK = iC._1
1828- let aL = iC._2
1813+ let aK = iD._1
1814+ let aL = iD._2
18291815 let aM = sigVerify(fe.bodyBytes, fe.proofs[0], fe.senderPublicKey)
1830- let aN = sigVerify(fe.bodyBytes, fe.proofs[1], iB)
1816+ let aN = sigVerify(fe.bodyBytes, fe.proofs[1], iC)
18311817 if (if (if (aK)
18321818 then aM
18331819 else false)
18341820 then aN
18351821 else false)
18361822 then true
18371823 else aJ(aK, aL, aM, aN)
18381824 }
18391825 else if ($isInstanceOf(gq, "SetScriptTransaction"))
18401826 then {
18411827 let cH = gq
1842- if (sigVerify(iy.bodyBytes, iy.proofs[0], iA))
1828+ if (sigVerify(iz.bodyBytes, iz.proofs[0], iB))
18431829 then true
18441830 else {
1845- let iD = blake2b256(value(cH.script))
1846- let iE = fromBase64String(value(getString(aV, aF())))
1847- let iF = scriptHash(this)
1848- if ((iE == iD))
1849- then (iF != iD)
1831+ let iE = blake2b256(value(cH.script))
1832+ let iF = fromBase64String(value(getString(aV, aF())))
1833+ let iG = scriptHash(this)
1834+ if ((iF == iE))
1835+ then (iG != iE)
18501836 else false
18511837 }
18521838 }
1853- else sigVerify(iy.bodyBytes, iy.proofs[0], iA)
1839+ else sigVerify(iz.bodyBytes, iz.proofs[0], iB)
18541840 }
18551841

github/deemru/w8io/873ac7e 
304.03 ms