tx · 8BWWDctgxN1GepmYGpEWd9H6k7KBrvp5WtsSusYqdAAD

3Mp66Sufwhc33Wg9L4fWvD2GR729YxSQPCh:  -0.07500000 Waves

2023.02.15 19:39 [2450981] smart account 3Mp66Sufwhc33Wg9L4fWvD2GR729YxSQPCh > SELF 0.00000000 Waves

{ "type": 13, "id": "8BWWDctgxN1GepmYGpEWd9H6k7KBrvp5WtsSusYqdAAD", "fee": 7500000, "feeAssetId": null, "timestamp": 1676479187370, "version": 2, "chainId": 84, "sender": "3Mp66Sufwhc33Wg9L4fWvD2GR729YxSQPCh", "senderPublicKey": "42U12q4TTBTVkhjqmAhNWDrxkFhHrg9yFuNjqqg5mF8G", "proofs": [ "51vW6GpDbW4qBDB1PruDQb3EFF4U1iVGeX3RNrEC6TJGsUr89qbgkakoJ9ZyarkuKBv3VXfXSk9fpeyjisXru22w" ], "script": "base64:BgJ0CAISABIAEgASABIDCgEBEgMKAQESEAoOAQEBAQEBAQEBAQEBAQESFQoTAQEBAQEBAQgICAEBAQEBAQEBARIGCgQBAQEIEgASAwoBARIFCgMBAQQSAwoBCBIAEgASABIDCgEIEgMKAQESABIAEgASBAoCCAjAAQAMa19iYXNlT3JhY2xlAgxrX2Jhc2VPcmFjbGUADWtfcXVvdGVPcmFjbGUCDWtfcXVvdGVPcmFjbGUACWtfYmFsYW5jZQIJa19iYWxhbmNlAAprX3NlcXVlbmNlAgprX3NlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UAD2tfcG9zaXRpb25Bc3NldAIPa19wb3NpdGlvbkFzc2V0AA1rX3Bvc2l0aW9uRmVlAg1rX3Bvc2l0aW9uRmVlAB5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXACE2tfcG9zaXRpb25UaW1lc3RhbXAADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUADWtfcm9sbG92ZXJGZWUCDmtfcm9sbG92ZXJfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19mdW5kaW5nTW9kZQINa19mdW5kaW5nTW9kZQANa19sYXN0RGF0YVN0cgINa19sYXN0RGF0YVN0cgAOa19sYXN0TWludXRlSWQCDmtfbGFzdE1pbnV0ZUlkAB1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UAE2tfdHdhcERhdGFMYXN0UHJpY2UCE2tfdHdhcERhdGFMYXN0UHJpY2UAGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAhprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nAAhrX2xhc3RUeAIIa19sYXN0VHgAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AA9rX3F1b3RlX3N0YWtpbmcCD2tfcXVvdGVfc3Rha2luZwARa19zdGFraW5nX2FkZHJlc3MCEWtfc3Rha2luZ19hZGRyZXNzAA9rX21pbmVyX2FkZHJlc3MCD2tfbWluZXJfYWRkcmVzcwAQa19vcmRlcnNfYWRkcmVzcwIQa19vcmRlcnNfYWRkcmVzcwASa19yZWZlcnJhbF9hZGRyZXNzAhJrX3JlZmVycmFsX2FkZHJlc3MAEmtfZXhjaGFuZ2VfYWRkcmVzcwISa19leGNoYW5nZV9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0AA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgANVFdBUF9JTlRFUlZBTAAPAAdTRUNPTkRTAOgHAA9ERUNJTUFMX05VTUJFUlMABgAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoAD01JTlVURVNfSU5fWUVBUgkAaAIAoIogBQxERUNJTUFMX1VOSVQAB09ORV9EQVkJAGgCAICjBQUMREVDSU1BTF9VTklUAA9QTkxfT1BUSU9OX1NQT1QAAQARUE5MX09QVElPTl9PUkFDTEUAAgASRlVORElOR19BU1lNTUVUUklDAAEAEUZVTkRJTkdfU1lNTUVUUklDAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0AwkAAAIJAJADAQUFX2xpc3QAAAIACQC5CQIFBV9saXN0AgEsAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9yb2xsb3ZlckZlZVJhdGUACQEDaW50AQUNa19yb2xsb3ZlckZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBC2Z1bmRpbmdNb2RlAAkBBWludE9yAgUNa19mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDAQ1sYXN0VGltZXN0YW1wAAgFCWxhc3RCbG9jawl0aW1lc3RhbXABD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDIDwgCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8DAwkBASEBBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZwIFFHJlbWFpbmluZ01hcmdpblJhdGlvAAAHCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA+IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvBgEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAixTaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIF9wb3NpdGlvblNpemUgPT0gMAMJAGYCBQ1fcG9zaXRpb25TaXplAAAJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAQtnZXRQb3NpdGlvbgEHX3RyYWRlcgQPcG9zaXRpb25TaXplT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyBAckbWF0Y2gwBQ9wb3NpdGlvblNpemVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAxwb3NpdGlvblNpemUFByRtYXRjaDAJAJcKBQUMcG9zaXRpb25TaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFB190cmFkZXIJAJcKBQAAAAAAAAAAAAABEGdldFBvc2l0aW9uQXNzZXQBB190cmFkZXIEEHBvc2l0aW9uQXNzZXRPcHQJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAckbWF0Y2gwBRBwb3NpdGlvbkFzc2V0T3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQNcG9zaXRpb25Bc3NldAUHJG1hdGNoMAUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAABDmdldFBvc2l0aW9uRmVlAQdfdHJhZGVyBA5wb3NpdGlvbkZlZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyBAckbWF0Y2gwBQ5wb3NpdGlvbkZlZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEC3Bvc2l0aW9uRmVlBQckbWF0Y2gwBQtwb3NpdGlvbkZlZQkBA2ZlZQABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQ1nZXRPcmFjbGVEYXRhAQNrZXkEDW9yYWNsZURhdGFTdHIJAJ0IAgUEdGhpcwUDa2V5AwMJAQlpc0RlZmluZWQBBQ1vcmFjbGVEYXRhU3RyCQECIT0CCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyAgAHBApvcmFjbGVEYXRhCQC1CQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICASwEDW9yYWNsZUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCm9yYWNsZURhdGEAAAkArAICAhtJbnZhbGlkIG9yYWNsZSBhZGRyZXNzIGluOiAJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHIECHByaWNlS2V5CQCRAwIFCm9yYWNsZURhdGEAAQQIYmxvY2tLZXkJAJEDAgUKb3JhY2xlRGF0YQACBAdvcGVuS2V5CQCRAwIFCm9yYWNsZURhdGEAAwkAlgoEBQ1vcmFjbGVBZGRyZXNzBQhwcmljZUtleQUIYmxvY2tLZXkFB29wZW5LZXkFBHVuaXQBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEGcGF1c2VkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQhrX3BhdXNlZAcBCWNsb3NlT25seQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwULa19jbG9zZU9ubHkHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDCQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAENY2FsY0ludmFyaWFudAIHX3F0QXN0UgdfYnNBc3RSBAdicXRBc3RSCQC2AgEFB19xdEFzdFIEB2Jic0FzdFIJALYCAQUHX2JzQXN0UgkBBWJtdWxkAgUHYnF0QXN0UgUHYmJzQXN0UgEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFB19xdEFzdFcEAWsJAQ1jYWxjSW52YXJpYW50AgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkAZQIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQCgAwEJAQViZGl2ZAIFAWsJALYCAQUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgQYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNjk0MzE3MTEzCQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY5NDMxNzExMwJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE2OTQzMTcxMTMCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTY5NDMxNzExMwJfMwQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlgoEBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQEPY2FsY1JvbGxvdmVyRmVlAhJfb2xkUG9zaXRpb25NYXJnaW4gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAED3Bvc2l0aW9uTWludXRlcwkAaAIJAGkCCQBpAgkAZQIJAQ1sYXN0VGltZXN0YW1wAAUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAA6AcAPAUMREVDSU1BTF9VTklUBAtyb2xsb3ZlckZlZQkBBGRpdmQCCQEEbXVsZAIJAQRtdWxkAgUSX29sZFBvc2l0aW9uTWFyZ2luBQ9wb3NpdGlvbk1pbnV0ZXMJAQ9yb2xsb3ZlckZlZVJhdGUABQ9NSU5VVEVTX0lOX1lFQVIFC3JvbGxvdmVyRmVlATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAMX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRJfb2xkUG9zaXRpb25NYXJnaW4FIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBAxzaWduZWRNYXJnaW4JAGQCCQBlAgkAZQIFDF9tYXJnaW5EZWx0YQULcm9sbG92ZXJGZWUFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE5MzY4MTk0OTUDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTkzNjgxOTQ5NQJfMQQHYmFkRGVidAgFDSR0MDE5MzY4MTk0OTUCXzIJAJYKBAUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAULcm9sbG92ZXJGZWUBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0El9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBDWNhbGNJbnZhcmlhbnQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIED3F1b3RlQXNzZXREZWx0YQkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQOcXVvdGVBc3NldFNvbGQJAQRtdWxkAgUPcXVvdGVBc3NldERlbHRhBRFfcXVvdGVBc3NldFdlaWdodAQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMjA3NTcyMDkxOQkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUPcXVvdGVBc3NldERlbHRhBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwNzU3MjA5MTkCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAyMDc1NzIwOTE5Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDIwNzU3MjA5MTkCXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAARNnZXRPcmFjbGVQcmljZVZhbHVlAwZvcmFjbGUIcHJpY2VLZXkIYmxvY2tLZXkECWxhc3RWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIcHJpY2VLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBwcmljZS4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCHByaWNlS2V5AwkBAiE9AgUIYmxvY2tLZXkCAAQMY3VycmVudEJsb2NrCAUJbGFzdEJsb2NrBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmdldE9yYWNsZVByaWNlAAQKYmFzZU9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENZ2V0T3JhY2xlRGF0YQEFDGtfYmFzZU9yYWNsZQIZTm8gYmFzZSBhc3NldCBvcmFjbGUgZGF0YQQPYmFzZU9yYWNsZVByaWNlCQETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMIBQpiYXNlT3JhY2xlAl8xCAUKYmFzZU9yYWNsZQJfMggFCmJhc2VPcmFjbGUCXzMEC3F1b3RlT3JhY2xlCQENZ2V0T3JhY2xlRGF0YQEFDWtfcXVvdGVPcmFjbGUEEHF1b3RlT3JhY2xlUHJpY2UDCQEJaXNEZWZpbmVkAQULcXVvdGVPcmFjbGUEDHF1b3RlT3JhY2xlVgkBBXZhbHVlAQULcXVvdGVPcmFjbGUJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFDHF1b3RlT3JhY2xlVgJfMQgFDHF1b3RlT3JhY2xlVgJfMggFDHF1b3RlT3JhY2xlVgJfMwUMREVDSU1BTF9VTklUCQEEZGl2ZAIFD2Jhc2VPcmFjbGVQcmljZQUQcXVvdGVPcmFjbGVQcmljZQEOaXNNYXJrZXRDbG9zZWQABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBAZvcmFjbGUIBQpiYXNlT3JhY2xlAl8xBAdvcGVuS2V5CAUKYmFzZU9yYWNsZQJfNAMJAQIhPQIFB29wZW5LZXkCAAQGaXNPcGVuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJsIAgUGb3JhY2xlBQdvcGVuS2V5CQCsAgIJAKwCAgkArAICAitDYW4gbm90IGdldCBvcmFjbGUgaXMgb3Blbi9jbG9zZWQuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQdvcGVuS2V5CQEBIQEFBmlzT3BlbgcBDGFic1ByaWNlRGlmZgUMX29yYWNsZVByaWNlEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQdfcXRBc3RXB19ic0FzdFcECnByaWNlQWZ0ZXIJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFDF9vcmFjbGVQcmljZQUKcHJpY2VBZnRlcgUMYXZlcmFnZVByaWNlBQxhYnNQcmljZURpZmYBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQSYWJzUHJpY2VEaWZmQmVmb3JlCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UJAQZxdEFzdFIACQEGYnNBc3RSAAUHX3F0QXN0VwUHX2JzQXN0VwQRYWJzUHJpY2VEaWZmQWZ0ZXIJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwUHX2JzQXN0VwMDCQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIJAQ5tYXhQcmljZVNwcmVhZAAJAGYCBRFhYnNQcmljZURpZmZBZnRlcgUSYWJzUHJpY2VEaWZmQmVmb3JlBwkAAgEJAKwCAgkArAICCQCsAgICDVByaWNlIHNwcmVhZCAJAKQDAQURYWJzUHJpY2VEaWZmQWZ0ZXICFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIRX2xvbmdPcGVuTm90aW9uYWwSX3Nob3J0T3Blbk5vdGlvbmFsBBBfbWF4T3Blbk5vdGlvbmFsCQEPbWF4T3Blbk5vdGlvbmFsAAMJAGYCBRFfbG9uZ09wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICE0xvbmcgb3BlbiBub3Rpb25hbCAJAKQDAQURX2xvbmdPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsAwkAZgIFEl9zaG9ydE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICFFNob3J0IG9wZW4gbm90aW9uYWwgCQCkAwEFEl9zaG9ydE9wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBg1fcG9zaXRpb25TaXplB19vcHRpb24SX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQED3Bvc2l0aW9uU2l6ZUFicwkBA2FicwEFDV9wb3NpdGlvblNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwDCQAAAgUHX29wdGlvbgUPUE5MX09QVElPTl9TUE9UBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHCQEBIQEFB2lzU2hvcnQFD3Bvc2l0aW9uU2l6ZUFicwcFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0Al8xBRNvdXRQb3NpdGlvbk5vdGlvbmFsCQEEbXVsZAIFD3Bvc2l0aW9uU2l6ZUFicwkBDmdldE9yYWNsZVByaWNlAAUQcG9zaXRpb25Ob3Rpb25hbAErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcNX3Bvc2l0aW9uU2l6ZRVfcG9zaXRpb25PcGVuTm90aW9uYWwSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQHX29wdGlvbgMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBgUNX3Bvc2l0aW9uU2l6ZQUHX29wdGlvbgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQEDXVucmVhbGl6ZWRQbmwDBQdpc1Nob3J0CQBlAgUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBRBwb3NpdGlvbk5vdGlvbmFsCQBlAgUQcG9zaXRpb25Ob3Rpb25hbAUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsCQCUCgIFEHBvc2l0aW9uTm90aW9uYWwFDXVucmVhbGl6ZWRQbmwBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgdfdHJhZGVyB19vcHRpb24EDSR0MDI4Nzk3Mjg5MjUJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI4Nzk3Mjg5MjUCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg3OTcyODkyNQJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyODc5NzI4OTI1Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI4Nzk3Mjg5MjUCXzQJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUMcG9zaXRpb25TaXplBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwAFB19vcHRpb24BD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgdfdHJhZGVyB19vcHRpb24EDSR0MDI5NDQwMjk1ODEJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI5NDQwMjk1ODECXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjk0NDAyOTU4MQJfMgQDcG9uCAUNJHQwMjk0NDAyOTU4MQJfMwQWcG9zaXRpb25MYXN0VXBkYXRlZENQRggFDSR0MDI5NDQwMjk1ODECXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMjk0NDAyOTU4MQJfNQQNJHQwMjk1ODcyOTY4MAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI5NTg3Mjk2ODACXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyOTU4NzI5NjgwAl8yBA0kdDAyOTY4NTI5ODk3CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgUWcG9zaXRpb25MYXN0VXBkYXRlZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI5Njg1Mjk4OTcCXzEEB2JhZERlYnQIBQ0kdDAyOTY4NTI5ODk3Al8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwEHX3RyYWRlcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIHX3RyYWRlcg1fcG9zaXRpb25TaXplBAxtYXhpbXVtUmF0aW8JAQR2bWF4AgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzcDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uBwdfdHJhZGVyBV9zaXplBF9mZWUUX21pblF1b3RlQXNzZXRBbW91bnQMX2FkZFRvTWFyZ2luFF9jaGVja01heFByaWNlSW1wYWN0Cl9saXF1aWRhdGUEDSR0MDMwOTY0MzExMjAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDMwOTY0MzExMjACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzA5NjQzMTEyMAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMDk2NDMxMTIwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDMwOTY0MzExMjACXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMzA5NjQzMTEyMAJfNQQOaXNMb25nUG9zaXRpb24JAGYCBQ9vbGRQb3NpdGlvblNpemUAAAQSYWJzT2xkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplAwMJAGcCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplCQBmAgUFX3NpemUAAAcEDmlzUGFydGlhbENsb3NlCQBmAgUSYWJzT2xkUG9zaXRpb25TaXplBQVfc2l6ZQQNJHQwMzE0MTIzMTg2MwkBCnN3YXBPdXRwdXQDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFBV9zaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDMxNDEyMzE4NjMCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMTQxMjMxODYzAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMTQxMjMxODYzAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzE0MTIzMTg2MwJfNAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQEBLQEFBV9zaXplBQVfc2l6ZQQNJHQwMzIwNzgzMjI4NQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMzIwNzgzMjI4NQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDMyMDc4MzIyODUCXzIEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQUSYWJzT2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBQ1yZWFsaXplZFJhdGlvBA0kdDAzMjYyNjMyODcyCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBBJyZW1haW5NYXJnaW5CZWZvcmUIBQ0kdDAzMjYyNjMyODcyAl8xBAJ4MQgFDSR0MDMyNjI2MzI4NzICXzIEAngyCAUNJHQwMzI2MjYzMjg3MgJfMwQLcm9sbG92ZXJGZWUIBQ0kdDAzMjYyNjMyODcyAl80BA9wb3NpdGlvbkJhZERlYnQICQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQtyZWFsaXplZFBubAJfMgQQcmVhbGl6ZWRDbG9zZUZlZQkBBG11bGQCCQEEbXVsZAIFE29sZFBvc2l0aW9uTm90aW9uYWwFDXJlYWxpemVkUmF0aW8FBF9mZWUEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEDSR0MDM0Mjc4MzQ2NjQDCQAAAgUPbmV3UG9zaXRpb25TaXplAAAJAJQKAgAAAAAJAJQKAgkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzQyNzgzNDY2NAJfMQQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAzNDI3ODM0NjY0Al8yBBFvcGVuTm90aW9uYWxEZWx0YQkAZQIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAQLbWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBB5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQEEbXVsZAIJAGQCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkBBG11bGQCCQBlAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFEnVucmVhbGl6ZWRQbmxBZnRlcgULbWFyZ2luUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgQRbWFyZ2luVG9UcmFkZXJSYXcJAGUCCQBlAgUScmVtYWluTWFyZ2luQmVmb3JlCQBkAgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFEHJlYWxpemVkQ2xvc2VGZWUEDm1hcmdpblRvVHJhZGVyAwkAZgIAAAURbWFyZ2luVG9UcmFkZXJSYXcDBQpfbGlxdWlkYXRlAAAJAAIBAjdJbnZhbGlkIGludGVybmFsQ2xvc2VQb3NpdGlvbiBwYXJhbXM6IHVuYWJsZSB0byBwYXkgZmVlBRFtYXJnaW5Ub1RyYWRlclJhdwQRbmV3UG9zaXRpb25NYXJnaW4DBQxfYWRkVG9NYXJnaW4JAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FDm1hcmdpblRvVHJhZGVyBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8DAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQCjChEFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAMDBQxfYWRkVG9NYXJnaW4FDmlzUGFydGlhbENsb3NlBwAABQ5tYXJnaW5Ub1RyYWRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAURb3Blbk5vdGlvbmFsRGVsdGEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFDmlzTG9uZ1Bvc2l0aW9uCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFDmlzTG9uZ1Bvc2l0aW9uCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADBQ5pc0xvbmdQb3NpdGlvbgURb3Blbk5vdGlvbmFsRGVsdGEAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQEBIQEFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBkAgUQcmVhbGl6ZWRDbG9zZUZlZQULcm9sbG92ZXJGZWUFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAj1JbnZhbGlkIGludGVybmFsQ2xvc2VQb3NpdGlvbiBwYXJhbXM6IGludmFsaWQgcG9zaXRpb24gc2l6ZTogCQCkAwEFBV9zaXplAgYgbWF4OiAJAKQDAQUSYWJzT2xkUG9zaXRpb25TaXplARBnZXRUd2FwU3BvdFByaWNlAAQIbWludXRlSWQJAGkCCQBpAgkBDWxhc3RUaW1lc3RhbXAAAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQRuZXh0CQCsAgICH2dldFR3YXBTcG90UHJpY2U6IGludmFsaWQgaW50OiAFB2xpc3RTdHIJAM0IAgULYWNjdW11bGF0b3IJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAULYWNjdW11bGF0b3IEBWxpc3RGCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbHRlckZuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQECG1heEluZGV4AwkAZgIJAJADAQUFbGlzdEYAAAkAlgMBBQVsaXN0RgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUEbGlzdAAACQCsAgICH2dldFR3YXBTcG90UHJpY2U6IGludmFsaWQgaW50OiAFB2xpc3RTdHIEDGxhc3RNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAABBZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQMZW5kTGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABBJub3dDdW11bGF0aXZlUHJpY2UJAGQCBRZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFDGVuZExhc3RQcmljZQQYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABA5zdGFydExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABBRzdGFydEN1bXVsYXRpdmVQcmljZQkAZAIFGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQ1zdGFydE1pbnV0ZUlkBQhtYXhJbmRleAUOc3RhcnRMYXN0UHJpY2UJAGkCCQBlAgUSbm93Q3VtdWxhdGl2ZVByaWNlBRRzdGFydEN1bXVsYXRpdmVQcmljZQUNVFdBUF9JTlRFUlZBTAETZ2V0VGVybWluYWxBbW1TdGF0ZQAEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQCUCgIJAQZxdEFzdFIACQEGYnNBc3RSAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABA0kdDAzOTQwMTM5NTgwCQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHBBVjdXJyZW50TmV0TWFya2V0VmFsdWUIBQ0kdDAzOTQwMTM5NTgwAl8xBBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwMzk0MDEzOTU4MAJfMgQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwMzk0MDEzOTU4MAJfMwkAlAoCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUBE2dldFF1b3RlQXNzZXRXZWlnaHQEEGJhc2VBc3NldFJlc2VydmURdG90YWxQb3NpdGlvblNpemURcXVvdGVBc3NldFJlc2VydmULdGFyZ2V0UHJpY2UEAWIJALYCAQUQYmFzZUFzc2V0UmVzZXJ2ZQQCc3oJALYCAQURdG90YWxQb3NpdGlvblNpemUEAXEJALYCAQURcXVvdGVBc3NldFJlc2VydmUEAXAJALYCAQULdGFyZ2V0UHJpY2UEAWsJAQVibXVsZAIFAXEFAWIEBG5ld0IJALcCAgUBYgUCc3oEBG5ld1EJAQViZGl2ZAIFAWsFBG5ld0IEAXoJAQViZGl2ZAIFBG5ld1EFBG5ld0IEBnJlc3VsdAkBBWJkaXZkAgUBcAUBegkAoAMBBQZyZXN1bHQBFGdldFN5bmNUZXJtaW5hbFByaWNlAw5fdGVybWluYWxQcmljZQdfcXRBc3RSB19ic0FzdFIEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAABAluZXdRdEFzdFcJAQRkaXZkAgkBBG11bGQCBQ5fdGVybWluYWxQcmljZQUHX2JzQXN0UgUHX3F0QXN0UgkAlQoDBQluZXdRdEFzdFcFDERFQ0lNQUxfVU5JVAAABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcCXzEECW5ld1F0QXN0VwkBE2dldFF1b3RlQXNzZXRXZWlnaHQEBQdfYnNBc3RSBQ1fcG9zaXRpb25TaXplBQdfcXRBc3RSBQ5fdGVybWluYWxQcmljZQQJbmV3QnNBc3RXBQxERUNJTUFMX1VOSVQEDW1hcmdpblRvVmF1bHQICQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDV9wb3NpdGlvblNpemUFFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQUHX3F0QXN0UgUJbmV3UXRBc3RXBQdfYnNBc3RSBQluZXdCc0FzdFcFD1BOTF9PUFRJT05fU1BPVAJfMgkAlQoDBQluZXdRdEFzdFcFCW5ld0JzQXN0VwUNbWFyZ2luVG9WYXVsdAEKZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNc3BvdFR3YXBQcmljZQkBEGdldFR3YXBTcG90UHJpY2UABAdwcmVtaXVtCQBlAgUNc3BvdFR3YXBQcmljZQUPdW5kZXJseWluZ1ByaWNlAwMDCQAAAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAAAGCQAAAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAYJAQ5pc01hcmtldENsb3NlZAAJAJUKAwAAAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQMJAAACCQELZnVuZGluZ01vZGUABRJGVU5ESU5HX0FTWU1NRVRSSUMEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlQoDBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgAABBlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUABBhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAQOcHJlbWl1bVRvVmF1bHQJAGUCBRlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uBRhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24JAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ5wcmVtaXVtVG9WYXVsdAQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkDCQAAAgkBC2Z1bmRpbmdNb2RlAAUSRlVORElOR19BU1lNTUVUUklDBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24AAAQYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAQZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUABA5wcmVtaXVtVG9WYXVsdAkAZQIFGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgUZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkAlQoDBRNsb25nUHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ5wcmVtaXVtVG9WYXVsdAEOZ2V0QWRqdXN0ZWRGZWUCC19hcnRpZmFjdElkEF9iYXNlRmVlRGlzY291bnQECmJhc2VGZWVSYXcJAQNmZWUABAdiYXNlRmVlCQEEbXVsZAIFCmJhc2VGZWVSYXcFEF9iYXNlRmVlRGlzY291bnQEDSR0MDQzMzI2NDM4MjEDCQECIT0CBQtfYXJ0aWZhY3RJZAIABAxhcnRpZmFjdEtpbmQJAQRzdHJBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUMa190b2tlbl90eXBlBQtfYXJ0aWZhY3RJZAMJAAACBQxhcnRpZmFjdEtpbmQFGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQQJcmVkdWN0aW9uCQEEaW50QQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdG9rZW5fcGFyYW0FC19hcnRpZmFjdElkBAthZGp1c3RlZEZlZQkBBG11bGQCBQdiYXNlRmVlBQlyZWR1Y3Rpb24JAJQKAgULYWRqdXN0ZWRGZWUGCQACAQIZSW52YWxpZCBhdHRhY2hlZCBhcnRpZmFjdAkAlAoCBQdiYXNlRmVlBwQLYWRqdXN0ZWRGZWUIBQ0kdDA0MzMyNjQzODIxAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MzMyNjQzODIxAl8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgdfdHJhZGVyCF9hc3NldElkBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl8xAwkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABgkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBC2lzU2FtZUFzc2V0AgdfdHJhZGVyCF9hc3NldElkCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDA0NDUwMTQ0NTc1CQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwNDQ1MDE0NDU3NQJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDQ1MDE0NDU3NQJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncw4QX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfaW5pdE1hcmdpblJhdGlvBRBfaW5pdE1hcmdpblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8FBF9tbXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwUUX2xpcXVpZGF0aW9uRmVlUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfZnVuZGluZ1BlcmlvZAUOX2Z1bmRpbmdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIFBWtfZmVlBQRfZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VJbXBhY3QFD19tYXhQcmljZUltcGFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlU3ByZWFkBQ9fbWF4UHJpY2VTcHJlYWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbWF4T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heE9yYWNsZURlbGF5BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19yb2xsb3ZlckZlZQUMX3JvbGxvdmVyRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX2Z1bmRpbmdNb2RlBQxfZnVuZGluZ01vZGUFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIOX2lzTmV3UG9zaXRpb24IX2FkZHJlc3MDBQ5faXNOZXdQb3NpdGlvbgQPY3VycmVudFNlcXVlbmNlCQEMbGFzdFNlcXVlbmNlAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQhfYWRkcmVzcwkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprX3NlcXVlbmNlCQBkAgUPY3VycmVudFNlcXVlbmNlAAEFA25pbAUDbmlsARF1cGRhdGVQb3NpdGlvbkZlZQMOX2lzTmV3UG9zaXRpb24IX2FkZHJlc3MEX2ZlZQMFDl9pc05ld1Bvc2l0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQhfYWRkcmVzcwUEX2ZlZQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBghfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xhdGVzdFRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzBQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzBQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUIX2FkZHJlc3MFEF9sYXRlc3RUaW1lc3RhbXAFA25pbAEKYXBwZW5kVHdhcAEGX3ByaWNlBAhtaW51dGVJZAkAaQIJAGkCCQENbGFzdFRpbWVzdGFtcAAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFCXByZXZQcmljZQQEbGlzdAkBC3B1c2hUb1F1ZXVlAwkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABQ1UV0FQX0lOVEVSVkFMCQCkAwEFCG1pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUIX2FkZHJlc3MFA25pbAEId2l0aGRyYXcCCF9hZGRyZXNzB19hbW91bnQEB2JhbGFuY2UJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAZgIFB19hbW91bnQFB2JhbGFuY2UJAAIBCQCsAgIJAKwCAgkArAICAhNVbmFibGUgdG8gd2l0aGRyYXcgCQCkAwEFB19hbW91bnQCFyBmcm9tIGNvbnRyYWN0IGJhbGFuY2UgCQCkAwEFB2JhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIX2FkZHJlc3MFB19hbW91bnQJAQpxdW90ZUFzc2V0AAUDbmlsAQ11cGRhdGVCYWxhbmNlAQFpAwkAZgIAAAUBaQkAAgECB0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYmFsYW5jZQUBaQUDbmlsAQt0cmFuc2ZlckZlZQEBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEOc3Rha2luZ0FkZHJlc3MABQFpCQEKcXVvdGVBc3NldAAFA25pbAEOZG9CdXJuQXJ0aWZhY3QCDV9idXJuQXJ0aWZhY3QBaQMFDV9idXJuQXJ0aWZhY3QJAMwIAgkBBEJ1cm4CCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAIQSW52YWxpZCBhcnRpZmFjdAABBQNuaWwFA25pbBYBaQEFcGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFEludmFsaWQgcGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAYFA25pbAFpAQd1bnBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIHVucGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxzZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECG0ludmFsaWQgc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkGBQNuaWwBaQEOdW5zZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgdW5zZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBRiYXNlQXNzZXRBbW91bnRUb0FkZAkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQEDSR0MDU0Nzk0NTQ5NDUJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDU0Nzk0NTQ5NDUCXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDU0Nzk0NTQ5NDUCXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA1NDc5NDU0OTQ1Al8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3JlbW92ZUxpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCBRFfcXVvdGVBc3NldEFtb3VudAAACQACAQIeSW52YWxpZCByZW1vdmVMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQEDYWJzAQkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUEDSR0MDU2MDQxNTYxOTIJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDU2MDQxNTYxOTICXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDU2MDQxNTYxOTICXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA1NjA0MTU2MTkyAl8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNoYW5nZVNldHRpbmdzDhBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlDF9mdW5kaW5nTW9kZQMDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBnAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQBnAgAABQxfcm9sbG92ZXJGZWUGAwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRFGVU5ESU5HX1NZTU1FVFJJQwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRJGVU5ESU5HX0FTWU1NRVRSSUMHBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQEOdXBkYXRlU2V0dGluZ3MOBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlBQxfZnVuZGluZ01vZGUBaQEKaW5pdGlhbGl6ZRMHX3F0QXN0UgdfYnNBc3RSDl9mdW5kaW5nUGVyaW9kEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbwRfZmVlD19iYXNlT3JhY2xlRGF0YRBfcXVvdGVPcmFjbGVEYXRhDF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlDF9mdW5kaW5nTW9kZQMDAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZwIAAAUPX21heE9yYWNsZURlbGF5BgkAZwIAAAUMX3JvbGxvdmVyRmVlBgMJAQIhPQIFDF9mdW5kaW5nTW9kZQURRlVORElOR19TWU1NRVRSSUMJAQIhPQIFDF9mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDBwYJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tCAUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzDgUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQUMX2Z1bmRpbmdNb2RlCQENdXBkYXRlRnVuZGluZwUJAGQCCQENbGFzdFRpbWVzdGFtcAAFDl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAJAQ11cGRhdGVCYWxhbmNlAQAACQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgkAzAgCCQELU3RyaW5nRW50cnkCBQxrX2Jhc2VPcmFjbGUFD19iYXNlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX3F1b3RlT3JhY2xlBRBfcXVvdGVPcmFjbGVEYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDF9jb29yZGluYXRvcgUDbmlsAWkBEGluY3JlYXNlUG9zaXRpb24ECl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQAAwMDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDYyMzE2NjI0NjUJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyCQENZ2V0QXJ0aWZhY3RJZAEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNjIzMTY2MjQ2NQJfMQQMYnVybkFydGlmYWN0CAUNJHQwNjIzMTY2MjQ2NQJfMgQHX2Ftb3VudAkBBGRpdmQCBQpfcmF3QW1vdW50CQBkAgkBBG11bGQCBQthZGp1c3RlZEZlZQUJX2xldmVyYWdlBQxERUNJTUFMX1VOSVQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQJAGUCBQpfcmF3QW1vdW50BQdfYW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDYyOTYxNjMxMjkJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDYyOTYxNjMxMjkCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjI5NjE2MzEyOQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2Mjk2MTYzMTI5Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDYyOTYxNjMxMjkCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjI5NjE2MzEyOQJfNQQNaXNOZXdQb3NpdGlvbgkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABA9pc1NhbWVEaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkAAAIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAQOZXhwYW5kRXhpc3RpbmcDCQEBIQEFDWlzTmV3UG9zaXRpb24FD2lzU2FtZURpcmVjdGlvbgcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDYzNDE4NjY1MzkDAwUNaXNOZXdQb3NpdGlvbgYFDmV4cGFuZEV4aXN0aW5nBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2MzkyNzY0MTAwCQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0CAUNJHQwNjM5Mjc2NDEwMAJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDYzOTI3NjQxMDACXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDYzOTI3NjQxMDACXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2MzkyNzY0MTAwAl80AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQxvcGVuTm90aW9uYWwAAAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAEDSR0MDY0NjQ2NjQ5MjEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDY0NjQ2NjQ5MjECXzEEAngxCAUNJHQwNjQ2NDY2NDkyMQJfMgQCeDIIBQ0kdDA2NDY0NjY0OTIxAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDY0NjQ2NjQ5MjECXzQDCQEBIQEJARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQACAQIVT3ZlciBtYXggc3ByZWFkIGxpbWl0AwkBASEBCQEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIWT3ZlciBtYXggb3BlbiBub3Rpb25hbAkAoAoOBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplCQENbGFzdFRpbWVzdGFtcAAFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgULcm9sbG92ZXJGZWUEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDY2MjM5NjYzNTUJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA2NjIzOTY2MzU1Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNjYyMzk2NjM1NQJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDYzNDE4NjY1MzkCXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNjM0MTg2NjUzOQJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2MzQxODY2NTM5Al8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDYzNDE4NjY1MzkCXzQEFG5ld1Bvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjM0MTg2NjUzOQJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjM0MTg2NjUzOQJfNgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDYzNDE4NjY1MzkCXzcEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2MzQxODY2NTM5Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjM0MTg2NjUzOQJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA2MzQxODY2NTM5A18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNjM0MTg2NjUzOQNfMTEEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjM0MTg2NjUzOQNfMTIEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDYzNDE4NjY1MzkDXzEzBAtyb2xsb3ZlckZlZQgFDSR0MDYzNDE4NjY1MzkDXzE0BA0kdDA2NjU0NTY2NjE2CQENZGlzdHJpYnV0ZUZlZQEJAGQCBQlmZWVBbW91bnQFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2NjU0NTY2NjE2Al8xBApmZWVUb1ZhdWx0CAUNJHQwNjY1NDU2NjYxNgJfMgQFc3Rha2UDCQBnAgUHX2Ftb3VudAULcm9sbG92ZXJGZWUJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAJAGUCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQUDbmlsCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCCQBlAgULcm9sbG92ZXJGZWUFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYFFG5ld1Bvc2l0aW9uVGltZXN0YW1wCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIFDWlzTmV3UG9zaXRpb24FB190cmFkZXIJARF1cGRhdGVQb3NpdGlvbkZlZQMFDWlzTmV3UG9zaXRpb24FB190cmFkZXIFC2FkanVzdGVkRmVlCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHX2Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQAAwMDAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpc1NhbWVBc3NldAIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA2ODg3MzY5MDQxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2ODg3MzY5MDQxAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDY4ODczNjkwNDECXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjg4NzM2OTA0MQJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2ODg3MzY5MDQxAl80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDY4ODczNjkwNDECXzUEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvblRpbWVzdGFtcAQWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwMJAGYCBQtyb2xsb3ZlckZlZQAABA0kdDA2OTMyNjY5Mzg1CQENZGlzdHJpYnV0ZUZlZQEFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2OTMyNjY5Mzg1Al8xBApmZWVUb1ZhdWx0CAUNJHQwNjkzMjY2OTM4NQJfMgQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUMZmVlVG9TdGFrZXJzBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUKZmVlVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0CQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgkAZQIFEW9sZFBvc2l0aW9uTWFyZ2luBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4BB19hbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgMDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAh9JbnZhbGlkIHJlbW92ZU1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA3MDc1ODcwOTI2CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA3MDc1ODcwOTI2Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDcwNzU4NzA5MjYCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzA3NTg3MDkyNgJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MDc1ODcwOTI2Al80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDcwNzU4NzA5MjYCXzUEDSR0MDcwOTMyNzExODEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQEtAQUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNzA5MzI3MTE4MQJfMQQHYmFkRGVidAgFDSR0MDcwOTMyNzExODECXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNzA5MzI3MTE4MQJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA3MDkzMjcxMTgxAl80AwkBAiE9AgUHYmFkRGVidAAACQACAQIdSW52YWxpZCByZW1vdmVkIG1hcmdpbiBhbW91bnQEC21hcmdpblJhdGlvCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBD2luaXRNYXJnaW5SYXRpbwAGCQACAQkArAICCQCsAgIJAKwCAgIZVG9vIG11Y2ggbWFyZ2luIHJlbW92ZWQ6IAkApAMBBQttYXJnaW5SYXRpbwIDIDwgCQCkAwEJAQ9pbml0TWFyZ2luUmF0aW8ABA0kdDA3MTU2NzcxNjI2CQENZGlzdHJpYnV0ZUZlZQEFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA3MTU2NzcxNjI2Al8xBApmZWVUb1ZhdWx0CAUNJHQwNzE1Njc3MTYyNgJfMgQWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwMJAGYCBQtyb2xsb3ZlckZlZQAABAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUKZmVlVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0CQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCCQBkAgUHX2Ftb3VudAUMZmVlVG9TdGFrZXJzBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplCQENbGFzdFRpbWVzdGFtcAAJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUHX2Ftb3VudAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWNsb3NlUG9zaXRpb24DBV9zaXplFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAQUHX3RyYWRlcgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfNQQNJHQwNzM4MDE3NDM4NgkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgcFB190cmFkZXIFBV9zaXplBQtwb3NpdGlvbkZlZQUUX21pblF1b3RlQXNzZXRBbW91bnQFDF9hZGRUb01hcmdpbgYGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MzgwMTc0Mzg2Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDczODAxNzQzODYCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzM4MDE3NDM4NgJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MzgwMTc0Mzg2Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MzgwMTc0Mzg2Al81BAtyZWFsaXplZFBubAgFDSR0MDczODAxNzQzODYCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzM4MDE3NDM4NgJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDczODAxNzQzODYCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDczODAxNzQzODYCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MzgwMTc0Mzg2A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDczODAxNzQzODYDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDczODAxNzQzODYDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MzgwMTc0Mzg2A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MzgwMTc0Mzg2A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzM4MDE3NDM4NgNfMTUEC3JlYWxpemVkRmVlCAUNJHQwNzM4MDE3NDM4NgNfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAipJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogYmFkIGRlYnQDCQBnAgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAkAAgECU0ludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzOiB3YWl0IGF0IGxlYXN0IDEgYmxvY2sgYmVmb3JlIGNsb3NpbmcgdGhlIHBvc2l0aW9uBA5pc1BhcnRpYWxDbG9zZQkBAiE9AgUPbmV3UG9zaXRpb25TaXplAAAEDndpdGhkcmF3QW1vdW50CQBkAgUObWFyZ2luVG9UcmFkZXIFC3JlYWxpemVkRmVlBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDWFtbU5ld0JhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDndpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA0kdDA3NTA1ODc1MTE3CQENZGlzdHJpYnV0ZUZlZQEFC3JlYWxpemVkRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA3NTA1ODc1MTE3Al8xBApmZWVUb1ZhdWx0CAUNJHQwNzUwNTg3NTExNwJfMgQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQtyZWFsaXplZEZlZQUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgMFDmlzUGFydGlhbENsb3NlCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgMJAGYCBQ5tYXJnaW5Ub1RyYWRlcgAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUObWFyZ2luVG9UcmFkZXIFA25pbAkBDXVwZGF0ZUJhbGFuY2UBBQ1hbW1OZXdCYWxhbmNlCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8DCQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEEW9yYWNsZU1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFEVBOTF9PUFRJT05fT1JBQ0xFCQEEdm1heAIFD3Nwb3RNYXJnaW5SYXRpbwURb3JhY2xlTWFyZ2luUmF0aW8FD3Nwb3RNYXJnaW5SYXRpbwMDAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwUWbGlxdWlkYXRpb25NYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQQUaXNQYXJ0aWFsTGlxdWlkYXRpb24DAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcED29sZFBvc2l0aW9uU2l6ZQgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEED3Bvc2l0aW9uU2l6ZUFicwkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNzc1Mzg3Nzg2MQMFFGlzUGFydGlhbExpcXVpZGF0aW9uBA9saXF1aWRhdGlvblNpemUJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEEGxpcXVpZGF0aW9uUmF0aW8JAQRkaXZkAgkBA2FicwEFD2xpcXVpZGF0aW9uU2l6ZQUPcG9zaXRpb25TaXplQWJzCQCUCgIFEGxpcXVpZGF0aW9uUmF0aW8JAQNhYnMBBQ9saXF1aWRhdGlvblNpemUJAJQKAgAABQ9wb3NpdGlvblNpemVBYnMEEGxpcXVpZGF0aW9uUmF0aW8IBQ0kdDA3NzUzODc3ODYxAl8xBA9saXF1aWRhdGlvblNpemUIBQ0kdDA3NzUzODc3ODYxAl8yBA0kdDA3Nzg2Nzc4NTA1CQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uBwUHX3RyYWRlcgMFFGlzUGFydGlhbExpcXVpZGF0aW9uBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8AAAAGBwYED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDc3ODY3Nzg1MDUCXzEEEW5ld1Bvc2l0aW9uTWFyZ2luCAUNJHQwNzc4Njc3ODUwNQJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA3Nzg2Nzc4NTA1Al8zBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDc3ODY3Nzg1MDUCXzQED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDc3ODY3Nzg1MDUCXzUEC3JlYWxpemVkUG5sCAUNJHQwNzc4Njc3ODUwNQJfNgQObWFyZ2luVG9UcmFkZXIIBQ0kdDA3Nzg2Nzc4NTA1Al83BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzc4Njc3ODUwNQJfOAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzc4Njc3ODUwNQJfOQQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDc3ODY3Nzg1MDUDXzEwBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNzc4Njc3ODUwNQNfMTEEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNzc4Njc3ODUwNQNfMTIED3RvdGFsU2hvcnRBZnRlcggFDSR0MDc3ODY3Nzg1MDUDXzEzBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc3ODY3Nzg1MDUDXzE0BBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3Nzg2Nzc4NTA1A18xNQQSbGlxdWlkYXRpb25QZW5hbHR5CAUNJHQwNzc4Njc3ODUwNQNfMTYED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBApmZWVUb1ZhdWx0CQBlAgUSbGlxdWlkYXRpb25QZW5hbHR5BQ9mZWVUb0xpcXVpZGF0b3IECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDW5ld0FtbUJhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEC2xvY2tCYWREZWJ0AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAABAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAGQCBQ9wb3NpdGlvbkJhZERlYnQFEmxpcXVpZGF0aW9uUGVuYWx0eQUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFEmxpcXVpZGF0aW9uUGVuYWx0eQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCAwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24JAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnBheUZ1bmRpbmcABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQENbGFzdFRpbWVzdGFtcAAGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgEJAKwCAgkArAICCQCsAgICIUludmFsaWQgZnVuZGluZyBibG9jayB0aW1lc3RhbXA6IAkApAMBCQENbGFzdFRpbWVzdGFtcAACAyA8IAkApAMBBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODA2MTg4MDY5NgkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgwNjE4ODA2OTYCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MDYxODgwNjk2Al8yBA5wcmVtaXVtVG9WYXVsdAgFDSR0MDgwNjE4ODA2OTYCXzMEE2RvUGF5RnVuZGluZ1RvVmF1bHQDCQBmAgUOcHJlbWl1bVRvVmF1bHQAAAQTZG9QYXlGdW5kaW5nVG9WYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUOcHJlbWl1bVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFE2RvUGF5RnVuZGluZ1RvVmF1bHQFE2RvUGF5RnVuZGluZ1RvVmF1bHQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFE2RvUGF5RnVuZGluZ1RvVmF1bHQFE2RvUGF5RnVuZGluZ1RvVmF1bHQJAQ11cGRhdGVGdW5kaW5nBQkAZAIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAZAIJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFE2xvbmdQcmVtaXVtRnJhY3Rpb24JAGQCCQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQAEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQNJHQwODE3NDc4MjExMwkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAUHX3F0QXN0UgUHX2JzQXN0UgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDgxNzQ3ODIxMTMCXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDgxNzQ3ODIxMTMCXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA4MTc0NzgyMTEzAl8zBBBtYXJnaW5Ub1ZhdWx0QWRqAwMJAGYCAAAFDW1hcmdpblRvVmF1bHQJAGYCCQEDYWJzAQUNbWFyZ2luVG9WYXVsdAkBCGNiYWxhbmNlAAcJAQEtAQkBCGNiYWxhbmNlAAUNbWFyZ2luVG9WYXVsdAQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFEG1hcmdpblRvVmF1bHRBZGoAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFEG1hcmdpblRvVmF1bHRBZGoFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkAzggCCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABRBtYXJnaW5Ub1ZhdWx0QWRqCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkBCmFwcGVuZFR3YXABCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUTbmV3UXVvdGVBc3NldFdlaWdodAkBBG11bGQCBQdfYnNBc3RSBRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQZW5zdXJlQ2FsbGVkT25jZQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiJJbnZhbGlkIHNhdmVDdXJyZW50VHhJZCBwYXJhbWV0ZXJzBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUIa19sYXN0VHgCAAMJAQIhPQIFBmxhc3RUeAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfbGFzdFR4BQZsYXN0VHgFA25pbAkAAgECKUNhbiBub3QgY2FsbCB2QU1NIG1ldGhvZHMgdHdpY2UgaW4gb25lIHR4AWkBJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAEHX3RyYWRlcgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA0kdDA4Mzc1NTgzODc5CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA4Mzc1NTgzODc5Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDgzNzU1ODM4NzkCXzIEA3BvbggFDSR0MDgzNzU1ODM4NzkCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwODM3NTU4Mzg3OQJfNAQRcG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA4Mzc1NTgzODc5Al81BA0kdDA4Mzg4MjgzOTgzCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDA4Mzg4MjgzOTgzAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwODM4ODI4Mzk4MwJfMgQNJHQwODM5ODY4NDIxMAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBRFwb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwODM5ODY4NDIxMAJfMQQHYmFkRGVidAgFDSR0MDgzOTg2ODQyMTACXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwODM5ODY4NDIxMAJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA4Mzk4Njg0MjEwAl80CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAQUHX3RyYWRlcgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAkBAXMBBQtyb2xsb3ZlckZlZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV2aWV3X2dldFBlZ0FkanVzdENvc3QBBl9wcmljZQQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAZyZXN1bHQJARRnZXRTeW5jVGVybWluYWxQcmljZQMFBl9wcmljZQUHX3F0QXN0UgUHX2JzQXN0UgkAAgEJAKQDAQgFBnJlc3VsdAJfMwFpARh2aWV3X2dldFRlcm1pbmFsQW1tUHJpY2UABA0kdDA4NDkzMzg1MDE0CQETZ2V0VGVybWluYWxBbW1TdGF0ZQAEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDA4NDkzMzg1MDE0Al8xBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDA4NDkzMzg1MDE0Al8yBAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFcACQEEbXVsZAIFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0VwAJAAIBCQCkAwEFBXByaWNlAWkBD3ZpZXdfZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODU1MjM4NTYwMQkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDg1NTIzODU2MDECXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NTUyMzg1NjAxAl8yBA5wcmVtaXVtVG9WYXVsdAgFDSR0MDg1NTIzODU2MDECXzMEC2xvbmdGdW5kaW5nCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQQMc2hvcnRGdW5kaW5nCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJARBnZXRUd2FwU3BvdFByaWNlAAkBAXMBCQEOZ2V0T3JhY2xlUHJpY2UACQEBcwEFDnByZW1pdW1Ub1ZhdWx0AWkBEGNvbXB1dGVTcG90UHJpY2UABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEBnJlc3VsdAkBDGdldFNwb3RQcmljZQAJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQGcmVzdWx0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgULX2FydGlmYWN0SWQJAJQKAgUDbmlsBQZyZXN1bHQBAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5SQEktA==", "height": 2450981, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7Tjvbt87ykHo23dftAhxcg4FXUe6qSNPUTgpgNXnHDhQ Next: 55W7n6DM2PB7athNCeAAo88CM34GCHM3g8pmG5oWFqzt Diff:
OldNewDifferences
5757
5858 let B = "k_maxOracleDelay"
5959
60-let C = "k_lastDataStr"
60+let C = "k_fundingMode"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_lastDataStr"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_lastMinuteId"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_twapDataLastCumulativePrice"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_twapDataLastPrice"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_twapDataPreviousMinuteId"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_latestLongPremiumFraction"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_latestShortPremiumFraction"
7575
76-let K = "k_longFundingRate"
76+let K = "k_nextFundingBlockMinTimestamp"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_longFundingRate"
7979
80-let M = "k_qtAstR"
80+let M = "k_shortFundingRate"
8181
82-let N = "k_bsAstR"
82+let N = "k_qtAstR"
8383
84-let O = "k_qtAstW"
84+let O = "k_bsAstR"
8585
86-let P = "k_bsAstW"
86+let P = "k_qtAstW"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_bsAstW"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_totalPositionSize"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_totalLongPositionSize"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_totalShortPositionSize"
9595
96-let U = "k_openInterestShort"
96+let U = "k_openInterestNotional"
9797
98-let V = "k_openInterestLong"
98+let V = "k_openInterestShort"
9999
100-let W = "k_lastTx"
100+let W = "k_openInterestLong"
101101
102-let X = "k_coordinatorAddress"
102+let X = "k_lastTx"
103103
104-let Y = "k_vault_address"
104+let Y = "k_coordinatorAddress"
105105
106-let Z = "k_admin_address"
106+let Z = "k_vault_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_admin_address"
109109
110-let ab = "k_quote_staking"
110+let ab = "k_quote_asset"
111111
112-let ac = "k_staking_address"
112+let ac = "k_quote_staking"
113113
114-let ad = "k_miner_address"
114+let ad = "k_staking_address"
115115
116-let ae = "k_orders_address"
116+let ae = "k_miner_address"
117117
118-let af = "k_referral_address"
118+let af = "k_orders_address"
119119
120-let ag = "k_exchange_address"
120+let ag = "k_referral_address"
121121
122-let ah = "k_nft_manager_address"
122+let ah = "k_exchange_address"
123123
124-func ai (aj,ak) = ((aj + "_") + ak)
124+let ai = "k_nft_manager_address"
125+
126+func aj (ak,al) = ((ak + "_") + al)
125127
126128
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
129+func am () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
128130
129131
130-func am () = addressFromString(getStringValue(al(), Z))
132+func an () = addressFromString(getStringValue(am(), aa))
131133
132134
133-func an () = fromBase58String(getStringValue(al(), aa))
135+func ao () = fromBase58String(getStringValue(am(), ab))
134136
135137
136-func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
138+func ap () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
137139
138140
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
141+func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
140142
141143
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
144+func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), Z)), "Vault not set")
143145
144146
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
147+func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
146148
147149
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
150+func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
149151
150152
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
153+func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
152154
153155
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
156+func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
155157
156158
157-let av = "k_token_param"
159+let aw = "k_token_param"
158160
159-let aw = "k_token_type"
161+let ax = "k_token_type"
160162
161-let ax = "fee_reduction"
163+let ay = "fee_reduction"
162164
163-let ay = 1
165+let az = 1
164166
165-let az = 2
167+let aA = 2
166168
167-let aA = 15
169+let aB = 15
168170
169-let aB = 1000
171+let aC = 1000
170172
171-let aC = 6
173+let aD = 6
172174
173-let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
175+let aE = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174176
175-let aE = (525600 * aD)
177+let aF = (525600 * aE)
176178
177-let aF = (86400 * aD)
179+let aG = (86400 * aE)
178180
179-let aG = 1
181+let aH = 1
180182
181-let aH = 2
183+let aI = 2
182184
183-func aI (aJ) = (toString(aJ) + ",")
185+let aJ = 1
186+
187+let aK = 2
188+
189+func aL (aM) = (toString(aM) + ",")
184190
185191
186-func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
192+func aN (aM,aO) = fraction(aM, aE, aO, HALFEVEN)
187193
188194
189-func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
195+func aP (aM,aO) = fraction(aM, aO, aE, HALFEVEN)
190196
191197
192-func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
198+func aQ (aM,aO) = fraction(aM, toBigInt(aE), aO, HALFEVEN)
193199
194200
195-func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
201+func aR (aM,aO) = fraction(aM, aO, toBigInt(aE), HALFEVEN)
196202
197203
198-func aP (aJ) = if ((aJ > 0))
199- then aJ
200- else -(aJ)
204+func aS (aM) = if ((aM > 0))
205+ then aM
206+ else -(aM)
201207
202208
203-func aQ (aJ,aL) = if ((aJ >= aL))
204- then aJ
205- else aL
209+func aT (aM,aO) = if ((aM >= aO))
210+ then aM
211+ else aO
206212
207213
208-func aR (aS) = if ((size(aS) == 0))
214+func aU (aV) = if ((size(aV) == 0))
209215 then ""
210- else makeString(aS, ",")
216+ else makeString(aV, ",")
211217
212218
213-func aT (aU) = if ((aU == ""))
219+func aW (aX) = if ((aX == ""))
214220 then nil
215- else split(aU, ",")
221+ else split(aX, ",")
216222
217223
218-func aV (aS,aW,aX) = if ((size(aS) > aW))
219- then (removeByIndex(aS, 0) :+ aX)
220- else (aS :+ aX)
224+func aY (aV,aZ,ba) = if ((size(aV) > aZ))
225+ then (removeByIndex(aV, 0) :+ ba)
226+ else (aV :+ ba)
221227
222228
223-func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
229+func bb (bc) = valueOrErrorMessage(getInteger(this, bc), ("no value for " + bc))
224230
225231
226-func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
232+func bd (bc,be) = valueOrElse(getInteger(this, bc), be)
227233
228234
229-func bc (ak,aj) = {
230- let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231- bd
235+func bf (al,ak) = {
236+ let bg = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
237+ bg
232238 }
233239
234240
235-func be (ak,aj) = {
236- let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237- bd
241+func bh (al,ak) = {
242+ let bg = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
243+ bg
238244 }
239245
240246
241-func bf () = aY(c)
247+func bi () = bb(c)
242248
243249
244-func bg () = aY(p)
250+func bj () = bb(p)
245251
246252
247-func bh () = aY(q)
253+func bk () = bb(q)
248254
249255
250-func bi () = aY(s)
256+func bl () = bb(s)
251257
252258
253-func bj () = aY(M)
259+func bm () = bb(N)
254260
255261
256-func bk () = aY(N)
262+func bn () = bb(O)
257263
258264
259-func bl () = ba(O, aD)
265+func bo () = bd(P, aE)
260266
261267
262-func bm () = ba(P, aD)
268+func bp () = bd(Q, aE)
263269
264270
265-func bn () = aY(Q)
271+func bq () = bb(R)
266272
267273
268-func bo () = aY(T)
274+func br () = bb(U)
269275
270276
271-func bp () = aY(U)
277+func bs () = bb(V)
272278
273279
274-func bq () = aY(V)
280+func bt () = bb(W)
275281
276282
277-func br () = aY(J)
283+func bu () = bb(K)
278284
279285
280-func bs () = aY(r)
286+func bv () = bb(r)
281287
282288
283-func bt () = (bs() * aD)
289+func bw () = (bv() * aE)
284290
285291
286-func bu () = (bs() * aB)
292+func bx () = (bv() * aC)
287293
288294
289-func bv () = aY(t)
295+func by () = bb(t)
290296
291297
292-func bw () = aY(u)
298+func bz () = bb(u)
293299
294300
295-func bx () = aY(v)
301+func bA () = bb(v)
296302
297303
298-func by () = aY(w)
304+func bB () = bb(w)
299305
300306
301-func bz () = aY(x)
307+func bC () = bb(x)
302308
303309
304-func bA () = aY(y)
310+func bD () = bb(y)
305311
306312
307-func bB () = aY(z)
313+func bE () = bb(z)
308314
309315
310-func bC () = aY(H)
316+func bF () = bb(I)
311317
312318
313-func bD () = aY(I)
319+func bG () = bb(J)
314320
315321
316-func bE () = aY(S)
322+func bH () = bb(T)
317323
318324
319-func bF () = aY(R)
325+func bI () = bb(S)
320326
321327
322-func bG () = ba(d, 0)
328+func bJ () = bd(d, 0)
323329
324330
325-func bH () = aY(A)
331+func bK () = bb(A)
326332
327333
328-func bI () = aY(B)
334+func bL () = bb(B)
329335
330336
331-func bJ () = lastBlock.timestamp
337+func bM () = bd(C, aJ)
332338
333339
334-func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
340+func bN () = lastBlock.timestamp
335341
336342
337-func bM (bN,bO,bP) = {
338- let bQ = (bN - bO)
339- if (if (bP)
340- then (0 > bQ)
343+func bO (bP) = valueOrElse(getString(at(), "k_sender"), toString(bP.caller))
344+
345+
346+func bQ (bR,bS,bT) = {
347+ let bU = (bR - bS)
348+ if (if (bT)
349+ then (0 > bU)
341350 else false)
342- then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343- else if (if (!(bP))
344- then (bQ >= 0)
351+ then throw(((("Invalid margin: " + toString(bR)) + " < ") + toString(bS)))
352+ else if (if (!(bT))
353+ then (bU >= 0)
345354 else false)
346- then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
355+ then throw(((("Invalid margin: " + toString(bR)) + " > ") + toString(bS)))
347356 else true
348357 }
349358
350359
351-func bR (bS) = if ((bS == 0))
360+func bV (bW) = if ((bW == 0))
352361 then throw("Should not be called with _positionSize == 0")
353- else if ((bS > 0))
354- then bC()
355- else bD()
362+ else if ((bW > 0))
363+ then bF()
364+ else bG()
356365
357366
358-func bT (bU) = {
359- let bV = getInteger(this, ai(e, bU))
360- let bW = bV
361- if ($isInstanceOf(bW, "Int"))
367+func bX (bY) = {
368+ let bZ = getInteger(this, aj(e, bY))
369+ let ca = bZ
370+ if ($isInstanceOf(ca, "Int"))
362371 then {
363- let bX = bW
364- $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
372+ let cb = ca
373+ $Tuple5(cb, getIntegerValue(this, aj(f, bY)), getIntegerValue(this, aj(g, bY)), getIntegerValue(this, aj(h, bY)), getIntegerValue(this, aj(l, bY)))
365374 }
366375 else $Tuple5(0, 0, 0, 0, 0)
367376 }
368377
369378
370-func bY (bU) = {
371- let bZ = getString(this, ai(j, bU))
372- let bW = bZ
373- if ($isInstanceOf(bW, "String"))
379+func cc (bY) = {
380+ let cd = getString(this, aj(j, bY))
381+ let ca = cd
382+ if ($isInstanceOf(ca, "String"))
374383 then {
375- let ca = bW
376- ca
384+ let ce = ca
385+ ce
377386 }
378- else toBase58String(an())
387+ else toBase58String(ao())
379388 }
380389
381390
382-func cb (bU) = {
383- let cc = getInteger(this, ai(k, bU))
384- let bW = cc
385- if ($isInstanceOf(bW, "Int"))
391+func cf (bY) = {
392+ let cg = getInteger(this, aj(k, bY))
393+ let ca = cg
394+ if ($isInstanceOf(ca, "Int"))
386395 then {
387- let cd = bW
388- cd
396+ let ch = ca
397+ ch
389398 }
390- else bg()
399+ else bj()
391400 }
392401
393402
394-func ce (bU) = if ((bT(bU)._1 == 0))
403+func ci (bY) = if ((bX(bY)._1 == 0))
395404 then throw("No open position")
396405 else true
397406
398407
399-func cf (cg) = {
400- let ch = getString(this, cg)
401- if (if (isDefined(ch))
402- then (value(ch) != "")
408+func cj (ck) = {
409+ let cl = getString(this, ck)
410+ if (if (isDefined(cl))
411+ then (value(cl) != "")
403412 else false)
404413 then {
405- let ci = split(value(ch), ",")
406- let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407- let ck = ci[1]
408- let cl = ci[2]
409- let cm = ci[3]
410- $Tuple4(cj, ck, cl, cm)
414+ let cm = split(value(cl), ",")
415+ let cn = valueOrErrorMessage(addressFromString(cm[0]), ("Invalid oracle address in: " + value(cl)))
416+ let co = cm[1]
417+ let cp = cm[2]
418+ let cq = cm[3]
419+ $Tuple4(cn, co, cp, cq)
411420 }
412421 else unit
413422 }
414423
415424
416-func cn () = valueOrElse(getBoolean(this, m), false)
425+func cr () = valueOrElse(getBoolean(this, m), false)
417426
418427
419-func co () = valueOrElse(getBoolean(this, n), false)
428+func cs () = valueOrElse(getBoolean(this, n), false)
420429
421430
422-func cp () = valueOrElse(getBoolean(this, o), false)
431+func ct () = valueOrElse(getBoolean(this, o), false)
423432
424433
425-func cq (cr,cs,ct) = if (cr)
434+func cu (cv,cw,cx) = if (cv)
426435 then {
427- let cu = (bk() - ct)
428- if ((0 >= cu))
436+ let cy = (bn() - cx)
437+ if ((0 >= cy))
429438 then throw("Tx lead to base asset reserve <= 0, revert")
430- else $Tuple3((bj() + cs), cu, (bn() + ct))
439+ else $Tuple3((bm() + cw), cy, (bq() + cx))
431440 }
432441 else {
433- let cv = (bj() - cs)
434- if ((0 >= cv))
442+ let cz = (bm() - cw)
443+ if ((0 >= cz))
435444 then throw("Tx lead to base quote reserve <= 0, revert")
436- else $Tuple3(cv, (bk() + ct), (bn() - ct))
445+ else $Tuple3(cz, (bn() + cx), (bq() - cx))
437446 }
438447
439448
440-func cw (cx,cy) = {
441- let cz = toBigInt(cx)
442- let cA = toBigInt(cy)
443- aO(cz, cA)
449+func cA (cB,cC) = {
450+ let cD = toBigInt(cB)
451+ let cE = toBigInt(cC)
452+ aR(cD, cE)
444453 }
445454
446455
447-func cB (cr,cs) = {
448- let cx = bj()
449- let cy = bk()
450- let cC = bl()
451- let cD = bm()
452- let cE = aK(cs, cC)
453- let aZ = cw(cx, cy)
454- let cF = if (cr)
455- then (cx + cE)
456- else (cx - cE)
457- let cG = toInt(aN(aZ, toBigInt(cF)))
458- let cH = aP((cG - cy))
459- let cI = if (cr)
460- then cH
461- else -(cH)
462- let cJ = cq(cr, cE, cH)
463- let cK = cJ._1
464- let cL = cJ._2
465- let cM = cJ._3
466- let cN = aK(aM(cx, cC), aM(cy, cD))
467- let cO = aK(cs, cH)
468- let cP = aP((cN - cO))
469- let cQ = (aD - aK(cN, (cN + cP)))
470- let cR = bz()
471- if ((cQ > cR))
472- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473- else $Tuple4(cI, cK, cL, cM)
456+func cF (cv,cw) = {
457+ let cB = bm()
458+ let cC = bn()
459+ let cG = bo()
460+ let cH = bp()
461+ let cI = aN(cw, cG)
462+ let bc = cA(cB, cC)
463+ let cJ = if (cv)
464+ then (cB + cI)
465+ else (cB - cI)
466+ let cK = toInt(aQ(bc, toBigInt(cJ)))
467+ let cL = aS((cK - cC))
468+ let cM = if (cv)
469+ then cL
470+ else -(cL)
471+ let cN = cu(cv, cI, cL)
472+ let cO = cN._1
473+ let cP = cN._2
474+ let cQ = cN._3
475+ let cR = aN(aP(cB, cG), aP(cC, cH))
476+ let cS = aN(cw, cL)
477+ let cT = aS((cR - cS))
478+ let cU = (aE - aN(cR, (cR + cT)))
479+ let cV = bC()
480+ if ((cU > cV))
481+ then throw(((((((((((((("Price impact " + toString(cU)) + " > max price impact ") + toString(cV)) + " before quote asset: ") + toString(cB)) + " before base asset: ") + toString(cC)) + " quote asset amount to exchange: ") + toString(cw)) + " price before: ") + toString(cR)) + " marketPrice: ") + toString(cS)))
482+ else $Tuple4(cM, cO, cP, cQ)
474483 }
475484
476485
477-func cS (cT,cU) = {
478- let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479- let cW = aK(aM(aM(cT, cV), bh()), aE)
480- cW
486+func cW (cX,cY) = {
487+ let cZ = ((((bN() - cY) / 1000) / 60) * aE)
488+ let da = aN(aP(aP(cX, cZ), bk()), aF)
489+ da
481490 }
482491
483492
484-func cX (cY,cT,cZ,cU,da) = {
485- let db = if ((cY != 0))
493+func db (dc,cX,dd,cY,de) = {
494+ let df = if ((dc != 0))
486495 then {
487- let dc = bR(cY)
488- aM((dc - cZ), cY)
496+ let dg = bV(dc)
497+ aP((dg - dd), dc)
489498 }
490499 else 0
491- let cW = cS(cT, cU)
492- let dd = (((da - cW) - db) + cT)
493- let de = if ((0 > dd))
494- then $Tuple2(0, aP(dd))
495- else $Tuple2(aP(dd), 0)
496- let df = de._1
497- let dg = de._2
498- $Tuple4(df, dg, db, cW)
500+ let da = cW(cX, cY)
501+ let dh = (((de - da) - df) + cX)
502+ let di = if ((0 > dh))
503+ then $Tuple2(0, aS(dh))
504+ else $Tuple2(aS(dh), 0)
505+ let dj = di._1
506+ let dk = di._2
507+ $Tuple4(dj, dk, df, da)
499508 }
500509
501510
502-func dh (cr,ct,di,dj,dk,dl,dm) = {
503- let cN = aK(aM(dj, dk), aM(dl, dm))
504- if ((ct == 0))
511+func dl (cv,cx,dm,dn,do,dp,dq) = {
512+ let cR = aN(aP(dn, do), aP(dp, dq))
513+ if ((cx == 0))
505514 then throw("Invalid base asset amount")
506515 else {
507- let aZ = cw(dj, dl)
508- let dn = if (cr)
509- then (dl + ct)
510- else (dl - ct)
511- let do = toInt(aN(aZ, toBigInt(dn)))
512- let dp = aP((do - dj))
513- let dq = aM(dp, dk)
514- let cR = bz()
515- let dr = cq(!(cr), dp, ct)
516- let cK = dr._1
517- let cL = dr._2
518- let cM = dr._3
519- let cO = aK(dq, ct)
520- let cP = aP((cN - cO))
521- let cQ = (aD - aK(cN, (cN + cP)))
522- if (if ((cQ > cR))
523- then di
516+ let bc = cA(dn, dp)
517+ let dr = if (cv)
518+ then (dp + cx)
519+ else (dp - cx)
520+ let ds = toInt(aQ(bc, toBigInt(dr)))
521+ let dt = aS((ds - dn))
522+ let du = aP(dt, do)
523+ let cV = bC()
524+ let dv = cu(!(cv), dt, cx)
525+ let cO = dv._1
526+ let cP = dv._2
527+ let cQ = dv._3
528+ let cS = aN(du, cx)
529+ let cT = aS((cR - cS))
530+ let cU = (aE - aN(cR, (cR + cT)))
531+ if (if ((cU > cV))
532+ then dm
524533 else false)
525- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526- else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527- then aP(ct)
528- else 0)), (bE() - (if (!(cr))
529- then aP(ct)
530- else 0)), cQ)
534+ then throw(((((((((((((("Price impact " + toString(cU)) + " > max price impact ") + toString(cV)) + " before quote asset: ") + toString(dn)) + " before base asset: ") + toString(dp)) + " base asset amount to exchange: ") + toString(cx)) + " price before: ") + toString(cR)) + " market price: ") + toString(cS)))
535+ else $Tuple7(du, cO, cP, cQ, (bI() - (if (cv)
536+ then aS(cx)
537+ else 0)), (bH() - (if (!(cv))
538+ then aS(cx)
539+ else 0)), cU)
531540 }
532541 }
533542
534543
535-func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
544+func dw (cv,cx,dm) = dl(cv, cx, dm, bm(), bo(), bn(), bp())
536545
537546
538-func dt (du,ck,cl) = {
539- let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540- if ((cl != ""))
547+func dx (dy,co,cp) = {
548+ let dz = valueOrErrorMessage(getInteger(dy, co), ((("Can not get oracle price. Oracle: " + toString(dy)) + " key: ") + co))
549+ if ((cp != ""))
541550 then {
542- let dw = lastBlock.height
543- let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544- if (((dw - dx) > bI()))
545- then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546- else dv
551+ let dA = lastBlock.height
552+ let dB = valueOrErrorMessage(getInteger(dy, cp), ((("Can not get oracle block. Oracle: " + toString(dy)) + " key: ") + cp))
553+ if (((dA - dB) > bL()))
554+ then throw(((("Oracle stale data. Last oracle block: " + toString(dB)) + " current block: ") + toString(dA)))
555+ else dz
547556 }
548- else dv
557+ else dz
549558 }
550559
551560
552-func dy () = {
553- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554- let dA = dt(dz._1, dz._2, dz._3)
555- let dB = cf(b)
556- let dC = if (isDefined(dB))
561+func dC () = {
562+ let dD = valueOrErrorMessage(cj(a), "No base asset oracle data")
563+ let dE = dx(dD._1, dD._2, dD._3)
564+ let dF = cj(b)
565+ let dG = if (isDefined(dF))
557566 then {
558- let dD = value(dB)
559- dt(dD._1, dD._2, dD._3)
567+ let dH = value(dF)
568+ dx(dH._1, dH._2, dH._3)
560569 }
561- else aD
562- aK(dA, dC)
570+ else aE
571+ aN(dE, dG)
563572 }
564573
565574
566-func dE () = {
567- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568- let du = dz._1
569- let cm = dz._4
570- if ((cm != ""))
575+func dI () = {
576+ let dD = valueOrErrorMessage(cj(a), "No base asset oracle data")
577+ let dy = dD._1
578+ let cq = dD._4
579+ if ((cq != ""))
571580 then {
572- let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573- !(dF)
581+ let dJ = valueOrErrorMessage(getBoolean(dy, cq), ((("Can not get oracle is open/closed. Oracle: " + toString(dy)) + " key: ") + cq))
582+ !(dJ)
574583 }
575584 else false
576585 }
577586
578587
579-func dG (dH,dj,dl,cC,cD) = {
580- let dI = aK(aM(dj, cC), aM(dl, cD))
581- let dJ = aK((dH + dI), (2 * aD))
582- let dG = aK(aP((dH - dI)), dJ)
583- dG
588+func dK (dL,dn,dp,cG,cH) = {
589+ let dM = aN(aP(dn, cG), aP(dp, cH))
590+ let dN = aN((dL + dM), (2 * aE))
591+ let dK = aN(aS((dL - dM)), dN)
592+ dK
584593 }
585594
586595
587-func dK (dj,dl) = {
588- let dL = dy()
589- let cC = bl()
590- let cD = bm()
591- let dM = dG(dL, bj(), bk(), cC, cD)
592- let dN = dG(dL, dj, dl, cC, cD)
593- if (if ((dN > bA()))
594- then (dN > dM)
596+func dO (dn,dp) = {
597+ let dP = dC()
598+ let cG = bo()
599+ let cH = bp()
600+ let dQ = dK(dP, bm(), bn(), cG, cH)
601+ let dR = dK(dP, dn, dp, cG, cH)
602+ if (if ((dR > bD()))
603+ then (dR > dQ)
595604 else false)
596- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
605+ then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bD())))
597606 else true
598607 }
599608
600609
601-func dO (dP,dQ) = {
602- let dR = bB()
603- if ((dP > dR))
604- then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605- else if ((dQ > dR))
606- then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
610+func dS (dT,dU) = {
611+ let dV = bE()
612+ if ((dT > dV))
613+ then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
614+ else if ((dU > dV))
615+ then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
607616 else true
608617 }
609618
610619
611-func dS () = {
612- let dj = bj()
613- let dl = bk()
614- let cC = bl()
615- let cD = bm()
616- aK(aM(dj, cC), aM(dl, cD))
620+func dW () = {
621+ let dn = bm()
622+ let dp = bn()
623+ let cG = bo()
624+ let cH = bp()
625+ aN(aP(dn, cG), aP(dp, cH))
617626 }
618627
619628
620-func dT () = {
621- let dL = dy()
622- let dU = dS()
623- (aK(aP((dL - dU)), dL) > by())
629+func dX () = {
630+ let dP = dC()
631+ let dY = dW()
632+ (aN(aS((dP - dY)), dP) > bB())
624633 }
625634
626635
627-func dV (bS,dW,dj,dk,dl,dm) = {
628- let dX = aP(bS)
629- let dY = (0 > bS)
630- let dZ = if ((dW == aG))
636+func dZ (bW,ea,dn,do,dp,dq) = {
637+ let eb = aS(bW)
638+ let ec = (0 > bW)
639+ let ed = if ((ea == aH))
631640 then {
632- let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633- ea
641+ let ee = dl(!(ec), eb, false, dn, do, dp, dq)._1
642+ ee
634643 }
635- else aM(dX, dy())
636- dZ
644+ else aP(eb, dC())
645+ ed
637646 }
638647
639648
640-func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
649+func ef (bW,eg,dn,do,dp,dq,ea) = if ((bW == 0))
641650 then throw("Invalid position size")
642651 else {
643- let dY = (0 > bS)
644- let dZ = dV(bS, dW, dj, dk, dl, dm)
645- let ed = if (dY)
646- then (ec - dZ)
647- else (dZ - ec)
648- $Tuple2(dZ, ed)
652+ let ec = (0 > bW)
653+ let ed = dZ(bW, ea, dn, do, dp, dq)
654+ let eh = if (ec)
655+ then (eg - ed)
656+ else (ed - eg)
657+ $Tuple2(ed, eh)
649658 }
650659
651660
652-func ee (bU,dW) = {
653- let ef = bT(bU)
654- let bX = ef._1
655- let eg = ef._2
656- let eh = ef._3
657- let ei = ef._4
658- eb(bX, eh, bj(), bl(), bk(), bm(), dW)
661+func ei (bY,ea) = {
662+ let ej = bX(bY)
663+ let cb = ej._1
664+ let ek = ej._2
665+ let el = ej._3
666+ let em = ej._4
667+ ef(cb, el, bm(), bo(), bn(), bp(), ea)
659668 }
660669
661670
662-func ej (ek,el,em) = aK((ek - el), em)
671+func en (eo,ep,eq) = aN((eo - ep), eq)
663672
664673
665-func en (bU,dW) = {
666- let eo = bT(bU)
667- let bX = eo._1
668- let eg = eo._2
669- let ep = eo._3
670- let eq = eo._4
671- let er = eo._5
672- let es = ee(bU, dW)
673- let dZ = es._1
674- let ed = es._2
675- let et = cX(bX, eg, eq, er, ed)
676- let df = et._1
677- let dg = et._2
678- ej(df, dg, dZ)
674+func er (bY,ea) = {
675+ let es = bX(bY)
676+ let cb = es._1
677+ let ek = es._2
678+ let et = es._3
679+ let eu = es._4
680+ let ev = es._5
681+ let ew = ei(bY, ea)
682+ let ed = ew._1
683+ let eh = ew._2
684+ let ex = db(cb, ek, eu, ev, eh)
685+ let dj = ex._1
686+ let dk = ex._2
687+ en(dj, dk, ed)
679688 }
680689
681690
682-func eu (bU) = en(bU, aG)
691+func ey (bY) = er(bY, aH)
683692
684693
685-func ev (bU,bS) = {
686- let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687- let ex = aM(aP(bS), ew)
688- let ey = ds((bS > 0), ex, false)
689- let ez = ey._1
690- let cQ = ey._7
691- if ((bz() > cQ))
692- then ex
693- else aM(aP(bS), bx())
694+func ez (bY,bW) = {
695+ let eA = aT(bA(), (aE - aN(ey(bY), by())))
696+ let eB = aP(aS(bW), eA)
697+ let eC = dw((bW > 0), eB, false)
698+ let eD = eC._1
699+ let cU = eC._7
700+ if ((bC() > cU))
701+ then eB
702+ else aP(aS(bW), bA())
694703 }
695704
696705
697-func eA (bU,eB,eC,eD,eE,di,eF) = {
698- let eG = bT(bU)
699- let eH = eG._1
700- let eI = eG._2
701- let eJ = eG._3
702- let eK = eG._4
703- let eL = eG._5
704- let eM = (eH > 0)
705- let eN = aP(eH)
706- if (if ((eN >= eB))
707- then (eB > 0)
706+func eE (bY,eF,eG,eH,eI,dm,eJ) = {
707+ let eK = bX(bY)
708+ let eL = eK._1
709+ let eM = eK._2
710+ let eN = eK._3
711+ let eO = eK._4
712+ let eP = eK._5
713+ let eQ = (eL > 0)
714+ let eR = aS(eL)
715+ if (if ((eR >= eF))
716+ then (eF > 0)
708717 else false)
709718 then {
710- let eO = (eN > eB)
711- let eP = ds((eH > 0), eB, di)
712- let eQ = eP._1
713- let cF = eP._2
714- let cG = eP._3
715- let eR = eP._4
716- let eS = if ((eH > 0))
717- then -(eB)
718- else eB
719- let eT = ee(bU, aG)
719+ let eS = (eR > eF)
720+ let eT = dw((eL > 0), eF, dm)
720721 let eU = eT._1
721- let ed = eT._2
722- let eV = aK(aP(eS), eN)
723- let eW = aM(ed, eV)
724- let eX = cX(eH, eI, eK, eL, ed)
722+ let cJ = eT._2
723+ let cK = eT._3
724+ let eV = eT._4
725+ let eW = if ((eL > 0))
726+ then -(eF)
727+ else eF
728+ let eX = ei(bY, aH)
725729 let eY = eX._1
726- let eZ = eX._2
727- let fa = eX._3
728- let cW = eX._4
729- let fb = cX(eH, eI, eK, eL, eW)._2
730- let fc = aM(aM(eU, eV), eC)
731- let fd = (ed - eW)
732- let fe = if ((eH > 0))
733- then ((eU - eQ) - fd)
734- else ((fd + eU) - eQ)
735- let ff = (eH + eS)
736- let fg = if ((ff == 0))
730+ let eh = eX._2
731+ let eZ = aN(aS(eW), eR)
732+ let fa = aP(eh, eZ)
733+ let fb = db(eL, eM, eO, eP, eh)
734+ let fc = fb._1
735+ let fd = fb._2
736+ let fe = fb._3
737+ let da = fb._4
738+ let ff = db(eL, eM, eO, eP, fa)._2
739+ let fg = aP(aP(eY, eZ), eG)
740+ let fh = (eh - fa)
741+ let fi = if ((eL > 0))
742+ then ((eY - eU) - fh)
743+ else ((fh + eY) - eU)
744+ let fj = (eL + eW)
745+ let fk = if ((fj == 0))
737746 then $Tuple2(0, 0)
738- else $Tuple2(aP(fe), bR(ff))
739- let fh = fg._1
740- let fi = fg._2
741- let fj = (eJ - fh)
742- let fk = en(bU, aG)
743- let fl = if ((eH > 0))
744- then (aM((fh + fd), fk) - fd)
745- else (aM((fh - fd), fk) - fd)
746- let fm = ((eY - (fl + fd)) - fc)
747- let fn = if ((0 > fm))
748- then if (eF)
747+ else $Tuple2(aS(fi), bV(fj))
748+ let fl = fk._1
749+ let fm = fk._2
750+ let fn = (eN - fl)
751+ let fo = er(bY, aH)
752+ let fp = if ((eL > 0))
753+ then (aP((fl + fh), fo) - fh)
754+ else (aP((fl - fh), fo) - fh)
755+ let fq = ((fc - (fp + fh)) - fg)
756+ let fr = if ((0 > fq))
757+ then if (eJ)
749758 then 0
750759 else throw("Invalid internalClosePosition params: unable to pay fee")
751- else fm
752- let fo = if (eE)
753- then (fl + fn)
754- else fl
755- if (if ((eD != 0))
756- then (eD > eQ)
760+ else fq
761+ let fs = if (eI)
762+ then (fp + fr)
763+ else fp
764+ if (if ((eH != 0))
765+ then (eH > eU)
757766 else false)
758- then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759- else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760- then eO
767+ then throw(((("Limit error: " + toString(eU)) + " < ") + toString(eH)))
768+ else $Tuple17(fj, fs, fl, fm, ff, fa, if (if (eI)
769+ then eS
761770 else false)
762771 then 0
763- else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764- then aP(eS)
765- else 0)), (bE() - (if (!(eM))
766- then aP(eS)
767- else 0)), (bq() - (if (eM)
768- then fj
769- else 0)), (bp() - (if (!(eM))
770- then fj
771- else 0)), (fc + cW), eQ)
772+ else fr, cJ, cK, eV, (br() - fn), (bI() - (if (eQ)
773+ then aS(eW)
774+ else 0)), (bH() - (if (!(eQ))
775+ then aS(eW)
776+ else 0)), (bt() - (if (eQ)
777+ then fn
778+ else 0)), (bs() - (if (!(eQ))
779+ then fn
780+ else 0)), (fg + da), eU)
772781 }
773- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
782+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eF)) + " max: ") + toString(eR)))
774783 }
775784
776785
777-func fp () = {
778- let fq = ((bJ() / 1000) / 60)
779- let fr = (fq - aA)
780- let fs = valueOrElse(getString(this, C), "")
781- let ft = split(fs, ",")
782- func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783- then (fv :+ parseIntValue(fw))
784- else fv
786+func ft () = {
787+ let fu = ((bN() / 1000) / 60)
788+ let fv = (fu - aB)
789+ let fw = valueOrElse(getString(this, D), "")
790+ let fx = split(fw, ",")
791+ func fy (fz,fA) = if ((fv >= valueOrErrorMessage(parseInt(fA), ("getTwapSpotPrice: invalid int: " + fw))))
792+ then (fz :+ parseIntValue(fA))
793+ else fz
785794
786- let fx = {
787- let fy = ft
788- let fz = size(fy)
789- let fA = nil
790- func fB (fC,fD) = if ((fD >= fz))
791- then fC
792- else fu(fC, fy[fD])
795+ let fB = {
796+ let fC = fx
797+ let fD = size(fC)
798+ let fE = nil
799+ func fF (fG,fH) = if ((fH >= fD))
800+ then fG
801+ else fy(fG, fC[fH])
793802
794- func fE (fC,fD) = if ((fD >= fz))
795- then fC
803+ func fI (fG,fH) = if ((fH >= fD))
804+ then fG
796805 else throw("List size exceeds 20")
797806
798- fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
807+ fI(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fE, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
799808 }
800- let fF = if ((size(fx) > 0))
801- then max(fx)
802- else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803- let fG = valueOrElse(getInteger(this, D), 0)
804- let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805- let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806- let fJ = (fH + ((fq - fG) * fI))
807- let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808- let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809- let fM = (fK + ((fr - fF) * fL))
810- ((fJ - fM) / aA)
809+ let fJ = if ((size(fB) > 0))
810+ then max(fB)
811+ else valueOrErrorMessage(parseInt(fx[0]), ("getTwapSpotPrice: invalid int: " + fw))
812+ let fK = valueOrElse(getInteger(this, E), 0)
813+ let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fK))), 0)
814+ let fM = valueOrElse(getInteger(this, ((G + "_") + toString(fK))), 0)
815+ let fN = (fL + ((fu - fK) * fM))
816+ let fO = valueOrElse(getInteger(this, ((F + "_") + toString(fJ))), 0)
817+ let fP = valueOrElse(getInteger(this, ((G + "_") + toString(fJ))), 0)
818+ let fQ = (fO + ((fv - fJ) * fP))
819+ ((fN - fQ) / aB)
811820 }
812821
813822
814-func fN () = {
815- let bS = bn()
816- if ((bS == 0))
817- then $Tuple2(bj(), bk())
823+func fR () = {
824+ let bW = bq()
825+ if ((bW == 0))
826+ then $Tuple2(bm(), bn())
818827 else {
819- let fO = (bS > 0)
820- let fP = ds(fO, aP(bS), false)
821- let fQ = fP._1
822- let fR = fP._2
823- let fS = fP._3
824- $Tuple2(fR, fS)
828+ let fS = (bW > 0)
829+ let fT = dw(fS, aS(bW), false)
830+ let fU = fT._1
831+ let fV = fT._2
832+ let fW = fT._3
833+ $Tuple2(fV, fW)
825834 }
826835 }
827836
828837
829-func fT (fU,bn,fV,fW) = {
830- let fX = toBigInt(fU)
831- let fY = toBigInt(bn)
832- let fZ = toBigInt(fV)
833- let ga = toBigInt(fW)
834- let aZ = aO(fZ, fX)
835- let gb = (fX + fY)
836- let gc = aN(aZ, gb)
837- let gd = aN(gc, gb)
838- let ge = aN(ga, gd)
839- toInt(ge)
838+func fX (fY,bq,fZ,ga) = {
839+ let gb = toBigInt(fY)
840+ let gc = toBigInt(bq)
841+ let gd = toBigInt(fZ)
842+ let ge = toBigInt(ga)
843+ let bc = aR(gd, gb)
844+ let gf = (gb + gc)
845+ let gg = aQ(bc, gf)
846+ let gh = aQ(gg, gf)
847+ let gi = aQ(ge, gh)
848+ toInt(gi)
840849 }
841850
842851
843-func gf (gg,cx,cy) = {
844- let bS = bn()
845- if ((bS == 0))
852+func gj (gk,cB,cC) = {
853+ let bW = bq()
854+ if ((bW == 0))
846855 then {
847- let gh = aK(aM(gg, cy), cx)
848- $Tuple3(gh, aD, 0)
856+ let gl = aN(aP(gk, cC), cB)
857+ $Tuple3(gl, aE, 0)
849858 }
850859 else {
851- let fO = (bS > 0)
852- let fQ = ds(fO, aP(bS), false)._1
853- let gh = fT(cy, bS, cx, gg)
854- let gi = aD
855- let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856- $Tuple3(gh, gi, gj)
860+ let fS = (bW > 0)
861+ let fU = dw(fS, aS(bW), false)._1
862+ let gl = fX(cC, bW, cB, gk)
863+ let gm = aE
864+ let gn = ef(bW, fU, cB, gl, cC, gm, aH)._2
865+ $Tuple3(gl, gm, gn)
857866 }
858867 }
859868
860869
861-func gk () = {
862- let gl = dy()
863- let gm = fp()
864- let gn = (gm - gl)
865- if (if (if ((bE() == 0))
870+func go () = {
871+ let gp = dC()
872+ let gq = ft()
873+ let gr = (gq - gp)
874+ if (if (if ((bH() == 0))
866875 then true
867- else (bF() == 0))
876+ else (bI() == 0))
868877 then true
869- else dE())
870- then $Tuple2(0, 0)
871- else if ((0 > gn))
878+ else dI())
879+ then $Tuple3(0, 0, 0)
880+ else if ((0 > gr))
872881 then {
873- let go = aK(aM(gn, bt()), aF)
874- let gp = aK(aM(go, bE()), bF())
875- $Tuple2(go, gp)
882+ let gs = aN(aP(gr, bw()), aG)
883+ if ((bM() == aJ))
884+ then {
885+ let gt = aN(aP(gs, bH()), bI())
886+ $Tuple3(gs, gt, 0)
887+ }
888+ else {
889+ let gu = aS(aP(gs, bH()))
890+ let gv = aS(aP(gs, bI()))
891+ let gw = (gu - gv)
892+ $Tuple3(gs, gs, gw)
893+ }
876894 }
877895 else {
878- let gp = aK(aM(gn, bt()), aF)
879- let go = aK(aM(gp, bF()), bE())
880- $Tuple2(go, gp)
896+ let gt = aN(aP(gr, bw()), aG)
897+ if ((bM() == aJ))
898+ then {
899+ let gs = aN(aP(gt, bI()), bH())
900+ $Tuple3(gs, gt, 0)
901+ }
902+ else {
903+ let gv = aS(aP(gt, bI()))
904+ let gu = aS(aP(gt, bH()))
905+ let gw = (gv - gu)
906+ $Tuple3(gt, gt, gw)
907+ }
881908 }
882909 }
883910
884911
885-func gq (gr,gs) = {
886- let gt = bg()
887- let gu = aM(gt, gs)
888- let gv = if ((gr != ""))
912+func gx (gy,gz) = {
913+ let gA = bj()
914+ let gB = aP(gA, gz)
915+ let gC = if ((gy != ""))
889916 then {
890- let gw = bc(au(), ai(aw, gr))
891- if ((gw == ax))
917+ let gD = bf(av(), aj(ax, gy))
918+ if ((gD == ay))
892919 then {
893- let gx = be(au(), ai(av, gr))
894- let gy = aM(gu, gx)
895- $Tuple2(gy, true)
920+ let gE = bh(av(), aj(aw, gy))
921+ let gF = aP(gB, gE)
922+ $Tuple2(gF, true)
896923 }
897924 else throw("Invalid attached artifact")
898925 }
899- else $Tuple2(gu, false)
900- let gy = gv._1
901- let gz = gv._2
902- $Tuple2(gy, gz)
926+ else $Tuple2(gB, false)
927+ let gF = gC._1
928+ let gG = gC._2
929+ $Tuple2(gF, gG)
903930 }
904931
905932
906-func gA (bU,gB) = {
907- let eH = bT(bU)._1
908- if ((eH == 0))
933+func gH (bY,gI) = {
934+ let eL = bX(bY)._1
935+ if ((eL == 0))
909936 then true
910- else (bY(bU) == gB)
937+ else (cc(bY) == gI)
911938 }
912939
913940
914-func gC (bU,gB) = (bY(bU) == gB)
941+func gJ (bY,gI) = (cc(bY) == gI)
915942
916943
917-func gD (bU,gr) = {
918- let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919- if ((gE == gE))
944+func gK (bY,gy) = {
945+ let gL = invoke(as(), "computeFeeDiscount", [bY], nil)
946+ if ((gL == gL))
920947 then {
921- let gF = {
922- let bW = gE
923- if ($isInstanceOf(bW, "Int"))
948+ let gM = {
949+ let ca = gL
950+ if ($isInstanceOf(ca, "Int"))
924951 then {
925- let gG = bW
926- gG
952+ let gN = ca
953+ gN
927954 }
928955 else throw("Invalid computeFeeDiscount result")
929956 }
930- let gH = gq(gr, gF)
931- let gy = gH._1
932- let gz = gH._2
933- $Tuple2(gy, gz)
957+ let gO = gx(gy, gM)
958+ let gF = gO._1
959+ let gG = gO._2
960+ $Tuple2(gF, gG)
934961 }
935962 else throw("Strict value is not equal to itself.")
936963 }
937964
938965
939-func gI (bL) = {
940- let gJ = if ((size(bL.payments) > 1))
941- then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
966+func gP (bP) = {
967+ let gQ = if ((size(bP.payments) > 1))
968+ then toBase58String(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifactId"))
942969 else ""
943- gJ
970+ gQ
944971 }
945972
946973
947-func gK (gL) = {
948- let gM = aM(gL, bH())
949- let gN = (gL - gM)
950- $Tuple2(gM, gN)
974+func gR (gS) = {
975+ let gT = aP(gS, bK())
976+ let gU = (gS - gT)
977+ $Tuple2(gT, gU)
951978 }
952979
953980
954-func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
981+func gV (gW,gX,gY,gZ,eG,ha,hb,hc,hd,dV,he,hf,hg,hh) = [IntegerEntry(s, gW), IntegerEntry(t, gX), IntegerEntry(u, gY), IntegerEntry(r, gZ), IntegerEntry(p, eG), IntegerEntry(w, ha), IntegerEntry(x, hb), IntegerEntry(v, hc), IntegerEntry(y, hd), IntegerEntry(z, dV), IntegerEntry(A, he), IntegerEntry(B, he), IntegerEntry(q, hg), IntegerEntry(C, hh)]
955982
956983
957-func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
984+func hi (hj,hk,hl,hm,hn) = [IntegerEntry(K, hj), IntegerEntry(I, hk), IntegerEntry(J, hl), IntegerEntry(L, hm), IntegerEntry(M, hn)]
958985
959986
960-func hg (hh,ak) = if (hh)
987+func ho (hp,al) = if (hp)
961988 then {
962- let hi = bG()
963-[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
989+ let hq = bJ()
990+[IntegerEntry(aj(i, al), (hq + 1)), IntegerEntry(d, (hq + 1))]
964991 }
965992 else nil
966993
967994
968-func hj (hh,ak,eC) = if (hh)
969- then [IntegerEntry(ai(k, ak), eC)]
995+func hr (hp,al,eG) = if (hp)
996+ then [IntegerEntry(aj(k, al), eG)]
970997 else nil
971998
972999
973-func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
1000+func hs (al,eF,ht,hu,dg,hv) = [IntegerEntry(aj(e, al), eF), IntegerEntry(aj(f, al), ht), IntegerEntry(aj(g, al), hu), IntegerEntry(aj(h, al), dg), IntegerEntry(aj(l, al), hv)]
9741001
9751002
976-func ho (hp) = {
977- let fq = ((bJ() / 1000) / 60)
978- let hq = valueOrElse(getInteger(this, D), 0)
979- if ((hq > fq))
1003+func hw (hx) = {
1004+ let fu = ((bN() / 1000) / 60)
1005+ let hy = valueOrElse(getInteger(this, E), 0)
1006+ if ((hy > fu))
9801007 then throw("TWAP out-of-order")
9811008 else {
982- let fG = if ((hq == 0))
983- then fq
984- else hq
985- if ((fq > hq))
1009+ let fK = if ((hy == 0))
1010+ then fu
1011+ else hy
1012+ if ((fu > hy))
9861013 then {
987- let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988- let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989- let ht = (hr + ((fq - fG) * hs))
990- let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
1014+ let hz = valueOrElse(getInteger(this, ((F + "_") + toString(hy))), 0)
1015+ let hA = valueOrElse(getInteger(this, ((G + "_") + toString(hy))), hx)
1016+ let hB = (hz + ((fu - fK) * hA))
1017+ let fx = aY(aW(valueOrElse(getString(this, D), "")), aB, toString(fu))
1018+[IntegerEntry(aj(F, toString(fu)), hB), IntegerEntry(aj(G, toString(fu)), hx), IntegerEntry(aj(H, toString(fu)), hy), IntegerEntry(E, fu), StringEntry(D, aU(fx))]
9921019 }
9931020 else {
994- let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995- let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996- let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997- let ht = (hr + ((fq - hu) * hs))
998-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
1021+ let hC = valueOrElse(getInteger(this, aj(H, toString(fu))), 0)
1022+ let hz = valueOrElse(getInteger(this, aj(F, toString(hC))), 0)
1023+ let hA = valueOrElse(getInteger(this, aj(G, toString(hC))), hx)
1024+ let hB = (hz + ((fu - hC) * hA))
1025+[IntegerEntry(aj(F, toString(fu)), hB), IntegerEntry(aj(G, toString(fu)), hx)]
9991026 }
10001027 }
10011028 }
10021029
10031030
1004-func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
1031+func hD (cB,cC) = [IntegerEntry(N, cB), IntegerEntry(O, cC)]
10051032
10061033
1007-func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
1034+func hE (cG,cH) = [IntegerEntry(P, cG), IntegerEntry(Q, cH)]
10081035
10091036
1010-func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011- let cC = bl()
1012- let cD = bm()
1013- if (((hA - hB) != hy))
1014- then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015- else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
1037+func hF (cB,cC,hG,hH,hI,hJ,hK,hL) = {
1038+ let cG = bo()
1039+ let cH = bp()
1040+ if (((hI - hJ) != hG))
1041+ then throw(((((("Invalid AMM state data: " + toString(hI)) + " + ") + toString(hJ)) + " != ") + toString(hG)))
1042+ else ((hD(cB, cC) ++ [IntegerEntry(R, hG), IntegerEntry(U, hH), IntegerEntry(S, hI), IntegerEntry(T, hJ), IntegerEntry(W, hK), IntegerEntry(V, hL)]) ++ hw(aN(aP(cB, cG), aP(cC, cH))))
10161043 }
10171044
10181045
1019-func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
1046+func hM (al) = [DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(k, al)), DeleteEntry(aj(l, al))]
10201047
10211048
1022-func hF (ak,hG) = {
1023- let hH = assetBalance(this, an())
1024- if ((hG > hH))
1025- then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026- else [ScriptTransfer(ak, hG, an())]
1049+func hN (al,hO) = {
1050+ let hP = assetBalance(this, ao())
1051+ if ((hO > hP))
1052+ then throw(((("Unable to withdraw " + toString(hO)) + " from contract balance ") + toString(hP)))
1053+ else [ScriptTransfer(al, hO, ao())]
10271054 }
10281055
10291056
1030-func hI (bL) = if ((0 > bL))
1057+func hQ (bP) = if ((0 > bP))
10311058 then throw("Balance")
1032- else [IntegerEntry(c, bL)]
1059+ else [IntegerEntry(c, bP)]
10331060
10341061
1035-func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
1062+func hR (bP) = [ScriptTransfer(aq(), bP, ao())]
10361063
10371064
1038-func hK (hL,bL) = if (hL)
1039- then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
1065+func hS (hT,bP) = if (hT)
1066+ then [Burn(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifact"), 1)]
10401067 else nil
10411068
10421069
1043-@Callable(bL)
1044-func pause () = if ((bL.caller != am()))
1070+@Callable(bP)
1071+func pause () = if ((bP.caller != an()))
10451072 then throw("Invalid pause params")
10461073 else [BooleanEntry(n, true)]
10471074
10481075
10491076
1050-@Callable(bL)
1051-func unpause () = if ((bL.caller != am()))
1077+@Callable(bP)
1078+func unpause () = if ((bP.caller != an()))
10521079 then throw("Invalid unpause params")
10531080 else [BooleanEntry(n, false)]
10541081
10551082
10561083
1057-@Callable(bL)
1058-func setCloseOnly () = if ((bL.caller != am()))
1084+@Callable(bP)
1085+func setCloseOnly () = if ((bP.caller != an()))
10591086 then throw("Invalid setCloseOnly params")
10601087 else [BooleanEntry(o, true)]
10611088
10621089
10631090
1064-@Callable(bL)
1065-func unsetCloseOnly () = if ((bL.caller != am()))
1091+@Callable(bP)
1092+func unsetCloseOnly () = if ((bP.caller != an()))
10661093 then throw("Invalid unsetCloseOnly params")
10671094 else [BooleanEntry(o, false)]
10681095
10691096
10701097
1071-@Callable(bL)
1072-func addLiquidity (cs) = if (if ((bL.caller != am()))
1098+@Callable(bP)
1099+func addLiquidity (cw) = if (if ((bP.caller != an()))
10731100 then true
1074- else (0 >= cs))
1101+ else (0 >= cw))
10751102 then throw("Invalid addLiquidity params")
10761103 else {
1077- let cx = bj()
1078- let cy = bk()
1079- let cC = bl()
1080- let cD = bm()
1081- let hM = aK(aM(cx, cC), aM(cy, cD))
1082- let hN = (cx + cs)
1083- let hO = (aK(aM(hN, cC), hM) - cy)
1084- let hP = (cy + hO)
1085- let hQ = gf(dy(), hN, hP)
1086- let hR = hQ._1
1087- let hS = hQ._2
1088- let gj = hQ._3
1089- let hT = if ((gj != 0))
1104+ let cB = bm()
1105+ let cC = bn()
1106+ let cG = bo()
1107+ let cH = bp()
1108+ let hU = aN(aP(cB, cG), aP(cC, cH))
1109+ let hV = (cB + cw)
1110+ let hW = (aN(aP(hV, cG), hU) - cC)
1111+ let hX = (cC + hW)
1112+ let hY = gj(dC(), hV, hX)
1113+ let hZ = hY._1
1114+ let ia = hY._2
1115+ let gn = hY._3
1116+ let ib = if ((gn != 0))
10901117 then {
1091- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092- if ((hT == hT))
1118+ let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1119+ if ((ib == ib))
10931120 then nil
10941121 else throw("Strict value is not equal to itself.")
10951122 }
10961123 else nil
1097- if ((hT == hT))
1098- then (hv(hN, hP) ++ hw(hR, hS))
1124+ if ((ib == ib))
1125+ then (hD(hV, hX) ++ hE(hZ, ia))
10991126 else throw("Strict value is not equal to itself.")
11001127 }
11011128
11021129
11031130
1104-@Callable(bL)
1105-func removeLiquidity (cs) = if (if ((bL.caller != am()))
1131+@Callable(bP)
1132+func removeLiquidity (cw) = if (if ((bP.caller != an()))
11061133 then true
1107- else (cs >= 0))
1134+ else (cw >= 0))
11081135 then throw("Invalid removeLiquidity params")
11091136 else {
1110- let cx = bj()
1111- let cy = bk()
1112- let cC = bl()
1113- let cD = bm()
1114- let hM = aK(aM(cx, cC), aM(cy, cD))
1115- let hN = (cx - cs)
1116- let hU = aP((aK(aM(hN, cC), hM) - cy))
1117- let hP = (cy - hU)
1118- let hV = gf(dy(), hN, hP)
1119- let hR = hV._1
1120- let hS = hV._2
1121- let gj = hV._3
1122- let hT = if ((gj != 0))
1137+ let cB = bm()
1138+ let cC = bn()
1139+ let cG = bo()
1140+ let cH = bp()
1141+ let hU = aN(aP(cB, cG), aP(cC, cH))
1142+ let hV = (cB - cw)
1143+ let ic = aS((aN(aP(hV, cG), hU) - cC))
1144+ let hX = (cC - ic)
1145+ let id = gj(dC(), hV, hX)
1146+ let hZ = id._1
1147+ let ia = id._2
1148+ let gn = id._3
1149+ let ib = if ((gn != 0))
11231150 then {
1124- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125- if ((hT == hT))
1151+ let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1152+ if ((ib == ib))
11261153 then nil
11271154 else throw("Strict value is not equal to itself.")
11281155 }
11291156 else nil
1130- if ((hT == hT))
1131- then (hv(hN, hP) ++ hw(hR, hS))
1157+ if ((ib == ib))
1158+ then (hD(hV, hX) ++ hE(hZ, ia))
11321159 else throw("Strict value is not equal to itself.")
11331160 }
11341161
11351162
11361163
1137-@Callable(bL)
1138-func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
1164+@Callable(bP)
1165+func changeSettings (gW,gX,gY,gZ,eG,ha,hb,hc,hd,dV,he,hf,hg,hh) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gZ))
1166+ then true
1167+ else (0 >= gW))
1168+ then true
1169+ else (0 >= gX))
1170+ then true
1171+ else (0 >= gY))
1172+ then true
1173+ else (0 >= eG))
1174+ then true
1175+ else (0 >= ha))
1176+ then true
1177+ else (0 >= hb))
1178+ then true
1179+ else (0 >= hc))
1180+ then true
1181+ else (0 >= hd))
1182+ then true
1183+ else (0 >= dV))
1184+ then true
1185+ else (0 >= he))
1186+ then true
1187+ else (he > aE))
1188+ then true
1189+ else (0 >= hf))
1190+ then true
1191+ else (0 >= hg))
1192+ then true
1193+ else if ((hh != aK))
1194+ then (hh != aJ)
1195+ else false)
1196+ then true
1197+ else !(cr()))
1198+ then true
1199+ else (bP.caller != an()))
11391200 then throw("Invalid changeSettings params")
1140- else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
1201+ else gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg, hh)
11411202
11421203
11431204
1144-@Callable(bL)
1145-func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
1205+@Callable(bP)
1206+func initialize (cB,cC,gZ,gW,gX,gY,eG,ie,if,ig,ha,hb,hc,hd,dV,he,hf,hg,hh) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cB))
11461207 then true
1147- else (0 >= cy))
1208+ else (0 >= cC))
11481209 then true
1149- else (0 >= gS))
1150- then true
1151- else (0 >= gP))
1152- then true
1153- else (0 >= gQ))
1154- then true
1155- else (0 >= gR))
1156- then true
1157- else (0 >= eC))
1158- then true
1159- else (0 >= gT))
1160- then true
1161- else (0 >= gU))
1162- then true
1163- else (0 >= gV))
1210+ else (0 >= gZ))
11641211 then true
11651212 else (0 >= gW))
11661213 then true
1167- else (0 >= dR))
1168- then true
11691214 else (0 >= gX))
1170- then true
1171- else (gX > aD))
11721215 then true
11731216 else (0 >= gY))
11741217 then true
1175- else (0 >= gZ))
1218+ else (0 >= eG))
11761219 then true
1177- else cn())
1220+ else (0 >= ha))
11781221 then true
1179- else (bL.caller != this))
1222+ else (0 >= hb))
1223+ then true
1224+ else (0 >= hc))
1225+ then true
1226+ else (0 >= hd))
1227+ then true
1228+ else (0 >= dV))
1229+ then true
1230+ else (0 >= he))
1231+ then true
1232+ else (he > aE))
1233+ then true
1234+ else (0 >= hf))
1235+ then true
1236+ else (0 >= hg))
1237+ then true
1238+ else if ((hh != aK))
1239+ then (hh != aJ)
1240+ else false)
1241+ then true
1242+ else cr())
1243+ then true
1244+ else (bP.caller != this))
11801245 then throw("Invalid initialize parameters")
1181- else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
1246+ else ((((hF(cB, cC, 0, 0, 0, 0, 0, 0) ++ gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg, hh)) ++ hi((bN() + gZ), 0, 0, 0, 0)) ++ hQ(0)) ++ [BooleanEntry(m, true), StringEntry(a, ie), StringEntry(b, if), StringEntry(Y, toString(addressFromStringValue(ig)))])
11821247
11831248
11841249
1185-@Callable(bL)
1186-func increasePosition (hZ,ia,ib,ic) = {
1187- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188- if ((id == id))
1250+@Callable(bP)
1251+func increasePosition (ih,ii,ij,ik) = {
1252+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1253+ if ((il == il))
11891254 then {
1190- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191- if ((ie == ie))
1255+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1256+ if ((im == im))
11921257 then {
1193- let bU = bK(bL)
1194- let if = bL.payments[0].amount
1195- let gB = bL.payments[0].assetId
1196- let ig = toBase58String(value(gB))
1197- let ih = (gB == an())
1198- if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199- then (hZ != az)
1258+ let bY = bO(bP)
1259+ let in = bP.payments[0].amount
1260+ let gI = bP.payments[0].assetId
1261+ let io = toBase58String(value(gI))
1262+ let ip = (gI == ao())
1263+ if (if (if (if (if (if (if (if (if (if ((ih != az))
1264+ then (ih != aA)
12001265 else false)
12011266 then true
1202- else (0 >= if))
1267+ else (0 >= in))
12031268 then true
1204- else !(cn()))
1269+ else !(cr()))
12051270 then true
1206- else !(ih))
1271+ else !(ip))
12071272 then true
1208- else !(gA(bU, ig)))
1273+ else !(gH(bY, io)))
12091274 then true
1210- else !(bM(aK(aD, ia), bi(), true)))
1275+ else !(bQ(aN(aE, ii), bl(), true)))
12111276 then true
1212- else co())
1277+ else cs())
12131278 then true
1214- else cp())
1279+ else ct())
12151280 then true
1216- else dE())
1281+ else dI())
12171282 then throw("Invalid increasePosition parameters")
12181283 else {
1219- let ii = gD(bU, gI(bL))
1220- let gy = ii._1
1221- let gz = ii._2
1222- let hG = aK(if, (aM(gy, ia) + aD))
1223- let ij = (if - hG)
1224- let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225- if ((ik == ik))
1284+ let iq = gK(bY, gP(bP))
1285+ let gF = iq._1
1286+ let gG = iq._2
1287+ let hO = aN(in, (aP(gF, ii) + aE))
1288+ let ir = (in - hO)
1289+ let is = invoke(au(), "acceptPaymentWithLink", [bY, ik], [AttachedPayment(ao(), ir)])
1290+ if ((is == is))
12261291 then {
1227- let il = {
1228- let bW = ik
1229- if ($isInstanceOf(bW, "Int"))
1292+ let it = {
1293+ let ca = is
1294+ if ($isInstanceOf(ca, "Int"))
12301295 then {
1231- let gG = bW
1232- gG
1296+ let gN = ca
1297+ gN
12331298 }
12341299 else throw("Invalid referrerFee")
12351300 }
1236- let im = (ij - il)
1237- let in = bT(bU)
1238- let eH = in._1
1239- let eI = in._2
1240- let eJ = in._3
1241- let eK = in._4
1242- let eL = in._5
1243- let io = (eH == 0)
1244- let ip = if ((eH > 0))
1245- then (hZ == ay)
1246- else (hZ == az)
1247- let iq = if (!(io))
1248- then ip
1301+ let iu = (ir - it)
1302+ let iv = bX(bY)
1303+ let eL = iv._1
1304+ let eM = iv._2
1305+ let eN = iv._3
1306+ let eO = iv._4
1307+ let eP = iv._5
1308+ let iw = (eL == 0)
1309+ let ix = if ((eL > 0))
1310+ then (ih == az)
1311+ else (ih == aA)
1312+ let iy = if (!(iw))
1313+ then ix
12491314 else false
1250- let ir = (hZ == ay)
1251- let is = if (if (io)
1315+ let iz = (ih == az)
1316+ let iA = if (if (iw)
12521317 then true
1253- else iq)
1318+ else iy)
12541319 then {
1255- let it = aM(hG, ia)
1256- let iu = cB(ir, it)
1257- let cI = iu._1
1258- let cF = iu._2
1259- let cG = iu._3
1260- let eR = iu._4
1261- if (if ((ib != 0))
1262- then (ib > aP(cI))
1320+ let iB = aP(hO, ii)
1321+ let iC = cF(iz, iB)
1322+ let cM = iC._1
1323+ let cJ = iC._2
1324+ let cK = iC._3
1325+ let eV = iC._4
1326+ if (if ((ij != 0))
1327+ then (ij > aS(cM))
12631328 else false)
1264- then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1329+ then throw(((("Limit error: " + toString(aS(cM))) + " < ") + toString(ij)))
12651330 else {
1266- let ff = (eH + cI)
1267- let iv = (bq() + (if ((ff > 0))
1268- then it
1331+ let fj = (eL + cM)
1332+ let iD = (bt() + (if ((fj > 0))
1333+ then iB
12691334 else 0))
1270- let iw = (bp() + (if ((0 > ff))
1271- then it
1335+ let iE = (bs() + (if ((0 > fj))
1336+ then iB
12721337 else 0))
1273- let ix = cX(eH, eI, eK, eL, hG)
1274- let df = ix._1
1275- let eZ = ix._2
1276- let fa = ix._3
1277- let cW = ix._4
1278- if (!(dK(cF, cG)))
1338+ let iF = db(eL, eM, eO, eP, hO)
1339+ let dj = iF._1
1340+ let fd = iF._2
1341+ let fe = iF._3
1342+ let da = iF._4
1343+ if (!(dO(cJ, cK)))
12791344 then throw("Over max spread limit")
1280- else if (!(dO(iv, iw)))
1345+ else if (!(dS(iD, iE)))
12811346 then throw("Over max open notional")
1282- else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283- then aP(cI)
1284- else 0)), (bE() + (if ((0 > ff))
1285- then aP(cI)
1286- else 0)), iv, iw, cW)
1347+ else $Tuple14(fj, dj, (eN + iB), bV(fj), bN(), cK, cJ, eV, (br() + iB), (bI() + (if ((fj > 0))
1348+ then aS(cM)
1349+ else 0)), (bH() + (if ((0 > fj))
1350+ then aS(cM)
1351+ else 0)), iD, iE, da)
12871352 }
12881353 }
12891354 else {
1290- let it = aM(hG, ia)
1291- let iy = ee(toString(bL.caller), aG)
1292- let eU = iy._1
1293- let ed = iy._2
1294- if ((eU > it))
1355+ let iB = aP(hO, ii)
1356+ let iG = ei(toString(bP.caller), aH)
1357+ let eY = iG._1
1358+ let eh = iG._2
1359+ if ((eY > iB))
12951360 then throw("Use decreasePosition to decrease position size")
12961361 else throw("Close position first")
12971362 }
1298- let ff = is._1
1299- let iz = is._2
1300- let fh = is._3
1301- let iA = is._4
1302- let iB = is._5
1303- let cG = is._6
1304- let cF = is._7
1305- let eR = is._8
1306- let iC = is._9
1307- let iD = is._10
1308- let iE = is._11
1309- let iv = is._12
1310- let iw = is._13
1311- let cW = is._14
1312- let iF = gK((im + cW))
1313- let gM = iF._1
1314- let gN = iF._2
1315- let iG = if ((hG >= cW))
1316- then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317- else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318- if ((iG == iG))
1363+ let fj = iA._1
1364+ let iH = iA._2
1365+ let fl = iA._3
1366+ let iI = iA._4
1367+ let iJ = iA._5
1368+ let cK = iA._6
1369+ let cJ = iA._7
1370+ let eV = iA._8
1371+ let iK = iA._9
1372+ let iL = iA._10
1373+ let iM = iA._11
1374+ let iD = iA._12
1375+ let iE = iA._13
1376+ let da = iA._14
1377+ let iN = gR((iu + da))
1378+ let gT = iN._1
1379+ let gU = iN._2
1380+ let iO = if ((hO >= da))
1381+ then invoke(ar(), "addLocked", nil, [AttachedPayment(ao(), (hO - da))])
1382+ else invoke(ar(), "withdrawLocked", [(da - hO)], nil)
1383+ if ((iO == iO))
13191384 then {
1320- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321- if ((iH == iH))
1385+ let iP = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1386+ if ((iP == iP))
13221387 then {
1323- let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324- if ((iI == iI))
1388+ let iQ = invoke(as(), "notifyFees", [bY, iu], nil)
1389+ if ((iQ == iQ))
13251390 then {
1326- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327- if ((iJ == iJ))
1328- then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
1391+ let iR = invoke(as(), "notifyNotional", [bY, fl], nil)
1392+ if ((iR == iR))
1393+ then ((((((hs(bY, fj, iH, fl, iI, iJ) ++ ho(iw, bY)) ++ hr(iw, bY, gF)) ++ hF(cJ, cK, eV, iK, iL, iM, iD, iE)) ++ hR(gT)) ++ hQ(((bi() + hO) - da))) ++ hS(gG, bP))
13291394 else throw("Strict value is not equal to itself.")
13301395 }
13311396 else throw("Strict value is not equal to itself.")
13441409
13451410
13461411
1347-@Callable(bL)
1412+@Callable(bP)
13481413 func addMargin () = {
1349- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350- if ((id == id))
1414+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415+ if ((il == il))
13511416 then {
1352- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353- if ((ie == ie))
1417+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1418+ if ((im == im))
13541419 then {
1355- let bU = toString(bL.caller)
1356- let hG = bL.payments[0].amount
1357- let gB = bL.payments[0].assetId
1358- let ig = toBase58String(value(gB))
1359- let ih = (gB == an())
1360- if (if (if (if (if (if (if (!(ih))
1420+ let bY = toString(bP.caller)
1421+ let hO = bP.payments[0].amount
1422+ let gI = bP.payments[0].assetId
1423+ let io = toBase58String(value(gI))
1424+ let ip = (gI == ao())
1425+ if (if (if (if (if (if (if (!(ip))
13611426 then true
1362- else !(ce(toString(bL.caller))))
1427+ else !(ci(toString(bP.caller))))
13631428 then true
1364- else !(gC(bU, ig)))
1429+ else !(gJ(bY, io)))
13651430 then true
1366- else !(cn()))
1431+ else !(cr()))
13671432 then true
1368- else co())
1433+ else cs())
13691434 then true
1370- else cp())
1435+ else ct())
13711436 then true
1372- else dE())
1437+ else dI())
13731438 then throw("Invalid addMargin parameters")
13741439 else {
1375- let iK = bT(bU)
1376- let eH = iK._1
1377- let eI = iK._2
1378- let eJ = iK._3
1379- let eK = iK._4
1380- let eL = iK._5
1381- let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382- if ((iG == iG))
1440+ let iS = bX(bY)
1441+ let eL = iS._1
1442+ let eM = iS._2
1443+ let eN = iS._3
1444+ let eO = iS._4
1445+ let eP = iS._5
1446+ let iO = invoke(ar(), "addLocked", nil, [AttachedPayment(ao(), hO)])
1447+ if ((iO == iO))
13831448 then {
1384- let cW = cS(eI, eL)
1385- let iL = if ((cW > 0))
1449+ let da = cW(eM, eP)
1450+ let iT = if ((da > 0))
13861451 then {
1387- let iM = gK(cW)
1388- let gM = iM._1
1389- let gN = iM._2
1390- let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391- if ((iN == iN))
1452+ let iU = gR(da)
1453+ let gT = iU._1
1454+ let gU = iU._2
1455+ let iV = invoke(ar(), "withdrawLocked", [gT], nil)
1456+ if ((iV == iV))
13921457 then {
1393- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394- if ((iO == iO))
1395- then hJ(gM)
1458+ let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1459+ if ((iW == iW))
1460+ then hR(gT)
13961461 else throw("Strict value is not equal to itself.")
13971462 }
13981463 else throw("Strict value is not equal to itself.")
13991464 }
14001465 else nil
1401- if ((iL == iL))
1402- then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1466+ if ((iT == iT))
1467+ then ((hs(bY, eL, ((eM - da) + hO), eN, eO, bN()) ++ hQ(((bi() + hO) - da))) ++ iT)
14031468 else throw("Strict value is not equal to itself.")
14041469 }
14051470 else throw("Strict value is not equal to itself.")
14121477
14131478
14141479
1415-@Callable(bL)
1416-func removeMargin (hG) = {
1417- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418- if ((id == id))
1480+@Callable(bP)
1481+func removeMargin (hO) = {
1482+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1483+ if ((il == il))
14191484 then {
1420- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421- if ((ie == ie))
1485+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1486+ if ((im == im))
14221487 then {
1423- let bU = toString(bL.caller)
1424- if (if (if (if (if ((0 >= hG))
1488+ let bY = toString(bP.caller)
1489+ if (if (if (if (if ((0 >= hO))
14251490 then true
1426- else !(ce(bU)))
1491+ else !(ci(bY)))
14271492 then true
1428- else !(cn()))
1493+ else !(cr()))
14291494 then true
1430- else co())
1495+ else cs())
14311496 then true
1432- else dE())
1497+ else dI())
14331498 then throw("Invalid removeMargin parameters")
14341499 else {
1435- let iP = bT(bU)
1436- let eH = iP._1
1437- let eI = iP._2
1438- let eJ = iP._3
1439- let eK = iP._4
1440- let eL = iP._5
1441- let iQ = cX(eH, eI, eK, eL, -(hG))
1442- let df = iQ._1
1443- let dg = iQ._2
1444- let db = iQ._3
1445- let cW = iQ._4
1446- if ((dg != 0))
1500+ let iX = bX(bY)
1501+ let eL = iX._1
1502+ let eM = iX._2
1503+ let eN = iX._3
1504+ let eO = iX._4
1505+ let eP = iX._5
1506+ let iY = db(eL, eM, eO, eP, -(hO))
1507+ let dj = iY._1
1508+ let dk = iY._2
1509+ let df = iY._3
1510+ let da = iY._4
1511+ if ((dk != 0))
14471512 then throw("Invalid removed margin amount")
14481513 else {
1449- let fk = ej(df, dg, eJ)
1450- if (!(bM(fk, bi(), true)))
1451- then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
1514+ let fo = en(dj, dk, eN)
1515+ if (!(bQ(fo, bl(), true)))
1516+ then throw(((("Too much margin removed: " + toString(fo)) + " < ") + toString(bl())))
14521517 else {
1453- let iR = gK(cW)
1454- let gM = iR._1
1455- let gN = iR._2
1456- let iL = if ((cW > 0))
1518+ let iZ = gR(da)
1519+ let gT = iZ._1
1520+ let gU = iZ._2
1521+ let iT = if ((da > 0))
14571522 then {
1458- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459- if ((iO == iO))
1460- then hJ(gM)
1523+ let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1524+ if ((iW == iW))
1525+ then hR(gT)
14611526 else throw("Strict value is not equal to itself.")
14621527 }
14631528 else nil
1464- if ((iL == iL))
1529+ if ((iT == iT))
14651530 then {
1466- let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467- if ((iN == iN))
1468- then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
1531+ let iV = invoke(ar(), "withdrawLocked", [(hO + gT)], nil)
1532+ if ((iV == iV))
1533+ then (((hs(bY, eL, dj, eN, bV(eL), bN()) ++ hN(bP.caller, hO)) ++ hQ(((bi() - hO) - da))) ++ iT)
14691534 else throw("Strict value is not equal to itself.")
14701535 }
14711536 else throw("Strict value is not equal to itself.")
14801545
14811546
14821547
1483-@Callable(bL)
1484-func closePosition (eB,eD,eE) = {
1485- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486- if ((id == id))
1548+@Callable(bP)
1549+func closePosition (eF,eH,eI) = {
1550+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1551+ if ((il == il))
14871552 then {
1488- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489- if ((ie == ie))
1553+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1554+ if ((im == im))
14901555 then {
1491- let bU = bK(bL)
1492- let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493- let cd = cb(bU)
1494- if (if (if (if (if (if (!(ce(bU)))
1556+ let bY = bO(bP)
1557+ let ja = valueOrErrorMessage(addressFromString(bY), "Invalid caller")
1558+ let ch = cf(bY)
1559+ if (if (if (if (if (if (!(ci(bY)))
14951560 then true
1496- else !(cn()))
1561+ else !(cr()))
14971562 then true
1498- else co())
1563+ else cs())
14991564 then true
1500- else (0 >= eB))
1565+ else (0 >= eF))
15011566 then true
1502- else (0 > eD))
1567+ else (0 > eH))
15031568 then true
1504- else dE())
1569+ else dI())
15051570 then throw("Invalid closePosition parameters")
15061571 else {
1507- let eL = bT(bU)._5
1508- let iT = eA(bU, eB, cd, eD, eE, true, true)
1509- let ff = iT._1
1510- let fo = iT._2
1511- let fh = iT._3
1512- let fi = iT._4
1513- let fb = iT._5
1514- let eW = iT._6
1515- let fn = iT._7
1516- let cF = iT._8
1517- let cG = iT._9
1518- let eR = iT._10
1519- let iC = iT._11
1520- let iD = iT._12
1521- let iE = iT._13
1522- let iv = iT._14
1523- let iw = iT._15
1524- let iU = iT._16
1525- if ((fb > 0))
1572+ let eP = bX(bY)._5
1573+ let jb = eE(bY, eF, ch, eH, eI, true, true)
1574+ let fj = jb._1
1575+ let fs = jb._2
1576+ let fl = jb._3
1577+ let fm = jb._4
1578+ let ff = jb._5
1579+ let fa = jb._6
1580+ let fr = jb._7
1581+ let cJ = jb._8
1582+ let cK = jb._9
1583+ let eV = jb._10
1584+ let iK = jb._11
1585+ let iL = jb._12
1586+ let iM = jb._13
1587+ let iD = jb._14
1588+ let iE = jb._15
1589+ let jc = jb._16
1590+ if ((ff > 0))
15261591 then throw("Invalid closePosition parameters: bad debt")
1527- else if ((eL >= bJ()))
1592+ else if ((eP >= bN()))
15281593 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15291594 else {
1530- let eO = (ff != 0)
1531- let iV = (fn + iU)
1532- let iW = (bf() - iV)
1533- let iX = if ((0 > iW))
1595+ let eS = (fj != 0)
1596+ let jd = (fr + jc)
1597+ let je = (bi() - jd)
1598+ let jf = if ((0 > je))
15341599 then 0
1535- else iW
1536- let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537- if ((iN == iN))
1600+ else je
1601+ let iV = invoke(ar(), "withdrawLocked", [jd], nil)
1602+ if ((iV == iV))
15381603 then {
1539- let iY = gK(iU)
1540- let gM = iY._1
1541- let gN = iY._2
1542- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543- if ((iH == iH))
1604+ let jg = gR(jc)
1605+ let gT = jg._1
1606+ let gU = jg._2
1607+ let iP = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1608+ if ((iP == iP))
15441609 then {
1545- let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546- if ((iI == iI))
1610+ let iQ = invoke(as(), "notifyFees", [bY, jc], nil)
1611+ if ((iQ == iQ))
15471612 then {
1548- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549- if ((iJ == iJ))
1550- then (((((if (eO)
1551- then hk(bU, ff, fo, fh, fi, bJ())
1552- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553- then hF(iS, fn)
1554- else nil)) ++ hI(iX)) ++ hJ(gM))
1613+ let iR = invoke(as(), "notifyNotional", [bY, fl], nil)
1614+ if ((iR == iR))
1615+ then (((((if (eS)
1616+ then hs(bY, fj, fs, fl, fm, bN())
1617+ else hM(bY)) ++ hF(cJ, cK, eV, iK, iL, iM, iD, iE)) ++ (if ((fr > 0))
1618+ then hN(ja, fr)
1619+ else nil)) ++ hQ(jf)) ++ hR(gT))
15551620 else throw("Strict value is not equal to itself.")
15561621 }
15571622 else throw("Strict value is not equal to itself.")
15691634
15701635
15711636
1572-@Callable(bL)
1573-func liquidate (bU) = {
1574- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575- if ((id == id))
1637+@Callable(bP)
1638+func liquidate (bY) = {
1639+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1640+ if ((il == il))
15761641 then {
1577- let iZ = en(bU, aG)
1578- let ja = if (dT())
1642+ let jh = er(bY, aH)
1643+ let ji = if (dX())
15791644 then {
1580- let jb = en(bU, aH)
1581- aQ(iZ, jb)
1645+ let jj = er(bY, aI)
1646+ aT(jh, jj)
15821647 }
1583- else iZ
1584- if (if (if (if (if (!(bM(ja, bv(), false)))
1648+ else jh
1649+ if (if (if (if (if (!(bQ(ji, by(), false)))
15851650 then true
1586- else !(ce(bU)))
1651+ else !(ci(bY)))
15871652 then true
1588- else !(cn()))
1653+ else !(cr()))
15891654 then true
1590- else co())
1655+ else cs())
15911656 then true
1592- else dE())
1657+ else dI())
15931658 then throw("Unable to liquidate")
15941659 else {
1595- let jc = if (if ((iZ > bw()))
1596- then (bx() > 0)
1660+ let jk = if (if ((jh > bz()))
1661+ then (bA() > 0)
15971662 else false)
1598- then (aD > bx())
1663+ then (aE > bA())
15991664 else false
1600- let eH = bT(bU)._1
1601- let dX = aP(eH)
1602- let jd = if (jc)
1665+ let eL = bX(bY)._1
1666+ let eb = aS(eL)
1667+ let jl = if (jk)
16031668 then {
1604- let je = ev(bU, eH)
1605- let jf = aK(aP(je), dX)
1606- $Tuple2(jf, aP(je))
1669+ let jm = ez(bY, eL)
1670+ let jn = aN(aS(jm), eb)
1671+ $Tuple2(jn, aS(jm))
16071672 }
1608- else $Tuple2(0, dX)
1609- let jf = jd._1
1610- let je = jd._2
1611- let jg = eA(bU, if (jc)
1612- then je
1613- else dX, bw(), 0, true, false, true)
1614- let ff = jg._1
1615- let fo = jg._2
1616- let fh = jg._3
1617- let fi = jg._4
1618- let fb = jg._5
1619- let eW = jg._6
1620- let fn = jg._7
1621- let cF = jg._8
1622- let cG = jg._9
1623- let eR = jg._10
1624- let iC = jg._11
1625- let iD = jg._12
1626- let iE = jg._13
1627- let iv = jg._14
1628- let iw = jg._15
1629- let jh = jg._16
1630- let ji = (jh / 2)
1631- let gN = (jh - ji)
1632- let iW = (bf() - jh)
1633- let jj = if ((0 > iW))
1673+ else $Tuple2(0, eb)
1674+ let jn = jl._1
1675+ let jm = jl._2
1676+ let jo = eE(bY, if (jk)
1677+ then jm
1678+ else eb, bz(), 0, true, false, true)
1679+ let fj = jo._1
1680+ let fs = jo._2
1681+ let fl = jo._3
1682+ let fm = jo._4
1683+ let ff = jo._5
1684+ let fa = jo._6
1685+ let fr = jo._7
1686+ let cJ = jo._8
1687+ let cK = jo._9
1688+ let eV = jo._10
1689+ let iK = jo._11
1690+ let iL = jo._12
1691+ let iM = jo._13
1692+ let iD = jo._14
1693+ let iE = jo._15
1694+ let jp = jo._16
1695+ let jq = (jp / 2)
1696+ let gU = (jp - jq)
1697+ let je = (bi() - jp)
1698+ let jr = if ((0 > je))
16341699 then 0
1635- else iW
1636- let iO = if ((fb > 0))
1700+ else je
1701+ let iW = if ((ff > 0))
16371702 then {
1638- let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639- if ((iO == iO))
1703+ let iW = invoke(ar(), "exchangeFreeAndLocked", [(ff + jp)], nil)
1704+ if ((iW == iW))
16401705 then nil
16411706 else throw("Strict value is not equal to itself.")
16421707 }
16431708 else nil
1644- if ((iO == iO))
1709+ if ((iW == iW))
16451710 then {
1646- let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647- if ((iN == iN))
1711+ let iV = invoke(ar(), "withdrawLocked", [jp], nil)
1712+ if ((iV == iV))
16481713 then {
1649- let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650- if ((jk == jk))
1714+ let js = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1715+ if ((js == js))
16511716 then {
1652- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653- if ((iJ == iJ))
1654- then ((((if (jc)
1655- then hk(bU, ff, fo, fh, fi, bJ())
1656- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
1717+ let iR = invoke(as(), "notifyNotional", [bY, fl], nil)
1718+ if ((iR == iR))
1719+ then ((((if (jk)
1720+ then hs(bY, fj, fs, fl, fm, bN())
1721+ else hM(bY)) ++ hF(cJ, cK, eV, iK, iL, iM, iD, iE)) ++ hN(bP.caller, jq)) ++ hQ(jr))
16571722 else throw("Strict value is not equal to itself.")
16581723 }
16591724 else throw("Strict value is not equal to itself.")
16681733
16691734
16701735
1671-@Callable(bL)
1736+@Callable(bP)
16721737 func payFunding () = {
1673- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674- if ((id == id))
1738+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739+ if ((il == il))
16751740 then {
1676- let jl = br()
1677- if (if (if ((jl > bJ()))
1741+ let jt = bu()
1742+ if (if (if ((jt > bN()))
16781743 then true
1679- else !(cn()))
1744+ else !(cr()))
16801745 then true
1681- else co())
1682- then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
1746+ else cs())
1747+ then throw(((("Invalid funding block timestamp: " + toString(bN())) + " < ") + toString(jt)))
16831748 else {
1684- let gl = dy()
1685- let jm = gk()
1686- let go = jm._1
1687- let gp = jm._2
1688- ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
1749+ let gp = dC()
1750+ let ju = go()
1751+ let gs = ju._1
1752+ let gt = ju._2
1753+ let gw = ju._3
1754+ let jv = if ((gw > 0))
1755+ then {
1756+ let jv = invoke(ar(), "exchangeFreeAndLocked", [-(gw)], nil)
1757+ if ((jv == jv))
1758+ then nil
1759+ else throw("Strict value is not equal to itself.")
1760+ }
1761+ else nil
1762+ if ((jv == jv))
1763+ then hi((jt + bx()), (bF() + gt), (bG() + gs), aN(gt, gp), aN(gs, gp))
1764+ else throw("Strict value is not equal to itself.")
16891765 }
16901766 }
16911767 else throw("Strict value is not equal to itself.")
16931769
16941770
16951771
1696-@Callable(bL)
1772+@Callable(bP)
16971773 func syncTerminalPriceToOracle () = {
1698- let cx = bj()
1699- let cy = bk()
1700- let jn = gf(dy(), cx, cy)
1701- let hR = jn._1
1702- let hS = jn._2
1703- let gj = jn._3
1704- let jo = if (if ((0 > gj))
1705- then (aP(gj) > bf())
1774+ let cB = bm()
1775+ let cC = bn()
1776+ let jw = gj(dC(), cB, cC)
1777+ let hZ = jw._1
1778+ let ia = jw._2
1779+ let gn = jw._3
1780+ let jx = if (if ((0 > gn))
1781+ then (aS(gn) > bi())
17061782 else false)
1707- then -(bf())
1708- else gj
1709- let hT = if ((jo != 0))
1783+ then -(bi())
1784+ else gn
1785+ let ib = if ((jx != 0))
17101786 then {
1711- let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712- if ((hT == hT))
1787+ let ib = invoke(ar(), "exchangeFreeAndLocked", [jx], nil)
1788+ if ((ib == ib))
17131789 then nil
17141790 else throw("Strict value is not equal to itself.")
17151791 }
17161792 else nil
1717- if ((hT == hT))
1718- then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1793+ if ((ib == ib))
1794+ then ((hQ((bi() + jx)) ++ hE(hZ, ia)) ++ hw(aN(aP(cB, hZ), aP(cC, ia))))
17191795 else throw("Strict value is not equal to itself.")
17201796 }
17211797
17221798
17231799
1724-@Callable(bL)
1725-func ensureCalledOnce () = if ((bL.caller != this))
1800+@Callable(bP)
1801+func ensureCalledOnce () = if ((bP.caller != this))
17261802 then throw("Invalid saveCurrentTxId parameters")
17271803 else {
1728- let jp = valueOrElse(getString(this, W), "")
1729- if ((jp != toBase58String(bL.transactionId)))
1730- then [StringEntry(W, jp)]
1804+ let jy = valueOrElse(getString(this, X), "")
1805+ if ((jy != toBase58String(bP.transactionId)))
1806+ then [StringEntry(X, jy)]
17311807 else throw("Can not call vAMM methods twice in one tx")
17321808 }
17331809
17341810
17351811
1736-@Callable(bL)
1737-func view_calcRemainMarginWithFundingPayment (bU) = {
1738- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((id == id))
1812+@Callable(bP)
1813+func view_calcRemainMarginWithFundingPayment (bY) = {
1814+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1815+ if ((il == il))
17401816 then {
1741- let jq = bT(bU)
1742- let bX = jq._1
1743- let eg = jq._2
1744- let ep = jq._3
1745- let ei = jq._4
1746- let er = jq._5
1747- let jr = ee(bU, aG)
1748- let dZ = jr._1
1749- let ed = jr._2
1750- let js = cX(bX, eg, ei, er, ed)
1751- let df = js._1
1752- let dg = js._2
1753- let db = js._3
1754- let cW = js._4
1755- throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
1817+ let jz = bX(bY)
1818+ let cb = jz._1
1819+ let ek = jz._2
1820+ let et = jz._3
1821+ let em = jz._4
1822+ let ev = jz._5
1823+ let jA = ei(bY, aH)
1824+ let ed = jA._1
1825+ let eh = jA._2
1826+ let jB = db(cb, ek, em, ev, eh)
1827+ let dj = jB._1
1828+ let dk = jB._2
1829+ let df = jB._3
1830+ let da = jB._4
1831+ throw(((((((aL(dj) + aL(df)) + aL(ey(bY))) + aL(eh)) + aL(dk)) + aL(ed)) + aL(da)))
17561832 }
17571833 else throw("Strict value is not equal to itself.")
17581834 }
17591835
17601836
17611837
1762-@Callable(bL)
1763-func view_getPegAdjustCost (hp) = {
1764- let cx = bj()
1765- let cy = bk()
1766- let ge = gf(hp, cx, cy)
1767- throw(toString(ge._3))
1838+@Callable(bP)
1839+func view_getPegAdjustCost (hx) = {
1840+ let cB = bm()
1841+ let cC = bn()
1842+ let gi = gj(hx, cB, cC)
1843+ throw(toString(gi._3))
17681844 }
17691845
17701846
17711847
1772-@Callable(bL)
1848+@Callable(bP)
17731849 func view_getTerminalAmmPrice () = {
1774- let jt = fN()
1775- let fR = jt._1
1776- let fS = jt._2
1777- let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778- throw(toString(hM))
1850+ let jC = fR()
1851+ let fV = jC._1
1852+ let fW = jC._2
1853+ let hU = aN(aP(fV, bo()), aP(fW, bp()))
1854+ throw(toString(hU))
17791855 }
17801856
17811857
17821858
1783-@Callable(bL)
1859+@Callable(bP)
17841860 func view_getFunding () = {
1785- let gl = dy()
1786- let ju = gk()
1787- let go = ju._1
1788- let gp = ju._2
1789- let jv = aK(gp, gl)
1790- let jw = aK(go, gl)
1791- throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
1861+ let gp = dC()
1862+ let jD = go()
1863+ let gs = jD._1
1864+ let gt = jD._2
1865+ let gw = jD._3
1866+ let jE = aN(gt, gp)
1867+ let jF = aN(gs, gp)
1868+ throw(((((aL(jE) + aL(jF)) + aL(ft())) + aL(dC())) + aL(gw)))
17921869 }
17931870
17941871
17951872
1796-@Callable(bL)
1873+@Callable(bP)
17971874 func computeSpotPrice () = {
1798- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799- if ((id == id))
1875+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1876+ if ((il == il))
18001877 then {
1801- let ge = dS()
1802- $Tuple2(nil, ge)
1878+ let gi = dW()
1879+ $Tuple2(nil, gi)
18031880 }
18041881 else throw("Strict value is not equal to itself.")
18051882 }
18061883
18071884
18081885
1809-@Callable(bL)
1810-func computeFeeForTraderWithArtifact (bU,gr) = {
1811- let ge = gD(bU, gr)
1812- $Tuple2(nil, ge)
1886+@Callable(bP)
1887+func computeFeeForTraderWithArtifact (bY,gy) = {
1888+ let gi = gK(bY, gy)
1889+ $Tuple2(nil, gi)
18131890 }
18141891
18151892
1816-@Verifier(jx)
1817-func jy () = {
1818- let jz = getString(this, X)
1819- if (isDefined(jz))
1893+@Verifier(jG)
1894+func jH () = {
1895+ let jI = getString(this, Y)
1896+ if (isDefined(jI))
18201897 then {
1821- let jA = getString(addressFromStringValue(value(jz)), Z)
1822- if (isDefined(jA))
1823- then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1898+ let jJ = getString(addressFromStringValue(value(jI)), aa)
1899+ if (isDefined(jJ))
1900+ then valueOrElse(getBoolean(addressFromStringValue(value(jJ)), ((("status_" + toString(this)) + "_") + toBase58String(jG.id))), false)
18241901 else throw("unable to verify: admin not set in coordinator")
18251902 }
1826- else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1903+ else sigVerify(jG.bodyBytes, jG.proofs[0], jG.senderPublicKey)
18271904 }
18281905
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
2222 let j = "k_positionAsset"
2323
2424 let k = "k_positionFee"
2525
2626 let l = "k_positionTimestamp"
2727
2828 let m = "k_initialized"
2929
3030 let n = "k_paused"
3131
3232 let o = "k_closeOnly"
3333
3434 let p = "k_fee"
3535
3636 let q = "k_rollover_fee"
3737
3838 let r = "k_fundingPeriod"
3939
4040 let s = "k_initMarginRatio"
4141
4242 let t = "k_mmr"
4343
4444 let u = "k_liquidationFeeRatio"
4545
4646 let v = "k_partLiquidationRatio"
4747
4848 let w = "k_spreadLimit"
4949
5050 let x = "k_maxPriceImpact"
5151
5252 let y = "k_maxPriceSpread"
5353
5454 let z = "k_maxOpenNotional"
5555
5656 let A = "k_feeToStakersPercent"
5757
5858 let B = "k_maxOracleDelay"
5959
60-let C = "k_lastDataStr"
60+let C = "k_fundingMode"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_lastDataStr"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_lastMinuteId"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_twapDataLastCumulativePrice"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_twapDataLastPrice"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_twapDataPreviousMinuteId"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_latestLongPremiumFraction"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_latestShortPremiumFraction"
7575
76-let K = "k_longFundingRate"
76+let K = "k_nextFundingBlockMinTimestamp"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_longFundingRate"
7979
80-let M = "k_qtAstR"
80+let M = "k_shortFundingRate"
8181
82-let N = "k_bsAstR"
82+let N = "k_qtAstR"
8383
84-let O = "k_qtAstW"
84+let O = "k_bsAstR"
8585
86-let P = "k_bsAstW"
86+let P = "k_qtAstW"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_bsAstW"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_totalPositionSize"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_totalLongPositionSize"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_totalShortPositionSize"
9595
96-let U = "k_openInterestShort"
96+let U = "k_openInterestNotional"
9797
98-let V = "k_openInterestLong"
98+let V = "k_openInterestShort"
9999
100-let W = "k_lastTx"
100+let W = "k_openInterestLong"
101101
102-let X = "k_coordinatorAddress"
102+let X = "k_lastTx"
103103
104-let Y = "k_vault_address"
104+let Y = "k_coordinatorAddress"
105105
106-let Z = "k_admin_address"
106+let Z = "k_vault_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_admin_address"
109109
110-let ab = "k_quote_staking"
110+let ab = "k_quote_asset"
111111
112-let ac = "k_staking_address"
112+let ac = "k_quote_staking"
113113
114-let ad = "k_miner_address"
114+let ad = "k_staking_address"
115115
116-let ae = "k_orders_address"
116+let ae = "k_miner_address"
117117
118-let af = "k_referral_address"
118+let af = "k_orders_address"
119119
120-let ag = "k_exchange_address"
120+let ag = "k_referral_address"
121121
122-let ah = "k_nft_manager_address"
122+let ah = "k_exchange_address"
123123
124-func ai (aj,ak) = ((aj + "_") + ak)
124+let ai = "k_nft_manager_address"
125+
126+func aj (ak,al) = ((ak + "_") + al)
125127
126128
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
129+func am () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
128130
129131
130-func am () = addressFromString(getStringValue(al(), Z))
132+func an () = addressFromString(getStringValue(am(), aa))
131133
132134
133-func an () = fromBase58String(getStringValue(al(), aa))
135+func ao () = fromBase58String(getStringValue(am(), ab))
134136
135137
136-func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
138+func ap () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
137139
138140
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
141+func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
140142
141143
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
144+func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), Z)), "Vault not set")
143145
144146
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
147+func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
146148
147149
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
150+func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
149151
150152
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
153+func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
152154
153155
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
156+func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
155157
156158
157-let av = "k_token_param"
159+let aw = "k_token_param"
158160
159-let aw = "k_token_type"
161+let ax = "k_token_type"
160162
161-let ax = "fee_reduction"
163+let ay = "fee_reduction"
162164
163-let ay = 1
165+let az = 1
164166
165-let az = 2
167+let aA = 2
166168
167-let aA = 15
169+let aB = 15
168170
169-let aB = 1000
171+let aC = 1000
170172
171-let aC = 6
173+let aD = 6
172174
173-let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
175+let aE = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174176
175-let aE = (525600 * aD)
177+let aF = (525600 * aE)
176178
177-let aF = (86400 * aD)
179+let aG = (86400 * aE)
178180
179-let aG = 1
181+let aH = 1
180182
181-let aH = 2
183+let aI = 2
182184
183-func aI (aJ) = (toString(aJ) + ",")
185+let aJ = 1
186+
187+let aK = 2
188+
189+func aL (aM) = (toString(aM) + ",")
184190
185191
186-func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
192+func aN (aM,aO) = fraction(aM, aE, aO, HALFEVEN)
187193
188194
189-func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
195+func aP (aM,aO) = fraction(aM, aO, aE, HALFEVEN)
190196
191197
192-func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
198+func aQ (aM,aO) = fraction(aM, toBigInt(aE), aO, HALFEVEN)
193199
194200
195-func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
201+func aR (aM,aO) = fraction(aM, aO, toBigInt(aE), HALFEVEN)
196202
197203
198-func aP (aJ) = if ((aJ > 0))
199- then aJ
200- else -(aJ)
204+func aS (aM) = if ((aM > 0))
205+ then aM
206+ else -(aM)
201207
202208
203-func aQ (aJ,aL) = if ((aJ >= aL))
204- then aJ
205- else aL
209+func aT (aM,aO) = if ((aM >= aO))
210+ then aM
211+ else aO
206212
207213
208-func aR (aS) = if ((size(aS) == 0))
214+func aU (aV) = if ((size(aV) == 0))
209215 then ""
210- else makeString(aS, ",")
216+ else makeString(aV, ",")
211217
212218
213-func aT (aU) = if ((aU == ""))
219+func aW (aX) = if ((aX == ""))
214220 then nil
215- else split(aU, ",")
221+ else split(aX, ",")
216222
217223
218-func aV (aS,aW,aX) = if ((size(aS) > aW))
219- then (removeByIndex(aS, 0) :+ aX)
220- else (aS :+ aX)
224+func aY (aV,aZ,ba) = if ((size(aV) > aZ))
225+ then (removeByIndex(aV, 0) :+ ba)
226+ else (aV :+ ba)
221227
222228
223-func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
229+func bb (bc) = valueOrErrorMessage(getInteger(this, bc), ("no value for " + bc))
224230
225231
226-func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
232+func bd (bc,be) = valueOrElse(getInteger(this, bc), be)
227233
228234
229-func bc (ak,aj) = {
230- let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231- bd
235+func bf (al,ak) = {
236+ let bg = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
237+ bg
232238 }
233239
234240
235-func be (ak,aj) = {
236- let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237- bd
241+func bh (al,ak) = {
242+ let bg = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
243+ bg
238244 }
239245
240246
241-func bf () = aY(c)
247+func bi () = bb(c)
242248
243249
244-func bg () = aY(p)
250+func bj () = bb(p)
245251
246252
247-func bh () = aY(q)
253+func bk () = bb(q)
248254
249255
250-func bi () = aY(s)
256+func bl () = bb(s)
251257
252258
253-func bj () = aY(M)
259+func bm () = bb(N)
254260
255261
256-func bk () = aY(N)
262+func bn () = bb(O)
257263
258264
259-func bl () = ba(O, aD)
265+func bo () = bd(P, aE)
260266
261267
262-func bm () = ba(P, aD)
268+func bp () = bd(Q, aE)
263269
264270
265-func bn () = aY(Q)
271+func bq () = bb(R)
266272
267273
268-func bo () = aY(T)
274+func br () = bb(U)
269275
270276
271-func bp () = aY(U)
277+func bs () = bb(V)
272278
273279
274-func bq () = aY(V)
280+func bt () = bb(W)
275281
276282
277-func br () = aY(J)
283+func bu () = bb(K)
278284
279285
280-func bs () = aY(r)
286+func bv () = bb(r)
281287
282288
283-func bt () = (bs() * aD)
289+func bw () = (bv() * aE)
284290
285291
286-func bu () = (bs() * aB)
292+func bx () = (bv() * aC)
287293
288294
289-func bv () = aY(t)
295+func by () = bb(t)
290296
291297
292-func bw () = aY(u)
298+func bz () = bb(u)
293299
294300
295-func bx () = aY(v)
301+func bA () = bb(v)
296302
297303
298-func by () = aY(w)
304+func bB () = bb(w)
299305
300306
301-func bz () = aY(x)
307+func bC () = bb(x)
302308
303309
304-func bA () = aY(y)
310+func bD () = bb(y)
305311
306312
307-func bB () = aY(z)
313+func bE () = bb(z)
308314
309315
310-func bC () = aY(H)
316+func bF () = bb(I)
311317
312318
313-func bD () = aY(I)
319+func bG () = bb(J)
314320
315321
316-func bE () = aY(S)
322+func bH () = bb(T)
317323
318324
319-func bF () = aY(R)
325+func bI () = bb(S)
320326
321327
322-func bG () = ba(d, 0)
328+func bJ () = bd(d, 0)
323329
324330
325-func bH () = aY(A)
331+func bK () = bb(A)
326332
327333
328-func bI () = aY(B)
334+func bL () = bb(B)
329335
330336
331-func bJ () = lastBlock.timestamp
337+func bM () = bd(C, aJ)
332338
333339
334-func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
340+func bN () = lastBlock.timestamp
335341
336342
337-func bM (bN,bO,bP) = {
338- let bQ = (bN - bO)
339- if (if (bP)
340- then (0 > bQ)
343+func bO (bP) = valueOrElse(getString(at(), "k_sender"), toString(bP.caller))
344+
345+
346+func bQ (bR,bS,bT) = {
347+ let bU = (bR - bS)
348+ if (if (bT)
349+ then (0 > bU)
341350 else false)
342- then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343- else if (if (!(bP))
344- then (bQ >= 0)
351+ then throw(((("Invalid margin: " + toString(bR)) + " < ") + toString(bS)))
352+ else if (if (!(bT))
353+ then (bU >= 0)
345354 else false)
346- then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
355+ then throw(((("Invalid margin: " + toString(bR)) + " > ") + toString(bS)))
347356 else true
348357 }
349358
350359
351-func bR (bS) = if ((bS == 0))
360+func bV (bW) = if ((bW == 0))
352361 then throw("Should not be called with _positionSize == 0")
353- else if ((bS > 0))
354- then bC()
355- else bD()
362+ else if ((bW > 0))
363+ then bF()
364+ else bG()
356365
357366
358-func bT (bU) = {
359- let bV = getInteger(this, ai(e, bU))
360- let bW = bV
361- if ($isInstanceOf(bW, "Int"))
367+func bX (bY) = {
368+ let bZ = getInteger(this, aj(e, bY))
369+ let ca = bZ
370+ if ($isInstanceOf(ca, "Int"))
362371 then {
363- let bX = bW
364- $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
372+ let cb = ca
373+ $Tuple5(cb, getIntegerValue(this, aj(f, bY)), getIntegerValue(this, aj(g, bY)), getIntegerValue(this, aj(h, bY)), getIntegerValue(this, aj(l, bY)))
365374 }
366375 else $Tuple5(0, 0, 0, 0, 0)
367376 }
368377
369378
370-func bY (bU) = {
371- let bZ = getString(this, ai(j, bU))
372- let bW = bZ
373- if ($isInstanceOf(bW, "String"))
379+func cc (bY) = {
380+ let cd = getString(this, aj(j, bY))
381+ let ca = cd
382+ if ($isInstanceOf(ca, "String"))
374383 then {
375- let ca = bW
376- ca
384+ let ce = ca
385+ ce
377386 }
378- else toBase58String(an())
387+ else toBase58String(ao())
379388 }
380389
381390
382-func cb (bU) = {
383- let cc = getInteger(this, ai(k, bU))
384- let bW = cc
385- if ($isInstanceOf(bW, "Int"))
391+func cf (bY) = {
392+ let cg = getInteger(this, aj(k, bY))
393+ let ca = cg
394+ if ($isInstanceOf(ca, "Int"))
386395 then {
387- let cd = bW
388- cd
396+ let ch = ca
397+ ch
389398 }
390- else bg()
399+ else bj()
391400 }
392401
393402
394-func ce (bU) = if ((bT(bU)._1 == 0))
403+func ci (bY) = if ((bX(bY)._1 == 0))
395404 then throw("No open position")
396405 else true
397406
398407
399-func cf (cg) = {
400- let ch = getString(this, cg)
401- if (if (isDefined(ch))
402- then (value(ch) != "")
408+func cj (ck) = {
409+ let cl = getString(this, ck)
410+ if (if (isDefined(cl))
411+ then (value(cl) != "")
403412 else false)
404413 then {
405- let ci = split(value(ch), ",")
406- let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407- let ck = ci[1]
408- let cl = ci[2]
409- let cm = ci[3]
410- $Tuple4(cj, ck, cl, cm)
414+ let cm = split(value(cl), ",")
415+ let cn = valueOrErrorMessage(addressFromString(cm[0]), ("Invalid oracle address in: " + value(cl)))
416+ let co = cm[1]
417+ let cp = cm[2]
418+ let cq = cm[3]
419+ $Tuple4(cn, co, cp, cq)
411420 }
412421 else unit
413422 }
414423
415424
416-func cn () = valueOrElse(getBoolean(this, m), false)
425+func cr () = valueOrElse(getBoolean(this, m), false)
417426
418427
419-func co () = valueOrElse(getBoolean(this, n), false)
428+func cs () = valueOrElse(getBoolean(this, n), false)
420429
421430
422-func cp () = valueOrElse(getBoolean(this, o), false)
431+func ct () = valueOrElse(getBoolean(this, o), false)
423432
424433
425-func cq (cr,cs,ct) = if (cr)
434+func cu (cv,cw,cx) = if (cv)
426435 then {
427- let cu = (bk() - ct)
428- if ((0 >= cu))
436+ let cy = (bn() - cx)
437+ if ((0 >= cy))
429438 then throw("Tx lead to base asset reserve <= 0, revert")
430- else $Tuple3((bj() + cs), cu, (bn() + ct))
439+ else $Tuple3((bm() + cw), cy, (bq() + cx))
431440 }
432441 else {
433- let cv = (bj() - cs)
434- if ((0 >= cv))
442+ let cz = (bm() - cw)
443+ if ((0 >= cz))
435444 then throw("Tx lead to base quote reserve <= 0, revert")
436- else $Tuple3(cv, (bk() + ct), (bn() - ct))
445+ else $Tuple3(cz, (bn() + cx), (bq() - cx))
437446 }
438447
439448
440-func cw (cx,cy) = {
441- let cz = toBigInt(cx)
442- let cA = toBigInt(cy)
443- aO(cz, cA)
449+func cA (cB,cC) = {
450+ let cD = toBigInt(cB)
451+ let cE = toBigInt(cC)
452+ aR(cD, cE)
444453 }
445454
446455
447-func cB (cr,cs) = {
448- let cx = bj()
449- let cy = bk()
450- let cC = bl()
451- let cD = bm()
452- let cE = aK(cs, cC)
453- let aZ = cw(cx, cy)
454- let cF = if (cr)
455- then (cx + cE)
456- else (cx - cE)
457- let cG = toInt(aN(aZ, toBigInt(cF)))
458- let cH = aP((cG - cy))
459- let cI = if (cr)
460- then cH
461- else -(cH)
462- let cJ = cq(cr, cE, cH)
463- let cK = cJ._1
464- let cL = cJ._2
465- let cM = cJ._3
466- let cN = aK(aM(cx, cC), aM(cy, cD))
467- let cO = aK(cs, cH)
468- let cP = aP((cN - cO))
469- let cQ = (aD - aK(cN, (cN + cP)))
470- let cR = bz()
471- if ((cQ > cR))
472- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473- else $Tuple4(cI, cK, cL, cM)
456+func cF (cv,cw) = {
457+ let cB = bm()
458+ let cC = bn()
459+ let cG = bo()
460+ let cH = bp()
461+ let cI = aN(cw, cG)
462+ let bc = cA(cB, cC)
463+ let cJ = if (cv)
464+ then (cB + cI)
465+ else (cB - cI)
466+ let cK = toInt(aQ(bc, toBigInt(cJ)))
467+ let cL = aS((cK - cC))
468+ let cM = if (cv)
469+ then cL
470+ else -(cL)
471+ let cN = cu(cv, cI, cL)
472+ let cO = cN._1
473+ let cP = cN._2
474+ let cQ = cN._3
475+ let cR = aN(aP(cB, cG), aP(cC, cH))
476+ let cS = aN(cw, cL)
477+ let cT = aS((cR - cS))
478+ let cU = (aE - aN(cR, (cR + cT)))
479+ let cV = bC()
480+ if ((cU > cV))
481+ then throw(((((((((((((("Price impact " + toString(cU)) + " > max price impact ") + toString(cV)) + " before quote asset: ") + toString(cB)) + " before base asset: ") + toString(cC)) + " quote asset amount to exchange: ") + toString(cw)) + " price before: ") + toString(cR)) + " marketPrice: ") + toString(cS)))
482+ else $Tuple4(cM, cO, cP, cQ)
474483 }
475484
476485
477-func cS (cT,cU) = {
478- let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479- let cW = aK(aM(aM(cT, cV), bh()), aE)
480- cW
486+func cW (cX,cY) = {
487+ let cZ = ((((bN() - cY) / 1000) / 60) * aE)
488+ let da = aN(aP(aP(cX, cZ), bk()), aF)
489+ da
481490 }
482491
483492
484-func cX (cY,cT,cZ,cU,da) = {
485- let db = if ((cY != 0))
493+func db (dc,cX,dd,cY,de) = {
494+ let df = if ((dc != 0))
486495 then {
487- let dc = bR(cY)
488- aM((dc - cZ), cY)
496+ let dg = bV(dc)
497+ aP((dg - dd), dc)
489498 }
490499 else 0
491- let cW = cS(cT, cU)
492- let dd = (((da - cW) - db) + cT)
493- let de = if ((0 > dd))
494- then $Tuple2(0, aP(dd))
495- else $Tuple2(aP(dd), 0)
496- let df = de._1
497- let dg = de._2
498- $Tuple4(df, dg, db, cW)
500+ let da = cW(cX, cY)
501+ let dh = (((de - da) - df) + cX)
502+ let di = if ((0 > dh))
503+ then $Tuple2(0, aS(dh))
504+ else $Tuple2(aS(dh), 0)
505+ let dj = di._1
506+ let dk = di._2
507+ $Tuple4(dj, dk, df, da)
499508 }
500509
501510
502-func dh (cr,ct,di,dj,dk,dl,dm) = {
503- let cN = aK(aM(dj, dk), aM(dl, dm))
504- if ((ct == 0))
511+func dl (cv,cx,dm,dn,do,dp,dq) = {
512+ let cR = aN(aP(dn, do), aP(dp, dq))
513+ if ((cx == 0))
505514 then throw("Invalid base asset amount")
506515 else {
507- let aZ = cw(dj, dl)
508- let dn = if (cr)
509- then (dl + ct)
510- else (dl - ct)
511- let do = toInt(aN(aZ, toBigInt(dn)))
512- let dp = aP((do - dj))
513- let dq = aM(dp, dk)
514- let cR = bz()
515- let dr = cq(!(cr), dp, ct)
516- let cK = dr._1
517- let cL = dr._2
518- let cM = dr._3
519- let cO = aK(dq, ct)
520- let cP = aP((cN - cO))
521- let cQ = (aD - aK(cN, (cN + cP)))
522- if (if ((cQ > cR))
523- then di
516+ let bc = cA(dn, dp)
517+ let dr = if (cv)
518+ then (dp + cx)
519+ else (dp - cx)
520+ let ds = toInt(aQ(bc, toBigInt(dr)))
521+ let dt = aS((ds - dn))
522+ let du = aP(dt, do)
523+ let cV = bC()
524+ let dv = cu(!(cv), dt, cx)
525+ let cO = dv._1
526+ let cP = dv._2
527+ let cQ = dv._3
528+ let cS = aN(du, cx)
529+ let cT = aS((cR - cS))
530+ let cU = (aE - aN(cR, (cR + cT)))
531+ if (if ((cU > cV))
532+ then dm
524533 else false)
525- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526- else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527- then aP(ct)
528- else 0)), (bE() - (if (!(cr))
529- then aP(ct)
530- else 0)), cQ)
534+ then throw(((((((((((((("Price impact " + toString(cU)) + " > max price impact ") + toString(cV)) + " before quote asset: ") + toString(dn)) + " before base asset: ") + toString(dp)) + " base asset amount to exchange: ") + toString(cx)) + " price before: ") + toString(cR)) + " market price: ") + toString(cS)))
535+ else $Tuple7(du, cO, cP, cQ, (bI() - (if (cv)
536+ then aS(cx)
537+ else 0)), (bH() - (if (!(cv))
538+ then aS(cx)
539+ else 0)), cU)
531540 }
532541 }
533542
534543
535-func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
544+func dw (cv,cx,dm) = dl(cv, cx, dm, bm(), bo(), bn(), bp())
536545
537546
538-func dt (du,ck,cl) = {
539- let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540- if ((cl != ""))
547+func dx (dy,co,cp) = {
548+ let dz = valueOrErrorMessage(getInteger(dy, co), ((("Can not get oracle price. Oracle: " + toString(dy)) + " key: ") + co))
549+ if ((cp != ""))
541550 then {
542- let dw = lastBlock.height
543- let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544- if (((dw - dx) > bI()))
545- then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546- else dv
551+ let dA = lastBlock.height
552+ let dB = valueOrErrorMessage(getInteger(dy, cp), ((("Can not get oracle block. Oracle: " + toString(dy)) + " key: ") + cp))
553+ if (((dA - dB) > bL()))
554+ then throw(((("Oracle stale data. Last oracle block: " + toString(dB)) + " current block: ") + toString(dA)))
555+ else dz
547556 }
548- else dv
557+ else dz
549558 }
550559
551560
552-func dy () = {
553- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554- let dA = dt(dz._1, dz._2, dz._3)
555- let dB = cf(b)
556- let dC = if (isDefined(dB))
561+func dC () = {
562+ let dD = valueOrErrorMessage(cj(a), "No base asset oracle data")
563+ let dE = dx(dD._1, dD._2, dD._3)
564+ let dF = cj(b)
565+ let dG = if (isDefined(dF))
557566 then {
558- let dD = value(dB)
559- dt(dD._1, dD._2, dD._3)
567+ let dH = value(dF)
568+ dx(dH._1, dH._2, dH._3)
560569 }
561- else aD
562- aK(dA, dC)
570+ else aE
571+ aN(dE, dG)
563572 }
564573
565574
566-func dE () = {
567- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568- let du = dz._1
569- let cm = dz._4
570- if ((cm != ""))
575+func dI () = {
576+ let dD = valueOrErrorMessage(cj(a), "No base asset oracle data")
577+ let dy = dD._1
578+ let cq = dD._4
579+ if ((cq != ""))
571580 then {
572- let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573- !(dF)
581+ let dJ = valueOrErrorMessage(getBoolean(dy, cq), ((("Can not get oracle is open/closed. Oracle: " + toString(dy)) + " key: ") + cq))
582+ !(dJ)
574583 }
575584 else false
576585 }
577586
578587
579-func dG (dH,dj,dl,cC,cD) = {
580- let dI = aK(aM(dj, cC), aM(dl, cD))
581- let dJ = aK((dH + dI), (2 * aD))
582- let dG = aK(aP((dH - dI)), dJ)
583- dG
588+func dK (dL,dn,dp,cG,cH) = {
589+ let dM = aN(aP(dn, cG), aP(dp, cH))
590+ let dN = aN((dL + dM), (2 * aE))
591+ let dK = aN(aS((dL - dM)), dN)
592+ dK
584593 }
585594
586595
587-func dK (dj,dl) = {
588- let dL = dy()
589- let cC = bl()
590- let cD = bm()
591- let dM = dG(dL, bj(), bk(), cC, cD)
592- let dN = dG(dL, dj, dl, cC, cD)
593- if (if ((dN > bA()))
594- then (dN > dM)
596+func dO (dn,dp) = {
597+ let dP = dC()
598+ let cG = bo()
599+ let cH = bp()
600+ let dQ = dK(dP, bm(), bn(), cG, cH)
601+ let dR = dK(dP, dn, dp, cG, cH)
602+ if (if ((dR > bD()))
603+ then (dR > dQ)
595604 else false)
596- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
605+ then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bD())))
597606 else true
598607 }
599608
600609
601-func dO (dP,dQ) = {
602- let dR = bB()
603- if ((dP > dR))
604- then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605- else if ((dQ > dR))
606- then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
610+func dS (dT,dU) = {
611+ let dV = bE()
612+ if ((dT > dV))
613+ then throw(((("Long open notional " + toString(dT)) + " > max open notional ") + toString(dV)))
614+ else if ((dU > dV))
615+ then throw(((("Short open notional " + toString(dU)) + " > max open notional ") + toString(dV)))
607616 else true
608617 }
609618
610619
611-func dS () = {
612- let dj = bj()
613- let dl = bk()
614- let cC = bl()
615- let cD = bm()
616- aK(aM(dj, cC), aM(dl, cD))
620+func dW () = {
621+ let dn = bm()
622+ let dp = bn()
623+ let cG = bo()
624+ let cH = bp()
625+ aN(aP(dn, cG), aP(dp, cH))
617626 }
618627
619628
620-func dT () = {
621- let dL = dy()
622- let dU = dS()
623- (aK(aP((dL - dU)), dL) > by())
629+func dX () = {
630+ let dP = dC()
631+ let dY = dW()
632+ (aN(aS((dP - dY)), dP) > bB())
624633 }
625634
626635
627-func dV (bS,dW,dj,dk,dl,dm) = {
628- let dX = aP(bS)
629- let dY = (0 > bS)
630- let dZ = if ((dW == aG))
636+func dZ (bW,ea,dn,do,dp,dq) = {
637+ let eb = aS(bW)
638+ let ec = (0 > bW)
639+ let ed = if ((ea == aH))
631640 then {
632- let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633- ea
641+ let ee = dl(!(ec), eb, false, dn, do, dp, dq)._1
642+ ee
634643 }
635- else aM(dX, dy())
636- dZ
644+ else aP(eb, dC())
645+ ed
637646 }
638647
639648
640-func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
649+func ef (bW,eg,dn,do,dp,dq,ea) = if ((bW == 0))
641650 then throw("Invalid position size")
642651 else {
643- let dY = (0 > bS)
644- let dZ = dV(bS, dW, dj, dk, dl, dm)
645- let ed = if (dY)
646- then (ec - dZ)
647- else (dZ - ec)
648- $Tuple2(dZ, ed)
652+ let ec = (0 > bW)
653+ let ed = dZ(bW, ea, dn, do, dp, dq)
654+ let eh = if (ec)
655+ then (eg - ed)
656+ else (ed - eg)
657+ $Tuple2(ed, eh)
649658 }
650659
651660
652-func ee (bU,dW) = {
653- let ef = bT(bU)
654- let bX = ef._1
655- let eg = ef._2
656- let eh = ef._3
657- let ei = ef._4
658- eb(bX, eh, bj(), bl(), bk(), bm(), dW)
661+func ei (bY,ea) = {
662+ let ej = bX(bY)
663+ let cb = ej._1
664+ let ek = ej._2
665+ let el = ej._3
666+ let em = ej._4
667+ ef(cb, el, bm(), bo(), bn(), bp(), ea)
659668 }
660669
661670
662-func ej (ek,el,em) = aK((ek - el), em)
671+func en (eo,ep,eq) = aN((eo - ep), eq)
663672
664673
665-func en (bU,dW) = {
666- let eo = bT(bU)
667- let bX = eo._1
668- let eg = eo._2
669- let ep = eo._3
670- let eq = eo._4
671- let er = eo._5
672- let es = ee(bU, dW)
673- let dZ = es._1
674- let ed = es._2
675- let et = cX(bX, eg, eq, er, ed)
676- let df = et._1
677- let dg = et._2
678- ej(df, dg, dZ)
674+func er (bY,ea) = {
675+ let es = bX(bY)
676+ let cb = es._1
677+ let ek = es._2
678+ let et = es._3
679+ let eu = es._4
680+ let ev = es._5
681+ let ew = ei(bY, ea)
682+ let ed = ew._1
683+ let eh = ew._2
684+ let ex = db(cb, ek, eu, ev, eh)
685+ let dj = ex._1
686+ let dk = ex._2
687+ en(dj, dk, ed)
679688 }
680689
681690
682-func eu (bU) = en(bU, aG)
691+func ey (bY) = er(bY, aH)
683692
684693
685-func ev (bU,bS) = {
686- let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687- let ex = aM(aP(bS), ew)
688- let ey = ds((bS > 0), ex, false)
689- let ez = ey._1
690- let cQ = ey._7
691- if ((bz() > cQ))
692- then ex
693- else aM(aP(bS), bx())
694+func ez (bY,bW) = {
695+ let eA = aT(bA(), (aE - aN(ey(bY), by())))
696+ let eB = aP(aS(bW), eA)
697+ let eC = dw((bW > 0), eB, false)
698+ let eD = eC._1
699+ let cU = eC._7
700+ if ((bC() > cU))
701+ then eB
702+ else aP(aS(bW), bA())
694703 }
695704
696705
697-func eA (bU,eB,eC,eD,eE,di,eF) = {
698- let eG = bT(bU)
699- let eH = eG._1
700- let eI = eG._2
701- let eJ = eG._3
702- let eK = eG._4
703- let eL = eG._5
704- let eM = (eH > 0)
705- let eN = aP(eH)
706- if (if ((eN >= eB))
707- then (eB > 0)
706+func eE (bY,eF,eG,eH,eI,dm,eJ) = {
707+ let eK = bX(bY)
708+ let eL = eK._1
709+ let eM = eK._2
710+ let eN = eK._3
711+ let eO = eK._4
712+ let eP = eK._5
713+ let eQ = (eL > 0)
714+ let eR = aS(eL)
715+ if (if ((eR >= eF))
716+ then (eF > 0)
708717 else false)
709718 then {
710- let eO = (eN > eB)
711- let eP = ds((eH > 0), eB, di)
712- let eQ = eP._1
713- let cF = eP._2
714- let cG = eP._3
715- let eR = eP._4
716- let eS = if ((eH > 0))
717- then -(eB)
718- else eB
719- let eT = ee(bU, aG)
719+ let eS = (eR > eF)
720+ let eT = dw((eL > 0), eF, dm)
720721 let eU = eT._1
721- let ed = eT._2
722- let eV = aK(aP(eS), eN)
723- let eW = aM(ed, eV)
724- let eX = cX(eH, eI, eK, eL, ed)
722+ let cJ = eT._2
723+ let cK = eT._3
724+ let eV = eT._4
725+ let eW = if ((eL > 0))
726+ then -(eF)
727+ else eF
728+ let eX = ei(bY, aH)
725729 let eY = eX._1
726- let eZ = eX._2
727- let fa = eX._3
728- let cW = eX._4
729- let fb = cX(eH, eI, eK, eL, eW)._2
730- let fc = aM(aM(eU, eV), eC)
731- let fd = (ed - eW)
732- let fe = if ((eH > 0))
733- then ((eU - eQ) - fd)
734- else ((fd + eU) - eQ)
735- let ff = (eH + eS)
736- let fg = if ((ff == 0))
730+ let eh = eX._2
731+ let eZ = aN(aS(eW), eR)
732+ let fa = aP(eh, eZ)
733+ let fb = db(eL, eM, eO, eP, eh)
734+ let fc = fb._1
735+ let fd = fb._2
736+ let fe = fb._3
737+ let da = fb._4
738+ let ff = db(eL, eM, eO, eP, fa)._2
739+ let fg = aP(aP(eY, eZ), eG)
740+ let fh = (eh - fa)
741+ let fi = if ((eL > 0))
742+ then ((eY - eU) - fh)
743+ else ((fh + eY) - eU)
744+ let fj = (eL + eW)
745+ let fk = if ((fj == 0))
737746 then $Tuple2(0, 0)
738- else $Tuple2(aP(fe), bR(ff))
739- let fh = fg._1
740- let fi = fg._2
741- let fj = (eJ - fh)
742- let fk = en(bU, aG)
743- let fl = if ((eH > 0))
744- then (aM((fh + fd), fk) - fd)
745- else (aM((fh - fd), fk) - fd)
746- let fm = ((eY - (fl + fd)) - fc)
747- let fn = if ((0 > fm))
748- then if (eF)
747+ else $Tuple2(aS(fi), bV(fj))
748+ let fl = fk._1
749+ let fm = fk._2
750+ let fn = (eN - fl)
751+ let fo = er(bY, aH)
752+ let fp = if ((eL > 0))
753+ then (aP((fl + fh), fo) - fh)
754+ else (aP((fl - fh), fo) - fh)
755+ let fq = ((fc - (fp + fh)) - fg)
756+ let fr = if ((0 > fq))
757+ then if (eJ)
749758 then 0
750759 else throw("Invalid internalClosePosition params: unable to pay fee")
751- else fm
752- let fo = if (eE)
753- then (fl + fn)
754- else fl
755- if (if ((eD != 0))
756- then (eD > eQ)
760+ else fq
761+ let fs = if (eI)
762+ then (fp + fr)
763+ else fp
764+ if (if ((eH != 0))
765+ then (eH > eU)
757766 else false)
758- then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759- else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760- then eO
767+ then throw(((("Limit error: " + toString(eU)) + " < ") + toString(eH)))
768+ else $Tuple17(fj, fs, fl, fm, ff, fa, if (if (eI)
769+ then eS
761770 else false)
762771 then 0
763- else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764- then aP(eS)
765- else 0)), (bE() - (if (!(eM))
766- then aP(eS)
767- else 0)), (bq() - (if (eM)
768- then fj
769- else 0)), (bp() - (if (!(eM))
770- then fj
771- else 0)), (fc + cW), eQ)
772+ else fr, cJ, cK, eV, (br() - fn), (bI() - (if (eQ)
773+ then aS(eW)
774+ else 0)), (bH() - (if (!(eQ))
775+ then aS(eW)
776+ else 0)), (bt() - (if (eQ)
777+ then fn
778+ else 0)), (bs() - (if (!(eQ))
779+ then fn
780+ else 0)), (fg + da), eU)
772781 }
773- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
782+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eF)) + " max: ") + toString(eR)))
774783 }
775784
776785
777-func fp () = {
778- let fq = ((bJ() / 1000) / 60)
779- let fr = (fq - aA)
780- let fs = valueOrElse(getString(this, C), "")
781- let ft = split(fs, ",")
782- func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783- then (fv :+ parseIntValue(fw))
784- else fv
786+func ft () = {
787+ let fu = ((bN() / 1000) / 60)
788+ let fv = (fu - aB)
789+ let fw = valueOrElse(getString(this, D), "")
790+ let fx = split(fw, ",")
791+ func fy (fz,fA) = if ((fv >= valueOrErrorMessage(parseInt(fA), ("getTwapSpotPrice: invalid int: " + fw))))
792+ then (fz :+ parseIntValue(fA))
793+ else fz
785794
786- let fx = {
787- let fy = ft
788- let fz = size(fy)
789- let fA = nil
790- func fB (fC,fD) = if ((fD >= fz))
791- then fC
792- else fu(fC, fy[fD])
795+ let fB = {
796+ let fC = fx
797+ let fD = size(fC)
798+ let fE = nil
799+ func fF (fG,fH) = if ((fH >= fD))
800+ then fG
801+ else fy(fG, fC[fH])
793802
794- func fE (fC,fD) = if ((fD >= fz))
795- then fC
803+ func fI (fG,fH) = if ((fH >= fD))
804+ then fG
796805 else throw("List size exceeds 20")
797806
798- fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
807+ fI(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fF(fE, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
799808 }
800- let fF = if ((size(fx) > 0))
801- then max(fx)
802- else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803- let fG = valueOrElse(getInteger(this, D), 0)
804- let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805- let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806- let fJ = (fH + ((fq - fG) * fI))
807- let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808- let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809- let fM = (fK + ((fr - fF) * fL))
810- ((fJ - fM) / aA)
809+ let fJ = if ((size(fB) > 0))
810+ then max(fB)
811+ else valueOrErrorMessage(parseInt(fx[0]), ("getTwapSpotPrice: invalid int: " + fw))
812+ let fK = valueOrElse(getInteger(this, E), 0)
813+ let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fK))), 0)
814+ let fM = valueOrElse(getInteger(this, ((G + "_") + toString(fK))), 0)
815+ let fN = (fL + ((fu - fK) * fM))
816+ let fO = valueOrElse(getInteger(this, ((F + "_") + toString(fJ))), 0)
817+ let fP = valueOrElse(getInteger(this, ((G + "_") + toString(fJ))), 0)
818+ let fQ = (fO + ((fv - fJ) * fP))
819+ ((fN - fQ) / aB)
811820 }
812821
813822
814-func fN () = {
815- let bS = bn()
816- if ((bS == 0))
817- then $Tuple2(bj(), bk())
823+func fR () = {
824+ let bW = bq()
825+ if ((bW == 0))
826+ then $Tuple2(bm(), bn())
818827 else {
819- let fO = (bS > 0)
820- let fP = ds(fO, aP(bS), false)
821- let fQ = fP._1
822- let fR = fP._2
823- let fS = fP._3
824- $Tuple2(fR, fS)
828+ let fS = (bW > 0)
829+ let fT = dw(fS, aS(bW), false)
830+ let fU = fT._1
831+ let fV = fT._2
832+ let fW = fT._3
833+ $Tuple2(fV, fW)
825834 }
826835 }
827836
828837
829-func fT (fU,bn,fV,fW) = {
830- let fX = toBigInt(fU)
831- let fY = toBigInt(bn)
832- let fZ = toBigInt(fV)
833- let ga = toBigInt(fW)
834- let aZ = aO(fZ, fX)
835- let gb = (fX + fY)
836- let gc = aN(aZ, gb)
837- let gd = aN(gc, gb)
838- let ge = aN(ga, gd)
839- toInt(ge)
838+func fX (fY,bq,fZ,ga) = {
839+ let gb = toBigInt(fY)
840+ let gc = toBigInt(bq)
841+ let gd = toBigInt(fZ)
842+ let ge = toBigInt(ga)
843+ let bc = aR(gd, gb)
844+ let gf = (gb + gc)
845+ let gg = aQ(bc, gf)
846+ let gh = aQ(gg, gf)
847+ let gi = aQ(ge, gh)
848+ toInt(gi)
840849 }
841850
842851
843-func gf (gg,cx,cy) = {
844- let bS = bn()
845- if ((bS == 0))
852+func gj (gk,cB,cC) = {
853+ let bW = bq()
854+ if ((bW == 0))
846855 then {
847- let gh = aK(aM(gg, cy), cx)
848- $Tuple3(gh, aD, 0)
856+ let gl = aN(aP(gk, cC), cB)
857+ $Tuple3(gl, aE, 0)
849858 }
850859 else {
851- let fO = (bS > 0)
852- let fQ = ds(fO, aP(bS), false)._1
853- let gh = fT(cy, bS, cx, gg)
854- let gi = aD
855- let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856- $Tuple3(gh, gi, gj)
860+ let fS = (bW > 0)
861+ let fU = dw(fS, aS(bW), false)._1
862+ let gl = fX(cC, bW, cB, gk)
863+ let gm = aE
864+ let gn = ef(bW, fU, cB, gl, cC, gm, aH)._2
865+ $Tuple3(gl, gm, gn)
857866 }
858867 }
859868
860869
861-func gk () = {
862- let gl = dy()
863- let gm = fp()
864- let gn = (gm - gl)
865- if (if (if ((bE() == 0))
870+func go () = {
871+ let gp = dC()
872+ let gq = ft()
873+ let gr = (gq - gp)
874+ if (if (if ((bH() == 0))
866875 then true
867- else (bF() == 0))
876+ else (bI() == 0))
868877 then true
869- else dE())
870- then $Tuple2(0, 0)
871- else if ((0 > gn))
878+ else dI())
879+ then $Tuple3(0, 0, 0)
880+ else if ((0 > gr))
872881 then {
873- let go = aK(aM(gn, bt()), aF)
874- let gp = aK(aM(go, bE()), bF())
875- $Tuple2(go, gp)
882+ let gs = aN(aP(gr, bw()), aG)
883+ if ((bM() == aJ))
884+ then {
885+ let gt = aN(aP(gs, bH()), bI())
886+ $Tuple3(gs, gt, 0)
887+ }
888+ else {
889+ let gu = aS(aP(gs, bH()))
890+ let gv = aS(aP(gs, bI()))
891+ let gw = (gu - gv)
892+ $Tuple3(gs, gs, gw)
893+ }
876894 }
877895 else {
878- let gp = aK(aM(gn, bt()), aF)
879- let go = aK(aM(gp, bF()), bE())
880- $Tuple2(go, gp)
896+ let gt = aN(aP(gr, bw()), aG)
897+ if ((bM() == aJ))
898+ then {
899+ let gs = aN(aP(gt, bI()), bH())
900+ $Tuple3(gs, gt, 0)
901+ }
902+ else {
903+ let gv = aS(aP(gt, bI()))
904+ let gu = aS(aP(gt, bH()))
905+ let gw = (gv - gu)
906+ $Tuple3(gt, gt, gw)
907+ }
881908 }
882909 }
883910
884911
885-func gq (gr,gs) = {
886- let gt = bg()
887- let gu = aM(gt, gs)
888- let gv = if ((gr != ""))
912+func gx (gy,gz) = {
913+ let gA = bj()
914+ let gB = aP(gA, gz)
915+ let gC = if ((gy != ""))
889916 then {
890- let gw = bc(au(), ai(aw, gr))
891- if ((gw == ax))
917+ let gD = bf(av(), aj(ax, gy))
918+ if ((gD == ay))
892919 then {
893- let gx = be(au(), ai(av, gr))
894- let gy = aM(gu, gx)
895- $Tuple2(gy, true)
920+ let gE = bh(av(), aj(aw, gy))
921+ let gF = aP(gB, gE)
922+ $Tuple2(gF, true)
896923 }
897924 else throw("Invalid attached artifact")
898925 }
899- else $Tuple2(gu, false)
900- let gy = gv._1
901- let gz = gv._2
902- $Tuple2(gy, gz)
926+ else $Tuple2(gB, false)
927+ let gF = gC._1
928+ let gG = gC._2
929+ $Tuple2(gF, gG)
903930 }
904931
905932
906-func gA (bU,gB) = {
907- let eH = bT(bU)._1
908- if ((eH == 0))
933+func gH (bY,gI) = {
934+ let eL = bX(bY)._1
935+ if ((eL == 0))
909936 then true
910- else (bY(bU) == gB)
937+ else (cc(bY) == gI)
911938 }
912939
913940
914-func gC (bU,gB) = (bY(bU) == gB)
941+func gJ (bY,gI) = (cc(bY) == gI)
915942
916943
917-func gD (bU,gr) = {
918- let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919- if ((gE == gE))
944+func gK (bY,gy) = {
945+ let gL = invoke(as(), "computeFeeDiscount", [bY], nil)
946+ if ((gL == gL))
920947 then {
921- let gF = {
922- let bW = gE
923- if ($isInstanceOf(bW, "Int"))
948+ let gM = {
949+ let ca = gL
950+ if ($isInstanceOf(ca, "Int"))
924951 then {
925- let gG = bW
926- gG
952+ let gN = ca
953+ gN
927954 }
928955 else throw("Invalid computeFeeDiscount result")
929956 }
930- let gH = gq(gr, gF)
931- let gy = gH._1
932- let gz = gH._2
933- $Tuple2(gy, gz)
957+ let gO = gx(gy, gM)
958+ let gF = gO._1
959+ let gG = gO._2
960+ $Tuple2(gF, gG)
934961 }
935962 else throw("Strict value is not equal to itself.")
936963 }
937964
938965
939-func gI (bL) = {
940- let gJ = if ((size(bL.payments) > 1))
941- then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
966+func gP (bP) = {
967+ let gQ = if ((size(bP.payments) > 1))
968+ then toBase58String(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifactId"))
942969 else ""
943- gJ
970+ gQ
944971 }
945972
946973
947-func gK (gL) = {
948- let gM = aM(gL, bH())
949- let gN = (gL - gM)
950- $Tuple2(gM, gN)
974+func gR (gS) = {
975+ let gT = aP(gS, bK())
976+ let gU = (gS - gT)
977+ $Tuple2(gT, gU)
951978 }
952979
953980
954-func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
981+func gV (gW,gX,gY,gZ,eG,ha,hb,hc,hd,dV,he,hf,hg,hh) = [IntegerEntry(s, gW), IntegerEntry(t, gX), IntegerEntry(u, gY), IntegerEntry(r, gZ), IntegerEntry(p, eG), IntegerEntry(w, ha), IntegerEntry(x, hb), IntegerEntry(v, hc), IntegerEntry(y, hd), IntegerEntry(z, dV), IntegerEntry(A, he), IntegerEntry(B, he), IntegerEntry(q, hg), IntegerEntry(C, hh)]
955982
956983
957-func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
984+func hi (hj,hk,hl,hm,hn) = [IntegerEntry(K, hj), IntegerEntry(I, hk), IntegerEntry(J, hl), IntegerEntry(L, hm), IntegerEntry(M, hn)]
958985
959986
960-func hg (hh,ak) = if (hh)
987+func ho (hp,al) = if (hp)
961988 then {
962- let hi = bG()
963-[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
989+ let hq = bJ()
990+[IntegerEntry(aj(i, al), (hq + 1)), IntegerEntry(d, (hq + 1))]
964991 }
965992 else nil
966993
967994
968-func hj (hh,ak,eC) = if (hh)
969- then [IntegerEntry(ai(k, ak), eC)]
995+func hr (hp,al,eG) = if (hp)
996+ then [IntegerEntry(aj(k, al), eG)]
970997 else nil
971998
972999
973-func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
1000+func hs (al,eF,ht,hu,dg,hv) = [IntegerEntry(aj(e, al), eF), IntegerEntry(aj(f, al), ht), IntegerEntry(aj(g, al), hu), IntegerEntry(aj(h, al), dg), IntegerEntry(aj(l, al), hv)]
9741001
9751002
976-func ho (hp) = {
977- let fq = ((bJ() / 1000) / 60)
978- let hq = valueOrElse(getInteger(this, D), 0)
979- if ((hq > fq))
1003+func hw (hx) = {
1004+ let fu = ((bN() / 1000) / 60)
1005+ let hy = valueOrElse(getInteger(this, E), 0)
1006+ if ((hy > fu))
9801007 then throw("TWAP out-of-order")
9811008 else {
982- let fG = if ((hq == 0))
983- then fq
984- else hq
985- if ((fq > hq))
1009+ let fK = if ((hy == 0))
1010+ then fu
1011+ else hy
1012+ if ((fu > hy))
9861013 then {
987- let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988- let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989- let ht = (hr + ((fq - fG) * hs))
990- let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
1014+ let hz = valueOrElse(getInteger(this, ((F + "_") + toString(hy))), 0)
1015+ let hA = valueOrElse(getInteger(this, ((G + "_") + toString(hy))), hx)
1016+ let hB = (hz + ((fu - fK) * hA))
1017+ let fx = aY(aW(valueOrElse(getString(this, D), "")), aB, toString(fu))
1018+[IntegerEntry(aj(F, toString(fu)), hB), IntegerEntry(aj(G, toString(fu)), hx), IntegerEntry(aj(H, toString(fu)), hy), IntegerEntry(E, fu), StringEntry(D, aU(fx))]
9921019 }
9931020 else {
994- let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995- let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996- let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997- let ht = (hr + ((fq - hu) * hs))
998-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
1021+ let hC = valueOrElse(getInteger(this, aj(H, toString(fu))), 0)
1022+ let hz = valueOrElse(getInteger(this, aj(F, toString(hC))), 0)
1023+ let hA = valueOrElse(getInteger(this, aj(G, toString(hC))), hx)
1024+ let hB = (hz + ((fu - hC) * hA))
1025+[IntegerEntry(aj(F, toString(fu)), hB), IntegerEntry(aj(G, toString(fu)), hx)]
9991026 }
10001027 }
10011028 }
10021029
10031030
1004-func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
1031+func hD (cB,cC) = [IntegerEntry(N, cB), IntegerEntry(O, cC)]
10051032
10061033
1007-func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
1034+func hE (cG,cH) = [IntegerEntry(P, cG), IntegerEntry(Q, cH)]
10081035
10091036
1010-func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011- let cC = bl()
1012- let cD = bm()
1013- if (((hA - hB) != hy))
1014- then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015- else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
1037+func hF (cB,cC,hG,hH,hI,hJ,hK,hL) = {
1038+ let cG = bo()
1039+ let cH = bp()
1040+ if (((hI - hJ) != hG))
1041+ then throw(((((("Invalid AMM state data: " + toString(hI)) + " + ") + toString(hJ)) + " != ") + toString(hG)))
1042+ else ((hD(cB, cC) ++ [IntegerEntry(R, hG), IntegerEntry(U, hH), IntegerEntry(S, hI), IntegerEntry(T, hJ), IntegerEntry(W, hK), IntegerEntry(V, hL)]) ++ hw(aN(aP(cB, cG), aP(cC, cH))))
10161043 }
10171044
10181045
1019-func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
1046+func hM (al) = [DeleteEntry(aj(e, al)), DeleteEntry(aj(f, al)), DeleteEntry(aj(g, al)), DeleteEntry(aj(h, al)), DeleteEntry(aj(j, al)), DeleteEntry(aj(k, al)), DeleteEntry(aj(l, al))]
10201047
10211048
1022-func hF (ak,hG) = {
1023- let hH = assetBalance(this, an())
1024- if ((hG > hH))
1025- then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026- else [ScriptTransfer(ak, hG, an())]
1049+func hN (al,hO) = {
1050+ let hP = assetBalance(this, ao())
1051+ if ((hO > hP))
1052+ then throw(((("Unable to withdraw " + toString(hO)) + " from contract balance ") + toString(hP)))
1053+ else [ScriptTransfer(al, hO, ao())]
10271054 }
10281055
10291056
1030-func hI (bL) = if ((0 > bL))
1057+func hQ (bP) = if ((0 > bP))
10311058 then throw("Balance")
1032- else [IntegerEntry(c, bL)]
1059+ else [IntegerEntry(c, bP)]
10331060
10341061
1035-func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
1062+func hR (bP) = [ScriptTransfer(aq(), bP, ao())]
10361063
10371064
1038-func hK (hL,bL) = if (hL)
1039- then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
1065+func hS (hT,bP) = if (hT)
1066+ then [Burn(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifact"), 1)]
10401067 else nil
10411068
10421069
1043-@Callable(bL)
1044-func pause () = if ((bL.caller != am()))
1070+@Callable(bP)
1071+func pause () = if ((bP.caller != an()))
10451072 then throw("Invalid pause params")
10461073 else [BooleanEntry(n, true)]
10471074
10481075
10491076
1050-@Callable(bL)
1051-func unpause () = if ((bL.caller != am()))
1077+@Callable(bP)
1078+func unpause () = if ((bP.caller != an()))
10521079 then throw("Invalid unpause params")
10531080 else [BooleanEntry(n, false)]
10541081
10551082
10561083
1057-@Callable(bL)
1058-func setCloseOnly () = if ((bL.caller != am()))
1084+@Callable(bP)
1085+func setCloseOnly () = if ((bP.caller != an()))
10591086 then throw("Invalid setCloseOnly params")
10601087 else [BooleanEntry(o, true)]
10611088
10621089
10631090
1064-@Callable(bL)
1065-func unsetCloseOnly () = if ((bL.caller != am()))
1091+@Callable(bP)
1092+func unsetCloseOnly () = if ((bP.caller != an()))
10661093 then throw("Invalid unsetCloseOnly params")
10671094 else [BooleanEntry(o, false)]
10681095
10691096
10701097
1071-@Callable(bL)
1072-func addLiquidity (cs) = if (if ((bL.caller != am()))
1098+@Callable(bP)
1099+func addLiquidity (cw) = if (if ((bP.caller != an()))
10731100 then true
1074- else (0 >= cs))
1101+ else (0 >= cw))
10751102 then throw("Invalid addLiquidity params")
10761103 else {
1077- let cx = bj()
1078- let cy = bk()
1079- let cC = bl()
1080- let cD = bm()
1081- let hM = aK(aM(cx, cC), aM(cy, cD))
1082- let hN = (cx + cs)
1083- let hO = (aK(aM(hN, cC), hM) - cy)
1084- let hP = (cy + hO)
1085- let hQ = gf(dy(), hN, hP)
1086- let hR = hQ._1
1087- let hS = hQ._2
1088- let gj = hQ._3
1089- let hT = if ((gj != 0))
1104+ let cB = bm()
1105+ let cC = bn()
1106+ let cG = bo()
1107+ let cH = bp()
1108+ let hU = aN(aP(cB, cG), aP(cC, cH))
1109+ let hV = (cB + cw)
1110+ let hW = (aN(aP(hV, cG), hU) - cC)
1111+ let hX = (cC + hW)
1112+ let hY = gj(dC(), hV, hX)
1113+ let hZ = hY._1
1114+ let ia = hY._2
1115+ let gn = hY._3
1116+ let ib = if ((gn != 0))
10901117 then {
1091- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092- if ((hT == hT))
1118+ let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1119+ if ((ib == ib))
10931120 then nil
10941121 else throw("Strict value is not equal to itself.")
10951122 }
10961123 else nil
1097- if ((hT == hT))
1098- then (hv(hN, hP) ++ hw(hR, hS))
1124+ if ((ib == ib))
1125+ then (hD(hV, hX) ++ hE(hZ, ia))
10991126 else throw("Strict value is not equal to itself.")
11001127 }
11011128
11021129
11031130
1104-@Callable(bL)
1105-func removeLiquidity (cs) = if (if ((bL.caller != am()))
1131+@Callable(bP)
1132+func removeLiquidity (cw) = if (if ((bP.caller != an()))
11061133 then true
1107- else (cs >= 0))
1134+ else (cw >= 0))
11081135 then throw("Invalid removeLiquidity params")
11091136 else {
1110- let cx = bj()
1111- let cy = bk()
1112- let cC = bl()
1113- let cD = bm()
1114- let hM = aK(aM(cx, cC), aM(cy, cD))
1115- let hN = (cx - cs)
1116- let hU = aP((aK(aM(hN, cC), hM) - cy))
1117- let hP = (cy - hU)
1118- let hV = gf(dy(), hN, hP)
1119- let hR = hV._1
1120- let hS = hV._2
1121- let gj = hV._3
1122- let hT = if ((gj != 0))
1137+ let cB = bm()
1138+ let cC = bn()
1139+ let cG = bo()
1140+ let cH = bp()
1141+ let hU = aN(aP(cB, cG), aP(cC, cH))
1142+ let hV = (cB - cw)
1143+ let ic = aS((aN(aP(hV, cG), hU) - cC))
1144+ let hX = (cC - ic)
1145+ let id = gj(dC(), hV, hX)
1146+ let hZ = id._1
1147+ let ia = id._2
1148+ let gn = id._3
1149+ let ib = if ((gn != 0))
11231150 then {
1124- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125- if ((hT == hT))
1151+ let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1152+ if ((ib == ib))
11261153 then nil
11271154 else throw("Strict value is not equal to itself.")
11281155 }
11291156 else nil
1130- if ((hT == hT))
1131- then (hv(hN, hP) ++ hw(hR, hS))
1157+ if ((ib == ib))
1158+ then (hD(hV, hX) ++ hE(hZ, ia))
11321159 else throw("Strict value is not equal to itself.")
11331160 }
11341161
11351162
11361163
1137-@Callable(bL)
1138-func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
1164+@Callable(bP)
1165+func changeSettings (gW,gX,gY,gZ,eG,ha,hb,hc,hd,dV,he,hf,hg,hh) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gZ))
1166+ then true
1167+ else (0 >= gW))
1168+ then true
1169+ else (0 >= gX))
1170+ then true
1171+ else (0 >= gY))
1172+ then true
1173+ else (0 >= eG))
1174+ then true
1175+ else (0 >= ha))
1176+ then true
1177+ else (0 >= hb))
1178+ then true
1179+ else (0 >= hc))
1180+ then true
1181+ else (0 >= hd))
1182+ then true
1183+ else (0 >= dV))
1184+ then true
1185+ else (0 >= he))
1186+ then true
1187+ else (he > aE))
1188+ then true
1189+ else (0 >= hf))
1190+ then true
1191+ else (0 >= hg))
1192+ then true
1193+ else if ((hh != aK))
1194+ then (hh != aJ)
1195+ else false)
1196+ then true
1197+ else !(cr()))
1198+ then true
1199+ else (bP.caller != an()))
11391200 then throw("Invalid changeSettings params")
1140- else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
1201+ else gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg, hh)
11411202
11421203
11431204
1144-@Callable(bL)
1145-func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
1205+@Callable(bP)
1206+func initialize (cB,cC,gZ,gW,gX,gY,eG,ie,if,ig,ha,hb,hc,hd,dV,he,hf,hg,hh) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cB))
11461207 then true
1147- else (0 >= cy))
1208+ else (0 >= cC))
11481209 then true
1149- else (0 >= gS))
1150- then true
1151- else (0 >= gP))
1152- then true
1153- else (0 >= gQ))
1154- then true
1155- else (0 >= gR))
1156- then true
1157- else (0 >= eC))
1158- then true
1159- else (0 >= gT))
1160- then true
1161- else (0 >= gU))
1162- then true
1163- else (0 >= gV))
1210+ else (0 >= gZ))
11641211 then true
11651212 else (0 >= gW))
11661213 then true
1167- else (0 >= dR))
1168- then true
11691214 else (0 >= gX))
1170- then true
1171- else (gX > aD))
11721215 then true
11731216 else (0 >= gY))
11741217 then true
1175- else (0 >= gZ))
1218+ else (0 >= eG))
11761219 then true
1177- else cn())
1220+ else (0 >= ha))
11781221 then true
1179- else (bL.caller != this))
1222+ else (0 >= hb))
1223+ then true
1224+ else (0 >= hc))
1225+ then true
1226+ else (0 >= hd))
1227+ then true
1228+ else (0 >= dV))
1229+ then true
1230+ else (0 >= he))
1231+ then true
1232+ else (he > aE))
1233+ then true
1234+ else (0 >= hf))
1235+ then true
1236+ else (0 >= hg))
1237+ then true
1238+ else if ((hh != aK))
1239+ then (hh != aJ)
1240+ else false)
1241+ then true
1242+ else cr())
1243+ then true
1244+ else (bP.caller != this))
11801245 then throw("Invalid initialize parameters")
1181- else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
1246+ else ((((hF(cB, cC, 0, 0, 0, 0, 0, 0) ++ gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg, hh)) ++ hi((bN() + gZ), 0, 0, 0, 0)) ++ hQ(0)) ++ [BooleanEntry(m, true), StringEntry(a, ie), StringEntry(b, if), StringEntry(Y, toString(addressFromStringValue(ig)))])
11821247
11831248
11841249
1185-@Callable(bL)
1186-func increasePosition (hZ,ia,ib,ic) = {
1187- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188- if ((id == id))
1250+@Callable(bP)
1251+func increasePosition (ih,ii,ij,ik) = {
1252+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1253+ if ((il == il))
11891254 then {
1190- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191- if ((ie == ie))
1255+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1256+ if ((im == im))
11921257 then {
1193- let bU = bK(bL)
1194- let if = bL.payments[0].amount
1195- let gB = bL.payments[0].assetId
1196- let ig = toBase58String(value(gB))
1197- let ih = (gB == an())
1198- if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199- then (hZ != az)
1258+ let bY = bO(bP)
1259+ let in = bP.payments[0].amount
1260+ let gI = bP.payments[0].assetId
1261+ let io = toBase58String(value(gI))
1262+ let ip = (gI == ao())
1263+ if (if (if (if (if (if (if (if (if (if ((ih != az))
1264+ then (ih != aA)
12001265 else false)
12011266 then true
1202- else (0 >= if))
1267+ else (0 >= in))
12031268 then true
1204- else !(cn()))
1269+ else !(cr()))
12051270 then true
1206- else !(ih))
1271+ else !(ip))
12071272 then true
1208- else !(gA(bU, ig)))
1273+ else !(gH(bY, io)))
12091274 then true
1210- else !(bM(aK(aD, ia), bi(), true)))
1275+ else !(bQ(aN(aE, ii), bl(), true)))
12111276 then true
1212- else co())
1277+ else cs())
12131278 then true
1214- else cp())
1279+ else ct())
12151280 then true
1216- else dE())
1281+ else dI())
12171282 then throw("Invalid increasePosition parameters")
12181283 else {
1219- let ii = gD(bU, gI(bL))
1220- let gy = ii._1
1221- let gz = ii._2
1222- let hG = aK(if, (aM(gy, ia) + aD))
1223- let ij = (if - hG)
1224- let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225- if ((ik == ik))
1284+ let iq = gK(bY, gP(bP))
1285+ let gF = iq._1
1286+ let gG = iq._2
1287+ let hO = aN(in, (aP(gF, ii) + aE))
1288+ let ir = (in - hO)
1289+ let is = invoke(au(), "acceptPaymentWithLink", [bY, ik], [AttachedPayment(ao(), ir)])
1290+ if ((is == is))
12261291 then {
1227- let il = {
1228- let bW = ik
1229- if ($isInstanceOf(bW, "Int"))
1292+ let it = {
1293+ let ca = is
1294+ if ($isInstanceOf(ca, "Int"))
12301295 then {
1231- let gG = bW
1232- gG
1296+ let gN = ca
1297+ gN
12331298 }
12341299 else throw("Invalid referrerFee")
12351300 }
1236- let im = (ij - il)
1237- let in = bT(bU)
1238- let eH = in._1
1239- let eI = in._2
1240- let eJ = in._3
1241- let eK = in._4
1242- let eL = in._5
1243- let io = (eH == 0)
1244- let ip = if ((eH > 0))
1245- then (hZ == ay)
1246- else (hZ == az)
1247- let iq = if (!(io))
1248- then ip
1301+ let iu = (ir - it)
1302+ let iv = bX(bY)
1303+ let eL = iv._1
1304+ let eM = iv._2
1305+ let eN = iv._3
1306+ let eO = iv._4
1307+ let eP = iv._5
1308+ let iw = (eL == 0)
1309+ let ix = if ((eL > 0))
1310+ then (ih == az)
1311+ else (ih == aA)
1312+ let iy = if (!(iw))
1313+ then ix
12491314 else false
1250- let ir = (hZ == ay)
1251- let is = if (if (io)
1315+ let iz = (ih == az)
1316+ let iA = if (if (iw)
12521317 then true
1253- else iq)
1318+ else iy)
12541319 then {
1255- let it = aM(hG, ia)
1256- let iu = cB(ir, it)
1257- let cI = iu._1
1258- let cF = iu._2
1259- let cG = iu._3
1260- let eR = iu._4
1261- if (if ((ib != 0))
1262- then (ib > aP(cI))
1320+ let iB = aP(hO, ii)
1321+ let iC = cF(iz, iB)
1322+ let cM = iC._1
1323+ let cJ = iC._2
1324+ let cK = iC._3
1325+ let eV = iC._4
1326+ if (if ((ij != 0))
1327+ then (ij > aS(cM))
12631328 else false)
1264- then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1329+ then throw(((("Limit error: " + toString(aS(cM))) + " < ") + toString(ij)))
12651330 else {
1266- let ff = (eH + cI)
1267- let iv = (bq() + (if ((ff > 0))
1268- then it
1331+ let fj = (eL + cM)
1332+ let iD = (bt() + (if ((fj > 0))
1333+ then iB
12691334 else 0))
1270- let iw = (bp() + (if ((0 > ff))
1271- then it
1335+ let iE = (bs() + (if ((0 > fj))
1336+ then iB
12721337 else 0))
1273- let ix = cX(eH, eI, eK, eL, hG)
1274- let df = ix._1
1275- let eZ = ix._2
1276- let fa = ix._3
1277- let cW = ix._4
1278- if (!(dK(cF, cG)))
1338+ let iF = db(eL, eM, eO, eP, hO)
1339+ let dj = iF._1
1340+ let fd = iF._2
1341+ let fe = iF._3
1342+ let da = iF._4
1343+ if (!(dO(cJ, cK)))
12791344 then throw("Over max spread limit")
1280- else if (!(dO(iv, iw)))
1345+ else if (!(dS(iD, iE)))
12811346 then throw("Over max open notional")
1282- else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283- then aP(cI)
1284- else 0)), (bE() + (if ((0 > ff))
1285- then aP(cI)
1286- else 0)), iv, iw, cW)
1347+ else $Tuple14(fj, dj, (eN + iB), bV(fj), bN(), cK, cJ, eV, (br() + iB), (bI() + (if ((fj > 0))
1348+ then aS(cM)
1349+ else 0)), (bH() + (if ((0 > fj))
1350+ then aS(cM)
1351+ else 0)), iD, iE, da)
12871352 }
12881353 }
12891354 else {
1290- let it = aM(hG, ia)
1291- let iy = ee(toString(bL.caller), aG)
1292- let eU = iy._1
1293- let ed = iy._2
1294- if ((eU > it))
1355+ let iB = aP(hO, ii)
1356+ let iG = ei(toString(bP.caller), aH)
1357+ let eY = iG._1
1358+ let eh = iG._2
1359+ if ((eY > iB))
12951360 then throw("Use decreasePosition to decrease position size")
12961361 else throw("Close position first")
12971362 }
1298- let ff = is._1
1299- let iz = is._2
1300- let fh = is._3
1301- let iA = is._4
1302- let iB = is._5
1303- let cG = is._6
1304- let cF = is._7
1305- let eR = is._8
1306- let iC = is._9
1307- let iD = is._10
1308- let iE = is._11
1309- let iv = is._12
1310- let iw = is._13
1311- let cW = is._14
1312- let iF = gK((im + cW))
1313- let gM = iF._1
1314- let gN = iF._2
1315- let iG = if ((hG >= cW))
1316- then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317- else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318- if ((iG == iG))
1363+ let fj = iA._1
1364+ let iH = iA._2
1365+ let fl = iA._3
1366+ let iI = iA._4
1367+ let iJ = iA._5
1368+ let cK = iA._6
1369+ let cJ = iA._7
1370+ let eV = iA._8
1371+ let iK = iA._9
1372+ let iL = iA._10
1373+ let iM = iA._11
1374+ let iD = iA._12
1375+ let iE = iA._13
1376+ let da = iA._14
1377+ let iN = gR((iu + da))
1378+ let gT = iN._1
1379+ let gU = iN._2
1380+ let iO = if ((hO >= da))
1381+ then invoke(ar(), "addLocked", nil, [AttachedPayment(ao(), (hO - da))])
1382+ else invoke(ar(), "withdrawLocked", [(da - hO)], nil)
1383+ if ((iO == iO))
13191384 then {
1320- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321- if ((iH == iH))
1385+ let iP = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1386+ if ((iP == iP))
13221387 then {
1323- let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324- if ((iI == iI))
1388+ let iQ = invoke(as(), "notifyFees", [bY, iu], nil)
1389+ if ((iQ == iQ))
13251390 then {
1326- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327- if ((iJ == iJ))
1328- then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
1391+ let iR = invoke(as(), "notifyNotional", [bY, fl], nil)
1392+ if ((iR == iR))
1393+ then ((((((hs(bY, fj, iH, fl, iI, iJ) ++ ho(iw, bY)) ++ hr(iw, bY, gF)) ++ hF(cJ, cK, eV, iK, iL, iM, iD, iE)) ++ hR(gT)) ++ hQ(((bi() + hO) - da))) ++ hS(gG, bP))
13291394 else throw("Strict value is not equal to itself.")
13301395 }
13311396 else throw("Strict value is not equal to itself.")
13321397 }
13331398 else throw("Strict value is not equal to itself.")
13341399 }
13351400 else throw("Strict value is not equal to itself.")
13361401 }
13371402 else throw("Strict value is not equal to itself.")
13381403 }
13391404 }
13401405 else throw("Strict value is not equal to itself.")
13411406 }
13421407 else throw("Strict value is not equal to itself.")
13431408 }
13441409
13451410
13461411
1347-@Callable(bL)
1412+@Callable(bP)
13481413 func addMargin () = {
1349- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350- if ((id == id))
1414+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415+ if ((il == il))
13511416 then {
1352- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353- if ((ie == ie))
1417+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1418+ if ((im == im))
13541419 then {
1355- let bU = toString(bL.caller)
1356- let hG = bL.payments[0].amount
1357- let gB = bL.payments[0].assetId
1358- let ig = toBase58String(value(gB))
1359- let ih = (gB == an())
1360- if (if (if (if (if (if (if (!(ih))
1420+ let bY = toString(bP.caller)
1421+ let hO = bP.payments[0].amount
1422+ let gI = bP.payments[0].assetId
1423+ let io = toBase58String(value(gI))
1424+ let ip = (gI == ao())
1425+ if (if (if (if (if (if (if (!(ip))
13611426 then true
1362- else !(ce(toString(bL.caller))))
1427+ else !(ci(toString(bP.caller))))
13631428 then true
1364- else !(gC(bU, ig)))
1429+ else !(gJ(bY, io)))
13651430 then true
1366- else !(cn()))
1431+ else !(cr()))
13671432 then true
1368- else co())
1433+ else cs())
13691434 then true
1370- else cp())
1435+ else ct())
13711436 then true
1372- else dE())
1437+ else dI())
13731438 then throw("Invalid addMargin parameters")
13741439 else {
1375- let iK = bT(bU)
1376- let eH = iK._1
1377- let eI = iK._2
1378- let eJ = iK._3
1379- let eK = iK._4
1380- let eL = iK._5
1381- let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382- if ((iG == iG))
1440+ let iS = bX(bY)
1441+ let eL = iS._1
1442+ let eM = iS._2
1443+ let eN = iS._3
1444+ let eO = iS._4
1445+ let eP = iS._5
1446+ let iO = invoke(ar(), "addLocked", nil, [AttachedPayment(ao(), hO)])
1447+ if ((iO == iO))
13831448 then {
1384- let cW = cS(eI, eL)
1385- let iL = if ((cW > 0))
1449+ let da = cW(eM, eP)
1450+ let iT = if ((da > 0))
13861451 then {
1387- let iM = gK(cW)
1388- let gM = iM._1
1389- let gN = iM._2
1390- let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391- if ((iN == iN))
1452+ let iU = gR(da)
1453+ let gT = iU._1
1454+ let gU = iU._2
1455+ let iV = invoke(ar(), "withdrawLocked", [gT], nil)
1456+ if ((iV == iV))
13921457 then {
1393- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394- if ((iO == iO))
1395- then hJ(gM)
1458+ let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1459+ if ((iW == iW))
1460+ then hR(gT)
13961461 else throw("Strict value is not equal to itself.")
13971462 }
13981463 else throw("Strict value is not equal to itself.")
13991464 }
14001465 else nil
1401- if ((iL == iL))
1402- then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1466+ if ((iT == iT))
1467+ then ((hs(bY, eL, ((eM - da) + hO), eN, eO, bN()) ++ hQ(((bi() + hO) - da))) ++ iT)
14031468 else throw("Strict value is not equal to itself.")
14041469 }
14051470 else throw("Strict value is not equal to itself.")
14061471 }
14071472 }
14081473 else throw("Strict value is not equal to itself.")
14091474 }
14101475 else throw("Strict value is not equal to itself.")
14111476 }
14121477
14131478
14141479
1415-@Callable(bL)
1416-func removeMargin (hG) = {
1417- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418- if ((id == id))
1480+@Callable(bP)
1481+func removeMargin (hO) = {
1482+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1483+ if ((il == il))
14191484 then {
1420- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421- if ((ie == ie))
1485+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1486+ if ((im == im))
14221487 then {
1423- let bU = toString(bL.caller)
1424- if (if (if (if (if ((0 >= hG))
1488+ let bY = toString(bP.caller)
1489+ if (if (if (if (if ((0 >= hO))
14251490 then true
1426- else !(ce(bU)))
1491+ else !(ci(bY)))
14271492 then true
1428- else !(cn()))
1493+ else !(cr()))
14291494 then true
1430- else co())
1495+ else cs())
14311496 then true
1432- else dE())
1497+ else dI())
14331498 then throw("Invalid removeMargin parameters")
14341499 else {
1435- let iP = bT(bU)
1436- let eH = iP._1
1437- let eI = iP._2
1438- let eJ = iP._3
1439- let eK = iP._4
1440- let eL = iP._5
1441- let iQ = cX(eH, eI, eK, eL, -(hG))
1442- let df = iQ._1
1443- let dg = iQ._2
1444- let db = iQ._3
1445- let cW = iQ._4
1446- if ((dg != 0))
1500+ let iX = bX(bY)
1501+ let eL = iX._1
1502+ let eM = iX._2
1503+ let eN = iX._3
1504+ let eO = iX._4
1505+ let eP = iX._5
1506+ let iY = db(eL, eM, eO, eP, -(hO))
1507+ let dj = iY._1
1508+ let dk = iY._2
1509+ let df = iY._3
1510+ let da = iY._4
1511+ if ((dk != 0))
14471512 then throw("Invalid removed margin amount")
14481513 else {
1449- let fk = ej(df, dg, eJ)
1450- if (!(bM(fk, bi(), true)))
1451- then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
1514+ let fo = en(dj, dk, eN)
1515+ if (!(bQ(fo, bl(), true)))
1516+ then throw(((("Too much margin removed: " + toString(fo)) + " < ") + toString(bl())))
14521517 else {
1453- let iR = gK(cW)
1454- let gM = iR._1
1455- let gN = iR._2
1456- let iL = if ((cW > 0))
1518+ let iZ = gR(da)
1519+ let gT = iZ._1
1520+ let gU = iZ._2
1521+ let iT = if ((da > 0))
14571522 then {
1458- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459- if ((iO == iO))
1460- then hJ(gM)
1523+ let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1524+ if ((iW == iW))
1525+ then hR(gT)
14611526 else throw("Strict value is not equal to itself.")
14621527 }
14631528 else nil
1464- if ((iL == iL))
1529+ if ((iT == iT))
14651530 then {
1466- let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467- if ((iN == iN))
1468- then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
1531+ let iV = invoke(ar(), "withdrawLocked", [(hO + gT)], nil)
1532+ if ((iV == iV))
1533+ then (((hs(bY, eL, dj, eN, bV(eL), bN()) ++ hN(bP.caller, hO)) ++ hQ(((bi() - hO) - da))) ++ iT)
14691534 else throw("Strict value is not equal to itself.")
14701535 }
14711536 else throw("Strict value is not equal to itself.")
14721537 }
14731538 }
14741539 }
14751540 }
14761541 else throw("Strict value is not equal to itself.")
14771542 }
14781543 else throw("Strict value is not equal to itself.")
14791544 }
14801545
14811546
14821547
1483-@Callable(bL)
1484-func closePosition (eB,eD,eE) = {
1485- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486- if ((id == id))
1548+@Callable(bP)
1549+func closePosition (eF,eH,eI) = {
1550+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1551+ if ((il == il))
14871552 then {
1488- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489- if ((ie == ie))
1553+ let im = invoke(this, "ensureCalledOnce", nil, nil)
1554+ if ((im == im))
14901555 then {
1491- let bU = bK(bL)
1492- let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493- let cd = cb(bU)
1494- if (if (if (if (if (if (!(ce(bU)))
1556+ let bY = bO(bP)
1557+ let ja = valueOrErrorMessage(addressFromString(bY), "Invalid caller")
1558+ let ch = cf(bY)
1559+ if (if (if (if (if (if (!(ci(bY)))
14951560 then true
1496- else !(cn()))
1561+ else !(cr()))
14971562 then true
1498- else co())
1563+ else cs())
14991564 then true
1500- else (0 >= eB))
1565+ else (0 >= eF))
15011566 then true
1502- else (0 > eD))
1567+ else (0 > eH))
15031568 then true
1504- else dE())
1569+ else dI())
15051570 then throw("Invalid closePosition parameters")
15061571 else {
1507- let eL = bT(bU)._5
1508- let iT = eA(bU, eB, cd, eD, eE, true, true)
1509- let ff = iT._1
1510- let fo = iT._2
1511- let fh = iT._3
1512- let fi = iT._4
1513- let fb = iT._5
1514- let eW = iT._6
1515- let fn = iT._7
1516- let cF = iT._8
1517- let cG = iT._9
1518- let eR = iT._10
1519- let iC = iT._11
1520- let iD = iT._12
1521- let iE = iT._13
1522- let iv = iT._14
1523- let iw = iT._15
1524- let iU = iT._16
1525- if ((fb > 0))
1572+ let eP = bX(bY)._5
1573+ let jb = eE(bY, eF, ch, eH, eI, true, true)
1574+ let fj = jb._1
1575+ let fs = jb._2
1576+ let fl = jb._3
1577+ let fm = jb._4
1578+ let ff = jb._5
1579+ let fa = jb._6
1580+ let fr = jb._7
1581+ let cJ = jb._8
1582+ let cK = jb._9
1583+ let eV = jb._10
1584+ let iK = jb._11
1585+ let iL = jb._12
1586+ let iM = jb._13
1587+ let iD = jb._14
1588+ let iE = jb._15
1589+ let jc = jb._16
1590+ if ((ff > 0))
15261591 then throw("Invalid closePosition parameters: bad debt")
1527- else if ((eL >= bJ()))
1592+ else if ((eP >= bN()))
15281593 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15291594 else {
1530- let eO = (ff != 0)
1531- let iV = (fn + iU)
1532- let iW = (bf() - iV)
1533- let iX = if ((0 > iW))
1595+ let eS = (fj != 0)
1596+ let jd = (fr + jc)
1597+ let je = (bi() - jd)
1598+ let jf = if ((0 > je))
15341599 then 0
1535- else iW
1536- let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537- if ((iN == iN))
1600+ else je
1601+ let iV = invoke(ar(), "withdrawLocked", [jd], nil)
1602+ if ((iV == iV))
15381603 then {
1539- let iY = gK(iU)
1540- let gM = iY._1
1541- let gN = iY._2
1542- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543- if ((iH == iH))
1604+ let jg = gR(jc)
1605+ let gT = jg._1
1606+ let gU = jg._2
1607+ let iP = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1608+ if ((iP == iP))
15441609 then {
1545- let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546- if ((iI == iI))
1610+ let iQ = invoke(as(), "notifyFees", [bY, jc], nil)
1611+ if ((iQ == iQ))
15471612 then {
1548- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549- if ((iJ == iJ))
1550- then (((((if (eO)
1551- then hk(bU, ff, fo, fh, fi, bJ())
1552- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553- then hF(iS, fn)
1554- else nil)) ++ hI(iX)) ++ hJ(gM))
1613+ let iR = invoke(as(), "notifyNotional", [bY, fl], nil)
1614+ if ((iR == iR))
1615+ then (((((if (eS)
1616+ then hs(bY, fj, fs, fl, fm, bN())
1617+ else hM(bY)) ++ hF(cJ, cK, eV, iK, iL, iM, iD, iE)) ++ (if ((fr > 0))
1618+ then hN(ja, fr)
1619+ else nil)) ++ hQ(jf)) ++ hR(gT))
15551620 else throw("Strict value is not equal to itself.")
15561621 }
15571622 else throw("Strict value is not equal to itself.")
15581623 }
15591624 else throw("Strict value is not equal to itself.")
15601625 }
15611626 else throw("Strict value is not equal to itself.")
15621627 }
15631628 }
15641629 }
15651630 else throw("Strict value is not equal to itself.")
15661631 }
15671632 else throw("Strict value is not equal to itself.")
15681633 }
15691634
15701635
15711636
1572-@Callable(bL)
1573-func liquidate (bU) = {
1574- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575- if ((id == id))
1637+@Callable(bP)
1638+func liquidate (bY) = {
1639+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1640+ if ((il == il))
15761641 then {
1577- let iZ = en(bU, aG)
1578- let ja = if (dT())
1642+ let jh = er(bY, aH)
1643+ let ji = if (dX())
15791644 then {
1580- let jb = en(bU, aH)
1581- aQ(iZ, jb)
1645+ let jj = er(bY, aI)
1646+ aT(jh, jj)
15821647 }
1583- else iZ
1584- if (if (if (if (if (!(bM(ja, bv(), false)))
1648+ else jh
1649+ if (if (if (if (if (!(bQ(ji, by(), false)))
15851650 then true
1586- else !(ce(bU)))
1651+ else !(ci(bY)))
15871652 then true
1588- else !(cn()))
1653+ else !(cr()))
15891654 then true
1590- else co())
1655+ else cs())
15911656 then true
1592- else dE())
1657+ else dI())
15931658 then throw("Unable to liquidate")
15941659 else {
1595- let jc = if (if ((iZ > bw()))
1596- then (bx() > 0)
1660+ let jk = if (if ((jh > bz()))
1661+ then (bA() > 0)
15971662 else false)
1598- then (aD > bx())
1663+ then (aE > bA())
15991664 else false
1600- let eH = bT(bU)._1
1601- let dX = aP(eH)
1602- let jd = if (jc)
1665+ let eL = bX(bY)._1
1666+ let eb = aS(eL)
1667+ let jl = if (jk)
16031668 then {
1604- let je = ev(bU, eH)
1605- let jf = aK(aP(je), dX)
1606- $Tuple2(jf, aP(je))
1669+ let jm = ez(bY, eL)
1670+ let jn = aN(aS(jm), eb)
1671+ $Tuple2(jn, aS(jm))
16071672 }
1608- else $Tuple2(0, dX)
1609- let jf = jd._1
1610- let je = jd._2
1611- let jg = eA(bU, if (jc)
1612- then je
1613- else dX, bw(), 0, true, false, true)
1614- let ff = jg._1
1615- let fo = jg._2
1616- let fh = jg._3
1617- let fi = jg._4
1618- let fb = jg._5
1619- let eW = jg._6
1620- let fn = jg._7
1621- let cF = jg._8
1622- let cG = jg._9
1623- let eR = jg._10
1624- let iC = jg._11
1625- let iD = jg._12
1626- let iE = jg._13
1627- let iv = jg._14
1628- let iw = jg._15
1629- let jh = jg._16
1630- let ji = (jh / 2)
1631- let gN = (jh - ji)
1632- let iW = (bf() - jh)
1633- let jj = if ((0 > iW))
1673+ else $Tuple2(0, eb)
1674+ let jn = jl._1
1675+ let jm = jl._2
1676+ let jo = eE(bY, if (jk)
1677+ then jm
1678+ else eb, bz(), 0, true, false, true)
1679+ let fj = jo._1
1680+ let fs = jo._2
1681+ let fl = jo._3
1682+ let fm = jo._4
1683+ let ff = jo._5
1684+ let fa = jo._6
1685+ let fr = jo._7
1686+ let cJ = jo._8
1687+ let cK = jo._9
1688+ let eV = jo._10
1689+ let iK = jo._11
1690+ let iL = jo._12
1691+ let iM = jo._13
1692+ let iD = jo._14
1693+ let iE = jo._15
1694+ let jp = jo._16
1695+ let jq = (jp / 2)
1696+ let gU = (jp - jq)
1697+ let je = (bi() - jp)
1698+ let jr = if ((0 > je))
16341699 then 0
1635- else iW
1636- let iO = if ((fb > 0))
1700+ else je
1701+ let iW = if ((ff > 0))
16371702 then {
1638- let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639- if ((iO == iO))
1703+ let iW = invoke(ar(), "exchangeFreeAndLocked", [(ff + jp)], nil)
1704+ if ((iW == iW))
16401705 then nil
16411706 else throw("Strict value is not equal to itself.")
16421707 }
16431708 else nil
1644- if ((iO == iO))
1709+ if ((iW == iW))
16451710 then {
1646- let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647- if ((iN == iN))
1711+ let iV = invoke(ar(), "withdrawLocked", [jp], nil)
1712+ if ((iV == iV))
16481713 then {
1649- let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650- if ((jk == jk))
1714+ let js = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1715+ if ((js == js))
16511716 then {
1652- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653- if ((iJ == iJ))
1654- then ((((if (jc)
1655- then hk(bU, ff, fo, fh, fi, bJ())
1656- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
1717+ let iR = invoke(as(), "notifyNotional", [bY, fl], nil)
1718+ if ((iR == iR))
1719+ then ((((if (jk)
1720+ then hs(bY, fj, fs, fl, fm, bN())
1721+ else hM(bY)) ++ hF(cJ, cK, eV, iK, iL, iM, iD, iE)) ++ hN(bP.caller, jq)) ++ hQ(jr))
16571722 else throw("Strict value is not equal to itself.")
16581723 }
16591724 else throw("Strict value is not equal to itself.")
16601725 }
16611726 else throw("Strict value is not equal to itself.")
16621727 }
16631728 else throw("Strict value is not equal to itself.")
16641729 }
16651730 }
16661731 else throw("Strict value is not equal to itself.")
16671732 }
16681733
16691734
16701735
1671-@Callable(bL)
1736+@Callable(bP)
16721737 func payFunding () = {
1673- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674- if ((id == id))
1738+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739+ if ((il == il))
16751740 then {
1676- let jl = br()
1677- if (if (if ((jl > bJ()))
1741+ let jt = bu()
1742+ if (if (if ((jt > bN()))
16781743 then true
1679- else !(cn()))
1744+ else !(cr()))
16801745 then true
1681- else co())
1682- then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
1746+ else cs())
1747+ then throw(((("Invalid funding block timestamp: " + toString(bN())) + " < ") + toString(jt)))
16831748 else {
1684- let gl = dy()
1685- let jm = gk()
1686- let go = jm._1
1687- let gp = jm._2
1688- ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
1749+ let gp = dC()
1750+ let ju = go()
1751+ let gs = ju._1
1752+ let gt = ju._2
1753+ let gw = ju._3
1754+ let jv = if ((gw > 0))
1755+ then {
1756+ let jv = invoke(ar(), "exchangeFreeAndLocked", [-(gw)], nil)
1757+ if ((jv == jv))
1758+ then nil
1759+ else throw("Strict value is not equal to itself.")
1760+ }
1761+ else nil
1762+ if ((jv == jv))
1763+ then hi((jt + bx()), (bF() + gt), (bG() + gs), aN(gt, gp), aN(gs, gp))
1764+ else throw("Strict value is not equal to itself.")
16891765 }
16901766 }
16911767 else throw("Strict value is not equal to itself.")
16921768 }
16931769
16941770
16951771
1696-@Callable(bL)
1772+@Callable(bP)
16971773 func syncTerminalPriceToOracle () = {
1698- let cx = bj()
1699- let cy = bk()
1700- let jn = gf(dy(), cx, cy)
1701- let hR = jn._1
1702- let hS = jn._2
1703- let gj = jn._3
1704- let jo = if (if ((0 > gj))
1705- then (aP(gj) > bf())
1774+ let cB = bm()
1775+ let cC = bn()
1776+ let jw = gj(dC(), cB, cC)
1777+ let hZ = jw._1
1778+ let ia = jw._2
1779+ let gn = jw._3
1780+ let jx = if (if ((0 > gn))
1781+ then (aS(gn) > bi())
17061782 else false)
1707- then -(bf())
1708- else gj
1709- let hT = if ((jo != 0))
1783+ then -(bi())
1784+ else gn
1785+ let ib = if ((jx != 0))
17101786 then {
1711- let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712- if ((hT == hT))
1787+ let ib = invoke(ar(), "exchangeFreeAndLocked", [jx], nil)
1788+ if ((ib == ib))
17131789 then nil
17141790 else throw("Strict value is not equal to itself.")
17151791 }
17161792 else nil
1717- if ((hT == hT))
1718- then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1793+ if ((ib == ib))
1794+ then ((hQ((bi() + jx)) ++ hE(hZ, ia)) ++ hw(aN(aP(cB, hZ), aP(cC, ia))))
17191795 else throw("Strict value is not equal to itself.")
17201796 }
17211797
17221798
17231799
1724-@Callable(bL)
1725-func ensureCalledOnce () = if ((bL.caller != this))
1800+@Callable(bP)
1801+func ensureCalledOnce () = if ((bP.caller != this))
17261802 then throw("Invalid saveCurrentTxId parameters")
17271803 else {
1728- let jp = valueOrElse(getString(this, W), "")
1729- if ((jp != toBase58String(bL.transactionId)))
1730- then [StringEntry(W, jp)]
1804+ let jy = valueOrElse(getString(this, X), "")
1805+ if ((jy != toBase58String(bP.transactionId)))
1806+ then [StringEntry(X, jy)]
17311807 else throw("Can not call vAMM methods twice in one tx")
17321808 }
17331809
17341810
17351811
1736-@Callable(bL)
1737-func view_calcRemainMarginWithFundingPayment (bU) = {
1738- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((id == id))
1812+@Callable(bP)
1813+func view_calcRemainMarginWithFundingPayment (bY) = {
1814+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1815+ if ((il == il))
17401816 then {
1741- let jq = bT(bU)
1742- let bX = jq._1
1743- let eg = jq._2
1744- let ep = jq._3
1745- let ei = jq._4
1746- let er = jq._5
1747- let jr = ee(bU, aG)
1748- let dZ = jr._1
1749- let ed = jr._2
1750- let js = cX(bX, eg, ei, er, ed)
1751- let df = js._1
1752- let dg = js._2
1753- let db = js._3
1754- let cW = js._4
1755- throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
1817+ let jz = bX(bY)
1818+ let cb = jz._1
1819+ let ek = jz._2
1820+ let et = jz._3
1821+ let em = jz._4
1822+ let ev = jz._5
1823+ let jA = ei(bY, aH)
1824+ let ed = jA._1
1825+ let eh = jA._2
1826+ let jB = db(cb, ek, em, ev, eh)
1827+ let dj = jB._1
1828+ let dk = jB._2
1829+ let df = jB._3
1830+ let da = jB._4
1831+ throw(((((((aL(dj) + aL(df)) + aL(ey(bY))) + aL(eh)) + aL(dk)) + aL(ed)) + aL(da)))
17561832 }
17571833 else throw("Strict value is not equal to itself.")
17581834 }
17591835
17601836
17611837
1762-@Callable(bL)
1763-func view_getPegAdjustCost (hp) = {
1764- let cx = bj()
1765- let cy = bk()
1766- let ge = gf(hp, cx, cy)
1767- throw(toString(ge._3))
1838+@Callable(bP)
1839+func view_getPegAdjustCost (hx) = {
1840+ let cB = bm()
1841+ let cC = bn()
1842+ let gi = gj(hx, cB, cC)
1843+ throw(toString(gi._3))
17681844 }
17691845
17701846
17711847
1772-@Callable(bL)
1848+@Callable(bP)
17731849 func view_getTerminalAmmPrice () = {
1774- let jt = fN()
1775- let fR = jt._1
1776- let fS = jt._2
1777- let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778- throw(toString(hM))
1850+ let jC = fR()
1851+ let fV = jC._1
1852+ let fW = jC._2
1853+ let hU = aN(aP(fV, bo()), aP(fW, bp()))
1854+ throw(toString(hU))
17791855 }
17801856
17811857
17821858
1783-@Callable(bL)
1859+@Callable(bP)
17841860 func view_getFunding () = {
1785- let gl = dy()
1786- let ju = gk()
1787- let go = ju._1
1788- let gp = ju._2
1789- let jv = aK(gp, gl)
1790- let jw = aK(go, gl)
1791- throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
1861+ let gp = dC()
1862+ let jD = go()
1863+ let gs = jD._1
1864+ let gt = jD._2
1865+ let gw = jD._3
1866+ let jE = aN(gt, gp)
1867+ let jF = aN(gs, gp)
1868+ throw(((((aL(jE) + aL(jF)) + aL(ft())) + aL(dC())) + aL(gw)))
17921869 }
17931870
17941871
17951872
1796-@Callable(bL)
1873+@Callable(bP)
17971874 func computeSpotPrice () = {
1798- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799- if ((id == id))
1875+ let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1876+ if ((il == il))
18001877 then {
1801- let ge = dS()
1802- $Tuple2(nil, ge)
1878+ let gi = dW()
1879+ $Tuple2(nil, gi)
18031880 }
18041881 else throw("Strict value is not equal to itself.")
18051882 }
18061883
18071884
18081885
1809-@Callable(bL)
1810-func computeFeeForTraderWithArtifact (bU,gr) = {
1811- let ge = gD(bU, gr)
1812- $Tuple2(nil, ge)
1886+@Callable(bP)
1887+func computeFeeForTraderWithArtifact (bY,gy) = {
1888+ let gi = gK(bY, gy)
1889+ $Tuple2(nil, gi)
18131890 }
18141891
18151892
1816-@Verifier(jx)
1817-func jy () = {
1818- let jz = getString(this, X)
1819- if (isDefined(jz))
1893+@Verifier(jG)
1894+func jH () = {
1895+ let jI = getString(this, Y)
1896+ if (isDefined(jI))
18201897 then {
1821- let jA = getString(addressFromStringValue(value(jz)), Z)
1822- if (isDefined(jA))
1823- then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1898+ let jJ = getString(addressFromStringValue(value(jI)), aa)
1899+ if (isDefined(jJ))
1900+ then valueOrElse(getBoolean(addressFromStringValue(value(jJ)), ((("status_" + toString(this)) + "_") + toBase58String(jG.id))), false)
18241901 else throw("unable to verify: admin not set in coordinator")
18251902 }
1826- else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1903+ else sigVerify(jG.bodyBytes, jG.proofs[0], jG.senderPublicKey)
18271904 }
18281905

github/deemru/w8io/026f985 
743.77 ms