tx · J3LsNexS9DQqNrKQLHVSu4Qv8raN2bYPZhgHbASwZoAy

3NBeJWgTz9QJrsC3rzuhVtRpXVD21oCsWgT:  -0.07500000 Waves

2023.02.19 14:10 [2456433] smart account 3NBeJWgTz9QJrsC3rzuhVtRpXVD21oCsWgT > SELF 0.00000000 Waves

{ "type": 13, "id": "J3LsNexS9DQqNrKQLHVSu4Qv8raN2bYPZhgHbASwZoAy", "fee": 7500000, "feeAssetId": null, "timestamp": 1676805037226, "version": 2, "chainId": 84, "sender": "3NBeJWgTz9QJrsC3rzuhVtRpXVD21oCsWgT", "senderPublicKey": "8fXX7iuB1dSAMSCqCZTqJNBUmZmKB6oamJwom9WrvTvs", "proofs": [ "4RiKWXbwaKLxL52cVmvT1kzR9bkKQWz2fKFwzhQtXj9nDwVD2yy5u2S4rnycXgaRTvDxaSQ4pLYKfHXUi4JN5SAk" ], "script": "base64:BgJ0CAISABIAEgASABIDCgEBEgMKAQESEAoOAQEBAQEBAQEBAQEBAQESFQoTAQEBAQEBAQgICAEBAQEBAQEBARIGCgQBAQEIEgASAwoBARIFCgMBAQQSAwoBCBIAEgASABIDCgEIEgMKAQESABIAEgASBAoCCAi5AQAMa19iYXNlT3JhY2xlAgxrX2Jhc2VPcmFjbGUADWtfcXVvdGVPcmFjbGUCDWtfcXVvdGVPcmFjbGUACWtfYmFsYW5jZQIJa19iYWxhbmNlAAprX3NlcXVlbmNlAgprX3NlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UAD2tfcG9zaXRpb25Bc3NldAIPa19wb3NpdGlvbkFzc2V0AA1rX3Bvc2l0aW9uRmVlAg1rX3Bvc2l0aW9uRmVlAB5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXACE2tfcG9zaXRpb25UaW1lc3RhbXAADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUADWtfcm9sbG92ZXJGZWUCDmtfcm9sbG92ZXJfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19mdW5kaW5nTW9kZQINa19mdW5kaW5nTW9kZQAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nAAhrX2xhc3RUeAIIa19sYXN0VHgAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AA9rX3F1b3RlX3N0YWtpbmcCD2tfcXVvdGVfc3Rha2luZwARa19zdGFraW5nX2FkZHJlc3MCEWtfc3Rha2luZ19hZGRyZXNzAA9rX21pbmVyX2FkZHJlc3MCD2tfbWluZXJfYWRkcmVzcwAQa19vcmRlcnNfYWRkcmVzcwIQa19vcmRlcnNfYWRkcmVzcwASa19yZWZlcnJhbF9hZGRyZXNzAhJrX3JlZmVycmFsX2FkZHJlc3MAEmtfZXhjaGFuZ2VfYWRkcmVzcwISa19leGNoYW5nZV9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0AA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgANVFdBUF9JTlRFUlZBTAAPAAdTRUNPTkRTAOgHAA9ERUNJTUFMX05VTUJFUlMABgAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoAD01JTlVURVNfSU5fWUVBUgkAaAIAoIogBQxERUNJTUFMX1VOSVQAB09ORV9EQVkJAGgCAICjBQUMREVDSU1BTF9VTklUAA9QTkxfT1BUSU9OX1NQT1QAAQARUE5MX09QVElPTl9PUkFDTEUAAgASRlVORElOR19BU1lNTUVUUklDAAEAEUZVTkRJTkdfU1lNTUVUUklDAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0AwkAAAIJAJADAQUFX2xpc3QAAAIACQC5CQIFBV9saXN0AgEsAQlzdHJUb0xpc3QBBF9zdHIDCQAAAgUEX3N0cgIABQNuaWwJALUJAgUEX3N0cgIBLAELcHVzaFRvUXVldWUDBV9saXN0CF9tYXhTaXplBl92YWx1ZQMJAGYCCQCQAwEFBV9saXN0BQhfbWF4U2l6ZQkAzQgCCQDRCAIFBV9saXN0AAAFBl92YWx1ZQkAzQgCBQVfbGlzdAUGX3ZhbHVlAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEDZmVlAAkBA2ludAEFBWtfZmVlAQ9yb2xsb3ZlckZlZVJhdGUACQEDaW50AQUNa19yb2xsb3ZlckZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBC2Z1bmRpbmdNb2RlAAkBBWludE9yAgUNa19mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDAQ1sYXN0VGltZXN0YW1wAAgFCWxhc3RCbG9jawl0aW1lc3RhbXABD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDIDwgCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8DAwkBASEBBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZwIFFHJlbWFpbmluZ01hcmdpblJhdGlvAAAHCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA+IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvBgEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAixTaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIF9wb3NpdGlvblNpemUgPT0gMAMJAGYCBQ1fcG9zaXRpb25TaXplAAAJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAQtnZXRQb3NpdGlvbgEHX3RyYWRlcgQPcG9zaXRpb25TaXplT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyBAckbWF0Y2gwBQ9wb3NpdGlvblNpemVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAxwb3NpdGlvblNpemUFByRtYXRjaDAJAJcKBQUMcG9zaXRpb25TaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFB190cmFkZXIJAJcKBQAAAAAAAAAAAAABEGdldFBvc2l0aW9uQXNzZXQBB190cmFkZXIEEHBvc2l0aW9uQXNzZXRPcHQJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAckbWF0Y2gwBRBwb3NpdGlvbkFzc2V0T3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQNcG9zaXRpb25Bc3NldAUHJG1hdGNoMAUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAABDmdldFBvc2l0aW9uRmVlAQdfdHJhZGVyBA5wb3NpdGlvbkZlZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyBAckbWF0Y2gwBQ5wb3NpdGlvbkZlZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEC3Bvc2l0aW9uRmVlBQckbWF0Y2gwBQtwb3NpdGlvbkZlZQkBA2ZlZQABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQ1nZXRPcmFjbGVEYXRhAQNrZXkEDW9yYWNsZURhdGFTdHIJAJ0IAgUEdGhpcwUDa2V5AwMJAQlpc0RlZmluZWQBBQ1vcmFjbGVEYXRhU3RyCQECIT0CCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyAgAHBApvcmFjbGVEYXRhCQC1CQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICASwEDW9yYWNsZUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCm9yYWNsZURhdGEAAAkArAICAhtJbnZhbGlkIG9yYWNsZSBhZGRyZXNzIGluOiAJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHIECHByaWNlS2V5CQCRAwIFCm9yYWNsZURhdGEAAQQIYmxvY2tLZXkJAJEDAgUKb3JhY2xlRGF0YQACBAdvcGVuS2V5CQCRAwIFCm9yYWNsZURhdGEAAwkAlgoEBQ1vcmFjbGVBZGRyZXNzBQhwcmljZUtleQUIYmxvY2tLZXkFB29wZW5LZXkFBHVuaXQBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEGcGF1c2VkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQhrX3BhdXNlZAcBCWNsb3NlT25seQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwULa19jbG9zZU9ubHkHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDCQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAENY2FsY0ludmFyaWFudAIHX3F0QXN0UgdfYnNBc3RSBAdicXRBc3RSCQC2AgEFB19xdEFzdFIEB2Jic0FzdFIJALYCAQUHX2JzQXN0UgkBBWJtdWxkAgUHYnF0QXN0UgUHYmJzQXN0UgEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFB19xdEFzdFcEAWsJAQ1jYWxjSW52YXJpYW50AgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkAZQIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQCgAwEJAQViZGl2ZAIFAWsJALYCAQUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgQYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNjM1MjE2NTIyCQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTYzNTIxNjUyMgJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE2MzUyMTY1MjICXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTYzNTIxNjUyMgJfMwQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlgoEBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQEPY2FsY1JvbGxvdmVyRmVlAhJfb2xkUG9zaXRpb25NYXJnaW4gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAED3Bvc2l0aW9uTWludXRlcwkAaAIJAGkCCQBpAgkAZQIJAQ1sYXN0VGltZXN0YW1wAAUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAA6AcAPAUMREVDSU1BTF9VTklUBAtyb2xsb3ZlckZlZQkBBGRpdmQCCQEEbXVsZAIJAQRtdWxkAgUSX29sZFBvc2l0aW9uTWFyZ2luBQ9wb3NpdGlvbk1pbnV0ZXMJAQ9yb2xsb3ZlckZlZVJhdGUABQ9NSU5VVEVTX0lOX1lFQVIFC3JvbGxvdmVyRmVlATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAMX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRJfb2xkUG9zaXRpb25NYXJnaW4FIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBAxzaWduZWRNYXJnaW4JAGQCCQBlAgkAZQIFDF9tYXJnaW5EZWx0YQULcm9sbG92ZXJGZWUFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4Nzc3MTg5MDQDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg3NzcxODkwNAJfMQQHYmFkRGVidAgFDSR0MDE4Nzc3MTg5MDQCXzIJAJYKBAUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAULcm9sbG92ZXJGZWUBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0El9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBDWNhbGNJbnZhcmlhbnQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIED3F1b3RlQXNzZXREZWx0YQkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQOcXVvdGVBc3NldFNvbGQJAQRtdWxkAgUPcXVvdGVBc3NldERlbHRhBRFfcXVvdGVBc3NldFdlaWdodAQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMjAxNjYyMDMyOAkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUPcXVvdGVBc3NldERlbHRhBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwMTY2MjAzMjgCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAyMDE2NjIwMzI4Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDIwMTY2MjAzMjgCXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAARNnZXRPcmFjbGVQcmljZVZhbHVlAwZvcmFjbGUIcHJpY2VLZXkIYmxvY2tLZXkECWxhc3RWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIcHJpY2VLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBwcmljZS4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCHByaWNlS2V5AwkBAiE9AgUIYmxvY2tLZXkCAAQMY3VycmVudEJsb2NrCAUJbGFzdEJsb2NrBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmdldE9yYWNsZVByaWNlAAQKYmFzZU9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENZ2V0T3JhY2xlRGF0YQEFDGtfYmFzZU9yYWNsZQIZTm8gYmFzZSBhc3NldCBvcmFjbGUgZGF0YQQPYmFzZU9yYWNsZVByaWNlCQETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMIBQpiYXNlT3JhY2xlAl8xCAUKYmFzZU9yYWNsZQJfMggFCmJhc2VPcmFjbGUCXzMEC3F1b3RlT3JhY2xlCQENZ2V0T3JhY2xlRGF0YQEFDWtfcXVvdGVPcmFjbGUEEHF1b3RlT3JhY2xlUHJpY2UDCQEJaXNEZWZpbmVkAQULcXVvdGVPcmFjbGUEDHF1b3RlT3JhY2xlVgkBBXZhbHVlAQULcXVvdGVPcmFjbGUJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFDHF1b3RlT3JhY2xlVgJfMQgFDHF1b3RlT3JhY2xlVgJfMggFDHF1b3RlT3JhY2xlVgJfMwUMREVDSU1BTF9VTklUCQEEZGl2ZAIFD2Jhc2VPcmFjbGVQcmljZQUQcXVvdGVPcmFjbGVQcmljZQEOaXNNYXJrZXRDbG9zZWQABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBAZvcmFjbGUIBQpiYXNlT3JhY2xlAl8xBAdvcGVuS2V5CAUKYmFzZU9yYWNsZQJfNAMJAQIhPQIFB29wZW5LZXkCAAQGaXNPcGVuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJsIAgUGb3JhY2xlBQdvcGVuS2V5CQCsAgIJAKwCAgkArAICAitDYW4gbm90IGdldCBvcmFjbGUgaXMgb3Blbi9jbG9zZWQuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQdvcGVuS2V5CQEBIQEFBmlzT3BlbgcBDGFic1ByaWNlRGlmZgUMX29yYWNsZVByaWNlEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQdfcXRBc3RXB19ic0FzdFcECnByaWNlQWZ0ZXIJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFDF9vcmFjbGVQcmljZQUKcHJpY2VBZnRlcgUMYXZlcmFnZVByaWNlBQxhYnNQcmljZURpZmYBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQSYWJzUHJpY2VEaWZmQmVmb3JlCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UJAQZxdEFzdFIACQEGYnNBc3RSAAUHX3F0QXN0VwUHX2JzQXN0VwQRYWJzUHJpY2VEaWZmQWZ0ZXIJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwUHX2JzQXN0VwMDCQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIJAQ5tYXhQcmljZVNwcmVhZAAJAGYCBRFhYnNQcmljZURpZmZBZnRlcgUSYWJzUHJpY2VEaWZmQmVmb3JlBwkAAgEJAKwCAgkArAICCQCsAgICDVByaWNlIHNwcmVhZCAJAKQDAQURYWJzUHJpY2VEaWZmQWZ0ZXICFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIRX2xvbmdPcGVuTm90aW9uYWwSX3Nob3J0T3Blbk5vdGlvbmFsBBBfbWF4T3Blbk5vdGlvbmFsCQEPbWF4T3Blbk5vdGlvbmFsAAMJAGYCBRFfbG9uZ09wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICE0xvbmcgb3BlbiBub3Rpb25hbCAJAKQDAQURX2xvbmdPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsAwkAZgIFEl9zaG9ydE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICFFNob3J0IG9wZW4gbm90aW9uYWwgCQCkAwEFEl9zaG9ydE9wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBg1fcG9zaXRpb25TaXplB19vcHRpb24SX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQED3Bvc2l0aW9uU2l6ZUFicwkBA2FicwEFDV9wb3NpdGlvblNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwDCQAAAgUHX29wdGlvbgUPUE5MX09QVElPTl9TUE9UBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHCQEBIQEFB2lzU2hvcnQFD3Bvc2l0aW9uU2l6ZUFicwcFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0Al8xBRNvdXRQb3NpdGlvbk5vdGlvbmFsCQEEbXVsZAIFD3Bvc2l0aW9uU2l6ZUFicwkBDmdldE9yYWNsZVByaWNlAAUQcG9zaXRpb25Ob3Rpb25hbAErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcNX3Bvc2l0aW9uU2l6ZRVfcG9zaXRpb25PcGVuTm90aW9uYWwSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQHX29wdGlvbgMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBgUNX3Bvc2l0aW9uU2l6ZQUHX29wdGlvbgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQEDXVucmVhbGl6ZWRQbmwDBQdpc1Nob3J0CQBlAgUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBRBwb3NpdGlvbk5vdGlvbmFsCQBlAgUQcG9zaXRpb25Ob3Rpb25hbAUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsCQCUCgIFEHBvc2l0aW9uTm90aW9uYWwFDXVucmVhbGl6ZWRQbmwBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgdfdHJhZGVyB19vcHRpb24EDSR0MDI4MjA2MjgzMzQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI4MjA2MjgzMzQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjgyMDYyODMzNAJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyODIwNjI4MzM0Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI4MjA2MjgzMzQCXzQJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUMcG9zaXRpb25TaXplBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwAFB19vcHRpb24BD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgdfdHJhZGVyB19vcHRpb24EDSR0MDI4ODQ5Mjg5OTAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI4ODQ5Mjg5OTACXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg4NDkyODk5MAJfMgQDcG9uCAUNJHQwMjg4NDkyODk5MAJfMwQWcG9zaXRpb25MYXN0VXBkYXRlZENQRggFDSR0MDI4ODQ5Mjg5OTACXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMjg4NDkyODk5MAJfNQQNJHQwMjg5OTYyOTA4OQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI4OTk2MjkwODkCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyODk5NjI5MDg5Al8yBA0kdDAyOTA5NDI5MzA2CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgUWcG9zaXRpb25MYXN0VXBkYXRlZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI5MDk0MjkzMDYCXzEEB2JhZERlYnQIBQ0kdDAyOTA5NDI5MzA2Al8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwEHX3RyYWRlcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIHX3RyYWRlcg1fcG9zaXRpb25TaXplBAxtYXhpbXVtUmF0aW8JAQR2bWF4AgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzcDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uBwdfdHJhZGVyBV9zaXplBF9mZWUUX21pblF1b3RlQXNzZXRBbW91bnQMX2FkZFRvTWFyZ2luFF9jaGVja01heFByaWNlSW1wYWN0Cl9saXF1aWRhdGUEDSR0MDMwMzczMzA1MjkJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDMwMzczMzA1MjkCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzAzNzMzMDUyOQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMDM3MzMwNTI5Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDMwMzczMzA1MjkCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMzAzNzMzMDUyOQJfNQQOaXNMb25nUG9zaXRpb24JAGYCBQ9vbGRQb3NpdGlvblNpemUAAAQSYWJzT2xkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplAwMJAGcCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplCQBmAgUFX3NpemUAAAcEDmlzUGFydGlhbENsb3NlCQBmAgUSYWJzT2xkUG9zaXRpb25TaXplBQVfc2l6ZQQNJHQwMzA4MjEzMTI3MgkBCnN3YXBPdXRwdXQDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFBV9zaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDMwODIxMzEyNzICXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMDgyMTMxMjcyAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMDgyMTMxMjcyAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzA4MjEzMTI3MgJfNAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQEBLQEFBV9zaXplBQVfc2l6ZQQNJHQwMzE0ODczMTY5NAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMzE0ODczMTY5NAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDMxNDg3MzE2OTQCXzIEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQUSYWJzT2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBQ1yZWFsaXplZFJhdGlvBA0kdDAzMjAzNTMyMjgxCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBBJyZW1haW5NYXJnaW5CZWZvcmUIBQ0kdDAzMjAzNTMyMjgxAl8xBAJ4MQgFDSR0MDMyMDM1MzIyODECXzIEAngyCAUNJHQwMzIwMzUzMjI4MQJfMwQLcm9sbG92ZXJGZWUIBQ0kdDAzMjAzNTMyMjgxAl80BA9wb3NpdGlvbkJhZERlYnQICQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQtyZWFsaXplZFBubAJfMgQQcmVhbGl6ZWRDbG9zZUZlZQkBBG11bGQCCQEEbXVsZAIFE29sZFBvc2l0aW9uTm90aW9uYWwFDXJlYWxpemVkUmF0aW8FBF9mZWUEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEDSR0MDMzNjg3MzQwNzMDCQAAAgUPbmV3UG9zaXRpb25TaXplAAAJAJQKAgAAAAAJAJQKAgkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzM2ODczNDA3MwJfMQQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAzMzY4NzM0MDczAl8yBBFvcGVuTm90aW9uYWxEZWx0YQkAZQIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAQLbWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBB5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQEEbXVsZAIJAGQCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkBBG11bGQCCQBlAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFEnVucmVhbGl6ZWRQbmxBZnRlcgULbWFyZ2luUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgQRbWFyZ2luVG9UcmFkZXJSYXcJAGUCCQBlAgUScmVtYWluTWFyZ2luQmVmb3JlCQBkAgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFEHJlYWxpemVkQ2xvc2VGZWUEDm1hcmdpblRvVHJhZGVyAwkAZgIAAAURbWFyZ2luVG9UcmFkZXJSYXcDBQpfbGlxdWlkYXRlAAAJAAIBAjdJbnZhbGlkIGludGVybmFsQ2xvc2VQb3NpdGlvbiBwYXJhbXM6IHVuYWJsZSB0byBwYXkgZmVlBRFtYXJnaW5Ub1RyYWRlclJhdwQRbmV3UG9zaXRpb25NYXJnaW4DBQxfYWRkVG9NYXJnaW4JAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FDm1hcmdpblRvVHJhZGVyBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8DAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQCjChEFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAMDBQxfYWRkVG9NYXJnaW4FDmlzUGFydGlhbENsb3NlBwAABQ5tYXJnaW5Ub1RyYWRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAURb3Blbk5vdGlvbmFsRGVsdGEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFDmlzTG9uZ1Bvc2l0aW9uCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFDmlzTG9uZ1Bvc2l0aW9uCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADBQ5pc0xvbmdQb3NpdGlvbgURb3Blbk5vdGlvbmFsRGVsdGEAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQEBIQEFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBkAgUQcmVhbGl6ZWRDbG9zZUZlZQULcm9sbG92ZXJGZWUFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAj1JbnZhbGlkIGludGVybmFsQ2xvc2VQb3NpdGlvbiBwYXJhbXM6IGludmFsaWQgcG9zaXRpb24gc2l6ZTogCQCkAwEFBV9zaXplAgYgbWF4OiAJAKQDAQUSYWJzT2xkUG9zaXRpb25TaXplARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAJAJQKAgkBBnF0QXN0UgAJAQZic0FzdFIABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEDSR0MDM3MzA4Mzc0ODcJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgFDSR0MDM3MzA4Mzc0ODcCXzEEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDAzNzMwODM3NDg3Al8yBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDAzNzMwODM3NDg3Al8zCQCUCgIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQETZ2V0UXVvdGVBc3NldFdlaWdodAQQYmFzZUFzc2V0UmVzZXJ2ZRF0b3RhbFBvc2l0aW9uU2l6ZRFxdW90ZUFzc2V0UmVzZXJ2ZQt0YXJnZXRQcmljZQQBYgkAtgIBBRBiYXNlQXNzZXRSZXNlcnZlBAJzegkAtgIBBRF0b3RhbFBvc2l0aW9uU2l6ZQQBcQkAtgIBBRFxdW90ZUFzc2V0UmVzZXJ2ZQQBcAkAtgIBBQt0YXJnZXRQcmljZQQBawkBBWJtdWxkAgUBcQUBYgQEbmV3QgkAtwICBQFiBQJzegQEbmV3UQkBBWJkaXZkAgUBawUEbmV3QgQBegkBBWJkaXZkAgUEbmV3UQUEbmV3QgQGcmVzdWx0CQEFYmRpdmQCBQFwBQF6CQCgAwEFBnJlc3VsdAEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDDl90ZXJtaW5hbFByaWNlB19xdEFzdFIHX2JzQXN0UgQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQJbmV3UXRBc3RXCQETZ2V0UXVvdGVBc3NldFdlaWdodAQFB19ic0FzdFIFDV9wb3NpdGlvblNpemUFB19xdEFzdFIFDl90ZXJtaW5hbFByaWNlBAluZXdCc0FzdFcFDERFQ0lNQUxfVU5JVAQNbWFyZ2luVG9WYXVsdAgJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUNX3Bvc2l0aW9uU2l6ZQUVY3VycmVudE5ldE1hcmtldFZhbHVlBQdfcXRBc3RSBQluZXdRdEFzdFcFB19ic0FzdFIFCW5ld0JzQXN0VwUPUE5MX09QVElPTl9TUE9UAl8yCQCVCgMFCW5ld1F0QXN0VwUJbmV3QnNBc3RXBQ1tYXJnaW5Ub1ZhdWx0AQpnZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA1zcG90VHdhcFByaWNlCQEMZ2V0U3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFDXNwb3RUd2FwUHJpY2UFD3VuZGVybHlpbmdQcmljZQMDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAGCQEOaXNNYXJrZXRDbG9zZWQACQCVCgMAAAAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkDCQAAAgkBC2Z1bmRpbmdNb2RlAAUSRlVORElOR19BU1lNTUVUUklDBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24AAAQZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEDnByZW1pdW1Ub1ZhdWx0CQBlAgUZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgUYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAAAEGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAEGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAQOcHJlbWl1bVRvVmF1bHQJAGUCBRhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24FGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAJUKAwUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUOcHJlbWl1bVRvVmF1bHQBDmdldEFkanVzdGVkRmVlAgtfYXJ0aWZhY3RJZBBfYmFzZUZlZURpc2NvdW50BApiYXNlRmVlUmF3CQEDZmVlAAQHYmFzZUZlZQkBBG11bGQCBQpiYXNlRmVlUmF3BRBfYmFzZUZlZURpc2NvdW50BA0kdDA0MTIyOTQxNzI0AwkBAiE9AgULX2FydGlmYWN0SWQCAAQMYXJ0aWZhY3RLaW5kCQEEc3RyQQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdG9rZW5fdHlwZQULX2FydGlmYWN0SWQDCQAAAgUMYXJ0aWZhY3RLaW5kBRhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUECXJlZHVjdGlvbgkBBGludEECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Rva2VuX3BhcmFtBQtfYXJ0aWZhY3RJZAQLYWRqdXN0ZWRGZWUJAQRtdWxkAgUHYmFzZUZlZQUJcmVkdWN0aW9uCQCUCgIFC2FkanVzdGVkRmVlBgkAAgECGUludmFsaWQgYXR0YWNoZWQgYXJ0aWZhY3QJAJQKAgUHYmFzZUZlZQcEC2FkanVzdGVkRmVlCAUNJHQwNDEyMjk0MTcyNAJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDEyMjk0MTcyNAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0ARdpc1NhbWVBc3NldE9yTm9Qb3NpdGlvbgIHX3RyYWRlcghfYXNzZXRJZAQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQMJAAACBQ9vbGRQb3NpdGlvblNpemUAAAYJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAQtpc1NhbWVBc3NldAIHX3RyYWRlcghfYXNzZXRJZAkAAAIJARBnZXRQb3NpdGlvbkFzc2V0AQUHX3RyYWRlcgUIX2Fzc2V0SWQBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQQZG9HZXRGZWVEaXNjb3VudAkA/AcECQEMbWluZXJBZGRyZXNzAAISY29tcHV0ZUZlZURpc2NvdW50CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFEGRvR2V0RmVlRGlzY291bnQFEGRvR2V0RmVlRGlzY291bnQEC2ZlZURpc2NvdW50BAckbWF0Y2gwBRBkb0dldEZlZURpc2NvdW50AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECIUludmFsaWQgY29tcHV0ZUZlZURpc2NvdW50IHJlc3VsdAQNJHQwNDI0MDQ0MjQ3OAkBDmdldEFkanVzdGVkRmVlAgULX2FydGlmYWN0SWQFC2ZlZURpc2NvdW50BAthZGp1c3RlZEZlZQgFDSR0MDQyNDA0NDI0NzgCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQyNDA0NDI0NzgCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0QXJ0aWZhY3RJZAEBaQQKYXJ0aWZhY3RJZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEkludmFsaWQgYXJ0aWZhY3RJZAIABQphcnRpZmFjdElkAQ1kaXN0cmlidXRlRmVlAQpfZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMJAQRtdWxkAgUKX2ZlZUFtb3VudAkBE2ZlZVRvU3Rha2Vyc1BlcmNlbnQABApmZWVUb1ZhdWx0CQBlAgUKX2ZlZUFtb3VudAUMZmVlVG9TdGFrZXJzCQCUCgIFDGZlZVRvU3Rha2VycwUKZmVlVG9WYXVsdAEOdXBkYXRlU2V0dGluZ3MOEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUMX2Z1bmRpbmdNb2RlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfcm9sbG92ZXJGZWUFDF9yb2xsb3ZlckZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19mdW5kaW5nTW9kZQUMX2Z1bmRpbmdNb2RlBQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICDl9pc05ld1Bvc2l0aW9uCF9hZGRyZXNzAwUOX2lzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUIX2FkZHJlc3MJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAERdXBkYXRlUG9zaXRpb25GZWUDDl9pc05ld1Bvc2l0aW9uCF9hZGRyZXNzBF9mZWUDBQ5faXNOZXdQb3NpdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUIX2FkZHJlc3MFBF9mZWUFA25pbAUDbmlsAQ51cGRhdGVQb3NpdGlvbgYIX2FkZHJlc3MFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sYXRlc3RUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFCF9hZGRyZXNzBRBfbGF0ZXN0VGltZXN0YW1wBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19vcGVuSW50ZXJlc3RMb25nBRZfdG90YWxMb25nT3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX29wZW5JbnRlcmVzdFNob3J0BRdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAUDbmlsAQ5kZWxldGVQb3NpdGlvbgEIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQhfYWRkcmVzcwUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsAQ5kb0J1cm5BcnRpZmFjdAINX2J1cm5BcnRpZmFjdAFpAwUNX2J1cm5BcnRpZmFjdAkAzAgCCQEEQnVybgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhBJbnZhbGlkIGFydGlmYWN0AAEFA25pbAUDbmlsFgFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIUSW52YWxpZCBwYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFkludmFsaWQgdW5wYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDHNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIbSW52YWxpZCBzZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQYFA25pbAFpAQ51bnNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCB1bnNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFGJhc2VBc3NldEFtb3VudFRvQWRkCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAQNJHQwNTA0MzE1MDU4MgkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTA0MzE1MDU4MgJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTA0MzE1MDU4MgJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUwNDMxNTA1ODICXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPcmVtb3ZlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIFEV9xdW90ZUFzc2V0QW1vdW50AAAJAAIBAh5JbnZhbGlkIHJlbW92ZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJAQNhYnMBCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQQNJHQwNTE2Nzg1MTgyOQkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTE2Nzg1MTgyOQJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTE2Nzg1MTgyOQJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUxNjc4NTE4MjkCXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2hhbmdlU2V0dGluZ3MOEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUMX2Z1bmRpbmdNb2RlAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYDCQECIT0CBQxfZnVuZGluZ01vZGUFEUZVTkRJTkdfU1lNTUVUUklDCQECIT0CBQxfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwcGCQEBIQEJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncw4FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUFDF9mdW5kaW5nTW9kZQFpAQppbml0aWFsaXplEwdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUPX2Jhc2VPcmFjbGVEYXRhEF9xdW90ZU9yYWNsZURhdGEMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUMX2Z1bmRpbmdNb2RlAwMDAwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBnAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQBnAgAABQxfcm9sbG92ZXJGZWUGAwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRFGVU5ESU5HX1NZTU1FVFJJQwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRJGVU5ESU5HX0FTWU1NRVRSSUMHBgkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0IBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAAACQEOdXBkYXRlU2V0dGluZ3MOBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlBQxfZnVuZGluZ01vZGUJAQ11cGRhdGVGdW5kaW5nBQkAZAIJAQ1sYXN0VGltZXN0YW1wAAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtfYmFzZU9yYWNsZQUPX2Jhc2VPcmFjbGVEYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfcXVvdGVPcmFjbGUFEF9xdW90ZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yBQNuaWwBaQEQaW5jcmVhc2VQb3NpdGlvbgQKX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluawQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAADAwMDAwMDAwMDCQECIT0CBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkBAiE9AgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBwYJAGcCAAAFCl9yYXdBbW91bnQGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEFDGlzUXVvdGVBc3NldAYJAQEhAQkBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNTc5NTM1ODEwMgkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA1Nzk1MzU4MTAyAl8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA1Nzk1MzU4MTAyAl8yBAdfYW1vdW50CQEEZGl2ZAIFCl9yYXdBbW91bnQJAGQCCQEEbXVsZAIFC2FkanVzdGVkRmVlBQlfbGV2ZXJhZ2UFDERFQ0lNQUxfVU5JVAQTZGlzdHJpYnV0ZUZlZUFtb3VudAkAZQIFCl9yYXdBbW91bnQFB19hbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNTg1OTg1ODc2NgkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTg1OTg1ODc2NgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1ODU5ODU4NzY2Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU4NTk4NTg3NjYCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTg1OTg1ODc2NgJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1ODU5ODU4NzY2Al81BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNTkwNTU2MjE3NgMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDU5NTY0NTk3MzcJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA1OTU2NDU5NzM3Al8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTk1NjQ1OTczNwJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTk1NjQ1OTczNwJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU5NTY0NTk3MzcCXzQDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIJAGQCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAABBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAGQCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAQNJHQwNjAyODM2MDU1OAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNjAyODM2MDU1OAJfMQQCeDEIBQ0kdDA2MDI4MzYwNTU4Al8yBAJ4MggFDSR0MDYwMjgzNjA1NTgCXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjAyODM2MDU1OAJfNAMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCgCg4FD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBQtyb2xsb3ZlckZlZQQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNjE4NzY2MTk5MgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDYxODc2NjE5OTICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2MTg3NjYxOTkyAl8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTkwNTU2MjE3NgJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1OTA1NTYyMTc2Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5MDU1NjIxNzYCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTkwNTU2MjE3NgJfNAQUbmV3UG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTA1NTYyMTc2Al81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTA1NTYyMTc2Al82BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTkwNTU2MjE3NgJfNwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU5MDU1NjIxNzYCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA1OTA1NTYyMTc2Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDU5MDU1NjIxNzYDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1OTA1NTYyMTc2A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1OTA1NTYyMTc2A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTkwNTU2MjE3NgNfMTMEC3JvbGxvdmVyRmVlCAUNJHQwNTkwNTU2MjE3NgNfMTQEDSR0MDYyMTgyNjIyNTMJAQ1kaXN0cmlidXRlRmVlAQkAZAIFCWZlZUFtb3VudAULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDYyMTgyNjIyNTMCXzEECmZlZVRvVmF1bHQIBQ0kdDA2MjE4MjYyMjUzAl8yBAVzdGFrZQMJAGcCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAkAZQIFB19hbW91bnQFC3JvbGxvdmVyRmVlBQNuaWwJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGUCBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgUUbmV3UG9zaXRpb25UaW1lc3RhbXAJAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAgUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgkBEXVwZGF0ZVBvc2l0aW9uRmVlAwUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgULYWRqdXN0ZWRGZWUJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlCQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTWFyZ2luAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAADAwMDAwMDCQEBIQEFDGlzUXVvdGVBc3NldAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2lzU2FtZUFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY0NTEwNjQ2NzgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY0NTEwNjQ2NzgCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjQ1MTA2NDY3OAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NDUxMDY0Njc4Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY0NTEwNjQ2NzgCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjQ1MTA2NDY3OAJfNQQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEC3JvbGxvdmVyRmVlCQEPY2FsY1JvbGxvdmVyRmVlAgURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uVGltZXN0YW1wBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEDSR0MDY0OTYzNjUwMjIJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY0OTYzNjUwMjICXzEECmZlZVRvVmF1bHQIBQ0kdDA2NDk2MzY1MDIyAl8yBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCCQBlAgURb2xkUG9zaXRpb25NYXJnaW4FC3JvbGxvdmVyRmVlBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgEHX2Ftb3VudAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyAwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY2Mzk1NjY1NjMJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY2Mzk1NjY1NjMCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjYzOTU2NjU2MwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NjM5NTY2NTYzAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY2Mzk1NjY1NjMCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjYzOTU2NjU2MwJfNQQNJHQwNjY1Njk2NjgxOAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAkBAS0BBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2NjU2OTY2ODE4Al8xBAdiYWREZWJ0CAUNJHQwNjY1Njk2NjgxOAJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA2NjU2OTY2ODE4Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDY2NTY5NjY4MTgCXzQDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEDSR0MDY3MjA0NjcyNjMJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY3MjA0NjcyNjMCXzEECmZlZVRvVmF1bHQIBQ0kdDA2NzIwNDY3MjYzAl8yBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGQCBQdfYW1vdW50BQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9vbGRQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQdfYW1vdW50CQENdXBkYXRlQmFsYW5jZQEJAGUCCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgMFX3NpemUUX21pblF1b3RlQXNzZXRBbW91bnQMX2FkZFRvTWFyZ2luBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkEDl90cmFkZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUHX3RyYWRlcgIOSW52YWxpZCBjYWxsZXIEC3Bvc2l0aW9uRmVlCQEOZ2V0UG9zaXRpb25GZWUBBQdfdHJhZGVyAwMDAwMDCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkAZwIAAAUFX3NpemUGCQBmAgAABRRfbWluUXVvdGVBc3NldEFtb3VudAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQUb2xkUG9zaXRpb25UaW1lc3RhbXAICQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyAl81BA0kdDA2OTQzODcwMDIzCQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uBwUHX3RyYWRlcgUFX3NpemUFC3Bvc2l0aW9uRmVlBRRfbWluUXVvdGVBc3NldEFtb3VudAUMX2FkZFRvTWFyZ2luBgYED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDY5NDM4NzAwMjMCXzEEEW5ld1Bvc2l0aW9uTWFyZ2luCAUNJHQwNjk0Mzg3MDAyMwJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2OTQzODcwMDIzAl8zBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY5NDM4NzAwMjMCXzQED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDY5NDM4NzAwMjMCXzUEC3JlYWxpemVkUG5sCAUNJHQwNjk0Mzg3MDAyMwJfNgQObWFyZ2luVG9UcmFkZXIIBQ0kdDA2OTQzODcwMDIzAl83BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjk0Mzg3MDAyMwJfOAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjk0Mzg3MDAyMwJfOQQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY5NDM4NzAwMjMDXzEwBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjk0Mzg3MDAyMwNfMTEEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNjk0Mzg3MDAyMwNfMTIED3RvdGFsU2hvcnRBZnRlcggFDSR0MDY5NDM4NzAwMjMDXzEzBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY5NDM4NzAwMjMDXzE0BBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2OTQzODcwMDIzA18xNQQLcmVhbGl6ZWRGZWUIBQ0kdDA2OTQzODcwMDIzA18xNgMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECKkludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzOiBiYWQgZGVidAMJAGcCBRRvbGRQb3NpdGlvblRpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAACQACAQJTSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnM6IHdhaXQgYXQgbGVhc3QgMSBibG9jayBiZWZvcmUgY2xvc2luZyB0aGUgcG9zaXRpb24EDmlzUGFydGlhbENsb3NlCQECIT0CBQ9uZXdQb3NpdGlvblNpemUAAAQOd2l0aGRyYXdBbW91bnQJAGQCBQ5tYXJnaW5Ub1RyYWRlcgULcmVhbGl6ZWRGZWUECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNYW1tTmV3QmFsYW5jZQMJAGYCAAAFCmFtbUJhbGFuY2UAAAUKYW1tQmFsYW5jZQQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUOd2l0aGRyYXdBbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEDSR0MDcwNjk1NzA3NTQJAQ1kaXN0cmlidXRlRmVlAQULcmVhbGl6ZWRGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDcwNjk1NzA3NTQCXzEECmZlZVRvVmF1bHQIBQ0kdDA3MDY5NTcwNzU0Al8yBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFC3JlYWxpemVkRmVlBQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwUOaXNQYXJ0aWFsQ2xvc2UJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24BBQdfdHJhZGVyCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyAwkAZgIFDm1hcmdpblRvVHJhZGVyAAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBQ5tYXJnaW5Ub1RyYWRlcgUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQPc3BvdE1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQWbGlxdWlkYXRpb25NYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgUHX3RyYWRlcgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBRZsaXF1aWRhdGlvbk1hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEFB190cmFkZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlBBRpc1BhcnRpYWxMaXF1aWRhdGlvbgMDCQBmAgUPc3BvdE1hcmdpblJhdGlvCQETbGlxdWlkYXRpb25GZWVSYXRpbwAJAGYCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AAAAHCQBmAgUMREVDSU1BTF9VTklUCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABwQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDA3MzE3NTczNDk4AwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24ED2xpcXVpZGF0aW9uU2l6ZQkBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJAJQKAgUQbGlxdWlkYXRpb25SYXRpbwkBA2FicwEFD2xpcXVpZGF0aW9uU2l6ZQkAlAoCAAAFD3Bvc2l0aW9uU2l6ZUFicwQQbGlxdWlkYXRpb25SYXRpbwgFDSR0MDczMTc1NzM0OTgCXzEED2xpcXVpZGF0aW9uU2l6ZQgFDSR0MDczMTc1NzM0OTgCXzIEDSR0MDczNTA0NzQxNDIJARVpbnRlcm5hbENsb3NlUG9zaXRpb24HBQdfdHJhZGVyAwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24FD2xpcXVpZGF0aW9uU2l6ZQUPcG9zaXRpb25TaXplQWJzCQETbGlxdWlkYXRpb25GZWVSYXRpbwAAAAYHBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNzM1MDQ3NDE0MgJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA3MzUwNDc0MTQyAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDczNTA0NzQxNDICXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzM1MDQ3NDE0MgJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNzM1MDQ3NDE0MgJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA3MzUwNDc0MTQyAl82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDczNTA0NzQxNDICXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MzUwNDc0MTQyAl84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MzUwNDc0MTQyAl85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzM1MDQ3NDE0MgNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3MzUwNDc0MTQyA18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3MzUwNDc0MTQyA18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzM1MDQ3NDE0MgNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzM1MDQ3NDE0MgNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDczNTA0NzQxNDIDXzE1BBJsaXF1aWRhdGlvblBlbmFsdHkIBQ0kdDA3MzUwNDc0MTQyA18xNgQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNbmV3QW1tQmFsYW5jZQMJAGYCAAAFCmFtbUJhbGFuY2UAAAUKYW1tQmFsYW5jZQQLbG9ja0JhZERlYnQDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkAZAIFD3Bvc2l0aW9uQmFkRGVidAUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEJAQ1sYXN0VGltZXN0YW1wAAIDIDwgCQCkAwEFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA3NjI1NTc2MzMzCQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwNzYyNTU3NjMzMwJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDc2MjU1NzYzMzMCXzIEDnByZW1pdW1Ub1ZhdWx0CAUNJHQwNzYyNTU3NjMzMwJfMwQTZG9QYXlGdW5kaW5nVG9WYXVsdAMJAGYCBQ5wcmVtaXVtVG9WYXVsdAAABBNkb1BheUZ1bmRpbmdUb1ZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQ5wcmVtaXVtVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUTZG9QYXlGdW5kaW5nVG9WYXVsdAUTZG9QYXlGdW5kaW5nVG9WYXVsdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUTZG9QYXlGdW5kaW5nVG9WYXVsdAUTZG9QYXlGdW5kaW5nVG9WYXVsdAkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlAAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABA0kdDA3NzM4NDc3NzUwCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQdfcXRBc3RSBQdfYnNBc3RSBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNzczODQ3Nzc1MAJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNzczODQ3Nzc1MAJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDc3Mzg0Nzc3NTACXzMEEG1hcmdpblRvVmF1bHRBZGoDAwkAZgIAAAUNbWFyZ2luVG9WYXVsdAkAZgIJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0CQEIY2JhbGFuY2UABwkBAS0BCQEIY2JhbGFuY2UABQ1tYXJnaW5Ub1ZhdWx0BA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUQbWFyZ2luVG9WYXVsdEFkagAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUQbWFyZ2luVG9WYXVsdEFkagUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABRBtYXJnaW5Ub1ZhdWx0QWRqCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBlbnN1cmVDYWxsZWRPbmNlAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECIkludmFsaWQgc2F2ZUN1cnJlbnRUeElkIHBhcmFtZXRlcnMEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQhrX2xhc3RUeAIAAwkBAiE9AgUGbGFzdFR4CQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19sYXN0VHgFBmxhc3RUeAUDbmlsCQACAQIpQ2FuIG5vdCBjYWxsIHZBTU0gbWV0aG9kcyB0d2ljZSBpbiBvbmUgdHgBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEDSR0MDc5Mjk5Nzk0MjMJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDc5Mjk5Nzk0MjMCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwNzkyOTk3OTQyMwJfMgQDcG9uCAUNJHQwNzkyOTk3OTQyMwJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3OTI5OTc5NDIzAl80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDc5Mjk5Nzk0MjMCXzUEDSR0MDc5NDI2Nzk1MjcJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDc5NDI2Nzk1MjcCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA3OTQyNjc5NTI3Al8yBA0kdDA3OTUzMDc5NzU0CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA3OTUzMDc5NzU0Al8xBAdiYWREZWJ0CAUNJHQwNzk1MzA3OTc1NAJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA3OTUzMDc5NzU0Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDc5NTMwNzk3NTQCXzQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAkBAXMBBRBwb3NpdGlvbk5vdGlvbmFsCQEBcwEFC3JvbGxvdmVyRmVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwUGX3ByaWNlBQdfcXRBc3RSBQdfYnNBc3RSCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDgwNDc3ODA1NTgJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDgwNDc3ODA1NTgCXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDgwNDc3ODA1NTgCXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA4MTA2NzgxMTQ1CQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwODEwNjc4MTE0NQJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDgxMDY3ODExNDUCXzIEDnByZW1pdW1Ub1ZhdWx0CAUNJHQwODEwNjc4MTE0NQJfMwQLbG9uZ0Z1bmRpbmcJAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlBAxzaG9ydEZ1bmRpbmcJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBDGdldFNwb3RQcmljZQAJAQFzAQkBDmdldE9yYWNsZVByaWNlAAkBAXMBBQ5wcmVtaXVtVG9WYXVsdAFpARBjb21wdXRlU3BvdFByaWNlAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleWuClq8=", "height": 2456433, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HTfirUBuhiK3P4VTMJ4s56n5tovnXV4K5jvfuyarxoB7 Next: BDLQAa4SLiFBJrdSLNxd1GtYa8kZDb3EFmoh8sMpBy46 Diff:
OldNewDifferences
5959
6060 let C = "k_fundingMode"
6161
62-let D = "k_lastDataStr"
62+let D = "k_latestLongPremiumFraction"
6363
64-let E = "k_lastMinuteId"
64+let E = "k_latestShortPremiumFraction"
6565
66-let F = "k_twapDataLastCumulativePrice"
66+let F = "k_nextFundingBlockMinTimestamp"
6767
68-let G = "k_twapDataLastPrice"
68+let G = "k_longFundingRate"
6969
70-let H = "k_twapDataPreviousMinuteId"
70+let H = "k_shortFundingRate"
7171
72-let I = "k_latestLongPremiumFraction"
72+let I = "k_qtAstR"
7373
74-let J = "k_latestShortPremiumFraction"
74+let J = "k_bsAstR"
7575
76-let K = "k_nextFundingBlockMinTimestamp"
76+let K = "k_qtAstW"
7777
78-let L = "k_longFundingRate"
78+let L = "k_bsAstW"
7979
80-let M = "k_shortFundingRate"
80+let M = "k_totalPositionSize"
8181
82-let N = "k_qtAstR"
82+let N = "k_totalLongPositionSize"
8383
84-let O = "k_bsAstR"
84+let O = "k_totalShortPositionSize"
8585
86-let P = "k_qtAstW"
86+let P = "k_openInterestNotional"
8787
88-let Q = "k_bsAstW"
88+let Q = "k_openInterestShort"
8989
90-let R = "k_totalPositionSize"
90+let R = "k_openInterestLong"
9191
92-let S = "k_totalLongPositionSize"
92+let S = "k_lastTx"
9393
94-let T = "k_totalShortPositionSize"
94+let T = "k_coordinatorAddress"
9595
96-let U = "k_openInterestNotional"
96+let U = "k_vault_address"
9797
98-let V = "k_openInterestShort"
98+let V = "k_admin_address"
9999
100-let W = "k_openInterestLong"
100+let W = "k_quote_asset"
101101
102-let X = "k_lastTx"
102+let X = "k_quote_staking"
103103
104-let Y = "k_coordinatorAddress"
104+let Y = "k_staking_address"
105105
106-let Z = "k_vault_address"
106+let Z = "k_miner_address"
107107
108-let aa = "k_admin_address"
108+let aa = "k_orders_address"
109109
110-let ab = "k_quote_asset"
110+let ab = "k_referral_address"
111111
112-let ac = "k_quote_staking"
112+let ac = "k_exchange_address"
113113
114-let ad = "k_staking_address"
114+let ad = "k_nft_manager_address"
115115
116-let ae = "k_miner_address"
117-
118-let af = "k_orders_address"
119-
120-let ag = "k_referral_address"
121-
122-let ah = "k_exchange_address"
123-
124-let ai = "k_nft_manager_address"
125-
126-func aj (ak,al) = ((ak + "_") + al)
116+func ae (af,ag) = ((af + "_") + ag)
127117
128118
129-func am () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
119+func ah () = valueOrErrorMessage(addressFromString(getStringValue(this, T)), "Coordinator not set")
130120
131121
132-func an () = addressFromString(getStringValue(am(), aa))
122+func ai () = addressFromString(getStringValue(ah(), V))
133123
134124
135-func ao () = fromBase58String(getStringValue(am(), ab))
125+func aj () = fromBase58String(getStringValue(ah(), W))
136126
137127
138-func ap () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
128+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ah(), X)), "Quote asset staking not set")
139129
140130
141-func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
131+func al () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Y)), "Staking not set")
142132
143133
144-func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), Z)), "Vault not set")
134+func am () = valueOrErrorMessage(addressFromString(getStringValue(ah(), U)), "Vault not set")
145135
146136
147-func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
137+func an () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Z)), "Miner not set")
148138
149139
150-func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
140+func ao () = valueOrErrorMessage(addressFromString(getStringValue(ah(), aa)), "Orders not set")
151141
152142
153-func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
143+func ap () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ab)), "Referral not set")
154144
155145
156-func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
146+func aq () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ad)), "NFT Manager not set")
157147
158148
159-let aw = "k_token_param"
149+let ar = "k_token_param"
160150
161-let ax = "k_token_type"
151+let as = "k_token_type"
162152
163-let ay = "fee_reduction"
153+let at = "fee_reduction"
164154
165-let az = 1
155+let au = 1
166156
167-let aA = 2
157+let av = 2
168158
169-let aB = 15
159+let aw = 15
170160
171-let aC = 1000
161+let ax = 1000
172162
173-let aD = 6
163+let ay = 6
174164
175-let aE = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
165+let az = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
176166
177-let aF = (525600 * aE)
167+let aA = (525600 * az)
178168
179-let aG = (86400 * aE)
169+let aB = (86400 * az)
180170
181-let aH = 1
171+let aC = 1
182172
183-let aI = 2
173+let aD = 2
184174
185-let aJ = 1
175+let aE = 1
186176
187-let aK = 2
177+let aF = 2
188178
189-func aL (aM) = (toString(aM) + ",")
179+func aG (aH) = (toString(aH) + ",")
190180
191181
192-func aN (aM,aO) = fraction(aM, aE, aO, HALFEVEN)
182+func aI (aH,aJ) = fraction(aH, az, aJ, HALFEVEN)
193183
194184
195-func aP (aM,aO) = fraction(aM, aO, aE, HALFEVEN)
185+func aK (aH,aJ) = fraction(aH, aJ, az, HALFEVEN)
196186
197187
198-func aQ (aM,aO) = fraction(aM, toBigInt(aE), aO, HALFEVEN)
188+func aL (aH,aJ) = fraction(aH, toBigInt(az), aJ, HALFEVEN)
199189
200190
201-func aR (aM,aO) = fraction(aM, aO, toBigInt(aE), HALFEVEN)
191+func aM (aH,aJ) = fraction(aH, aJ, toBigInt(az), HALFEVEN)
202192
203193
204-func aS (aM) = if ((aM > 0))
205- then aM
206- else -(aM)
194+func aN (aH) = if ((aH > 0))
195+ then aH
196+ else -(aH)
207197
208198
209-func aT (aM,aO) = if ((aM >= aO))
210- then aM
211- else aO
199+func aO (aH,aJ) = if ((aH >= aJ))
200+ then aH
201+ else aJ
212202
213203
214-func aU (aV) = if ((size(aV) == 0))
204+func aP (aQ) = if ((size(aQ) == 0))
215205 then ""
216- else makeString(aV, ",")
206+ else makeString(aQ, ",")
217207
218208
219-func aW (aX) = if ((aX == ""))
209+func aR (aS) = if ((aS == ""))
220210 then nil
221- else split(aX, ",")
211+ else split(aS, ",")
222212
223213
224-func aY (aV,aZ,ba) = if ((size(aV) > aZ))
225- then (removeByIndex(aV, 0) :+ ba)
226- else (aV :+ ba)
214+func aT (aQ,aU,aV) = if ((size(aQ) > aU))
215+ then (removeByIndex(aQ, 0) :+ aV)
216+ else (aQ :+ aV)
227217
228218
229-func bb (bc) = valueOrErrorMessage(getInteger(this, bc), ("no value for " + bc))
219+func aW (aX) = valueOrErrorMessage(getInteger(this, aX), ("no value for " + aX))
230220
231221
232-func bd (bc,be) = valueOrElse(getInteger(this, bc), be)
222+func aY (aX,aZ) = valueOrElse(getInteger(this, aX), aZ)
233223
234224
235-func bf (al,ak) = {
236- let bg = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
237- bg
225+func ba (ag,af) = {
226+ let bb = valueOrErrorMessage(getString(ag, af), ("No value for key " + af))
227+ bb
238228 }
239229
240230
241-func bh (al,ak) = {
242- let bg = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
243- bg
231+func bc (ag,af) = {
232+ let bb = valueOrErrorMessage(getInteger(ag, af), ("No value for key " + af))
233+ bb
244234 }
245235
246236
247-func bi () = bb(c)
237+func bd () = aW(c)
248238
249239
250-func bj () = bb(p)
240+func be () = aW(p)
251241
252242
253-func bk () = bb(q)
243+func bf () = aW(q)
254244
255245
256-func bl () = bb(s)
246+func bg () = aW(s)
257247
258248
259-func bm () = bb(N)
249+func bh () = aW(I)
260250
261251
262-func bn () = bb(O)
252+func bi () = aW(J)
263253
264254
265-func bo () = bd(P, aE)
255+func bj () = aY(K, az)
266256
267257
268-func bp () = bd(Q, aE)
258+func bk () = aY(L, az)
269259
270260
271-func bq () = bb(R)
261+func bl () = aW(M)
272262
273263
274-func br () = bb(U)
264+func bm () = aW(P)
275265
276266
277-func bs () = bb(V)
267+func bn () = aW(Q)
278268
279269
280-func bt () = bb(W)
270+func bo () = aW(R)
281271
282272
283-func bu () = bb(K)
273+func bp () = aW(F)
284274
285275
286-func bv () = bb(r)
276+func bq () = aW(r)
287277
288278
289-func bw () = (bv() * aE)
279+func br () = (bq() * az)
290280
291281
292-func bx () = (bv() * aC)
282+func bs () = (bq() * ax)
293283
294284
295-func by () = bb(t)
285+func bt () = aW(t)
296286
297287
298-func bz () = bb(u)
288+func bu () = aW(u)
299289
300290
301-func bA () = bb(v)
291+func bv () = aW(v)
302292
303293
304-func bB () = bb(w)
294+func bw () = aW(w)
305295
306296
307-func bC () = bb(x)
297+func bx () = aW(x)
308298
309299
310-func bD () = bb(y)
300+func by () = aW(y)
311301
312302
313-func bE () = bb(z)
303+func bz () = aW(z)
314304
315305
316-func bF () = bb(I)
306+func bA () = aW(D)
317307
318308
319-func bG () = bb(J)
309+func bB () = aW(E)
320310
321311
322-func bH () = bb(T)
312+func bC () = aW(O)
323313
324314
325-func bI () = bb(S)
315+func bD () = aW(N)
326316
327317
328-func bJ () = bd(d, 0)
318+func bE () = aY(d, 0)
329319
330320
331-func bK () = bb(A)
321+func bF () = aW(A)
332322
333323
334-func bL () = bb(B)
324+func bG () = aW(B)
335325
336326
337-func bM () = bd(C, aJ)
327+func bH () = aY(C, aE)
338328
339329
340-func bN () = lastBlock.timestamp
330+func bI () = lastBlock.timestamp
341331
342332
343-func bO (bP) = valueOrElse(getString(at(), "k_sender"), toString(bP.caller))
333+func bJ (bK) = valueOrElse(getString(ao(), "k_sender"), toString(bK.caller))
344334
345335
346-func bQ (bR,bS,bT) = {
347- let bU = (bR - bS)
348- if (if (bT)
349- then (0 > bU)
336+func bL (bM,bN,bO) = {
337+ let bP = (bM - bN)
338+ if (if (bO)
339+ then (0 > bP)
350340 else false)
351- then throw(((("Invalid margin: " + toString(bR)) + " < ") + toString(bS)))
352- else if (if (!(bT))
353- then (bU >= 0)
341+ then throw(((("Invalid margin: " + toString(bM)) + " < ") + toString(bN)))
342+ else if (if (!(bO))
343+ then (bP >= 0)
354344 else false)
355- then throw(((("Invalid margin: " + toString(bR)) + " > ") + toString(bS)))
345+ then throw(((("Invalid margin: " + toString(bM)) + " > ") + toString(bN)))
356346 else true
357347 }
358348
359349
360-func bV (bW) = if ((bW == 0))
350+func bQ (bR) = if ((bR == 0))
361351 then throw("Should not be called with _positionSize == 0")
362- else if ((bW > 0))
363- then bF()
364- else bG()
352+ else if ((bR > 0))
353+ then bA()
354+ else bB()
365355
366356
367-func bX (bY) = {
368- let bZ = getInteger(this, aj(e, bY))
369- let ca = bZ
370- if ($isInstanceOf(ca, "Int"))
357+func bS (bT) = {
358+ let bU = getInteger(this, ae(e, bT))
359+ let bV = bU
360+ if ($isInstanceOf(bV, "Int"))
371361 then {
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)))
362+ let bW = bV
363+ $Tuple5(bW, getIntegerValue(this, ae(f, bT)), getIntegerValue(this, ae(g, bT)), getIntegerValue(this, ae(h, bT)), getIntegerValue(this, ae(l, bT)))
374364 }
375365 else $Tuple5(0, 0, 0, 0, 0)
376366 }
377367
378368
379-func cc (bY) = {
380- let cd = getString(this, aj(j, bY))
381- let ca = cd
382- if ($isInstanceOf(ca, "String"))
369+func bX (bT) = {
370+ let bY = getString(this, ae(j, bT))
371+ let bV = bY
372+ if ($isInstanceOf(bV, "String"))
383373 then {
384- let ce = ca
385- ce
374+ let bZ = bV
375+ bZ
386376 }
387- else toBase58String(ao())
377+ else toBase58String(aj())
388378 }
389379
390380
391-func cf (bY) = {
392- let cg = getInteger(this, aj(k, bY))
393- let ca = cg
394- if ($isInstanceOf(ca, "Int"))
381+func ca (bT) = {
382+ let cb = getInteger(this, ae(k, bT))
383+ let bV = cb
384+ if ($isInstanceOf(bV, "Int"))
395385 then {
396- let ch = ca
397- ch
386+ let cc = bV
387+ cc
398388 }
399- else bj()
389+ else be()
400390 }
401391
402392
403-func ci (bY) = if ((bX(bY)._1 == 0))
393+func cd (bT) = if ((bS(bT)._1 == 0))
404394 then throw("No open position")
405395 else true
406396
407397
408-func cj (ck) = {
409- let cl = getString(this, ck)
410- if (if (isDefined(cl))
411- then (value(cl) != "")
398+func ce (cf) = {
399+ let cg = getString(this, cf)
400+ if (if (isDefined(cg))
401+ then (value(cg) != "")
412402 else false)
413403 then {
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)
404+ let ch = split(value(cg), ",")
405+ let ci = valueOrErrorMessage(addressFromString(ch[0]), ("Invalid oracle address in: " + value(cg)))
406+ let cj = ch[1]
407+ let ck = ch[2]
408+ let cl = ch[3]
409+ $Tuple4(ci, cj, ck, cl)
420410 }
421411 else unit
422412 }
423413
424414
425-func cr () = valueOrElse(getBoolean(this, m), false)
415+func cm () = valueOrElse(getBoolean(this, m), false)
426416
427417
428-func cs () = valueOrElse(getBoolean(this, n), false)
418+func cn () = valueOrElse(getBoolean(this, n), false)
429419
430420
431-func ct () = valueOrElse(getBoolean(this, o), false)
421+func co () = valueOrElse(getBoolean(this, o), false)
432422
433423
434-func cu (cv,cw,cx) = if (cv)
424+func cp (cq,cr,cs) = if (cq)
435425 then {
436- let cy = (bn() - cx)
437- if ((0 >= cy))
426+ let ct = (bi() - cs)
427+ if ((0 >= ct))
438428 then throw("Tx lead to base asset reserve <= 0, revert")
439- else $Tuple3((bm() + cw), cy, (bq() + cx))
429+ else $Tuple3((bh() + cr), ct, (bl() + cs))
440430 }
441431 else {
442- let cz = (bm() - cw)
443- if ((0 >= cz))
432+ let cu = (bh() - cr)
433+ if ((0 >= cu))
444434 then throw("Tx lead to base quote reserve <= 0, revert")
445- else $Tuple3(cz, (bn() + cx), (bq() - cx))
435+ else $Tuple3(cu, (bi() + cs), (bl() - cs))
446436 }
447437
448438
449-func cA (cB,cC) = {
450- let cD = toBigInt(cB)
451- let cE = toBigInt(cC)
452- aR(cD, cE)
439+func cv (cw,cx) = {
440+ let cy = toBigInt(cw)
441+ let cz = toBigInt(cx)
442+ aM(cy, cz)
453443 }
454444
455445
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)
446+func cA (cq,cr) = {
447+ let cw = bh()
448+ let cx = bi()
449+ let cB = bj()
450+ let cC = bk()
451+ let cD = aI(cr, cB)
452+ let aX = cv(cw, cx)
453+ let cE = if (cq)
454+ then (cw + cD)
455+ else (cw - cD)
456+ let cF = toInt(aL(aX, toBigInt(cE)))
457+ let cG = aN((cF - cx))
458+ let cH = if (cq)
459+ then cG
460+ else -(cG)
461+ let cI = cp(cq, cD, cG)
462+ let cJ = cI._1
463+ let cK = cI._2
464+ let cL = cI._3
465+ let cM = aI(aK(cw, cB), aK(cx, cC))
466+ let cN = aI(cr, cG)
467+ let cO = aN((cM - cN))
468+ let cP = (az - aI(cM, (cM + cO)))
469+ let cQ = bx()
470+ if ((cP > cQ))
471+ then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(cw)) + " before base asset: ") + toString(cx)) + " quote asset amount to exchange: ") + toString(cr)) + " price before: ") + toString(cM)) + " marketPrice: ") + toString(cN)))
472+ else $Tuple4(cH, cJ, cK, cL)
483473 }
484474
485475
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
476+func cR (cS,cT) = {
477+ let cU = ((((bI() - cT) / 1000) / 60) * az)
478+ let cV = aI(aK(aK(cS, cU), bf()), aA)
479+ cV
490480 }
491481
492482
493-func db (dc,cX,dd,cY,de) = {
494- let df = if ((dc != 0))
483+func cW (cX,cS,cY,cT,cZ) = {
484+ let da = if ((cX != 0))
495485 then {
496- let dg = bV(dc)
497- aP((dg - dd), dc)
486+ let db = bQ(cX)
487+ aK((db - cY), cX)
498488 }
499489 else 0
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)
490+ let cV = cR(cS, cT)
491+ let dc = (((cZ - cV) - da) + cS)
492+ let dd = if ((0 > dc))
493+ then $Tuple2(0, aN(dc))
494+ else $Tuple2(aN(dc), 0)
495+ let de = dd._1
496+ let df = dd._2
497+ $Tuple4(de, df, da, cV)
508498 }
509499
510500
511-func dl (cv,cx,dm,dn,do,dp,dq) = {
512- let cR = aN(aP(dn, do), aP(dp, dq))
513- if ((cx == 0))
501+func dg (cq,cs,dh,di,dj,dk,dl) = {
502+ let cM = aI(aK(di, dj), aK(dk, dl))
503+ if ((cs == 0))
514504 then throw("Invalid base asset amount")
515505 else {
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
506+ let aX = cv(di, dk)
507+ let dm = if (cq)
508+ then (dk + cs)
509+ else (dk - cs)
510+ let dn = toInt(aL(aX, toBigInt(dm)))
511+ let do = aN((dn - di))
512+ let dp = aK(do, dj)
513+ let cQ = bx()
514+ let dq = cp(!(cq), do, cs)
515+ let cJ = dq._1
516+ let cK = dq._2
517+ let cL = dq._3
518+ let cN = aI(dp, cs)
519+ let cO = aN((cM - cN))
520+ let cP = (az - aI(cM, (cM + cO)))
521+ if (if ((cP > cQ))
522+ then dh
533523 else false)
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)
524+ then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(di)) + " before base asset: ") + toString(dk)) + " base asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cM)) + " market price: ") + toString(cN)))
525+ else $Tuple7(dp, cJ, cK, cL, (bD() - (if (cq)
526+ then aN(cs)
527+ else 0)), (bC() - (if (!(cq))
528+ then aN(cs)
529+ else 0)), cP)
540530 }
541531 }
542532
543533
544-func dw (cv,cx,dm) = dl(cv, cx, dm, bm(), bo(), bn(), bp())
534+func dr (cq,cs,dh) = dg(cq, cs, dh, bh(), bj(), bi(), bk())
545535
546536
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 != ""))
537+func ds (dt,cj,ck) = {
538+ let du = valueOrErrorMessage(getInteger(dt, cj), ((("Can not get oracle price. Oracle: " + toString(dt)) + " key: ") + cj))
539+ if ((ck != ""))
550540 then {
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
541+ let dv = lastBlock.height
542+ let dw = valueOrErrorMessage(getInteger(dt, ck), ((("Can not get oracle block. Oracle: " + toString(dt)) + " key: ") + ck))
543+ if (((dv - dw) > bG()))
544+ then throw(((("Oracle stale data. Last oracle block: " + toString(dw)) + " current block: ") + toString(dv)))
545+ else du
556546 }
557- else dz
547+ else du
558548 }
559549
560550
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))
551+func dx () = {
552+ let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
553+ let dz = ds(dy._1, dy._2, dy._3)
554+ let dA = ce(b)
555+ let dB = if (isDefined(dA))
566556 then {
567- let dH = value(dF)
568- dx(dH._1, dH._2, dH._3)
557+ let dC = value(dA)
558+ ds(dC._1, dC._2, dC._3)
569559 }
570- else aE
571- aN(dE, dG)
560+ else az
561+ aI(dz, dB)
572562 }
573563
574564
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 != ""))
565+func dD () = {
566+ let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
567+ let dt = dy._1
568+ let cl = dy._4
569+ if ((cl != ""))
580570 then {
581- let dJ = valueOrErrorMessage(getBoolean(dy, cq), ((("Can not get oracle is open/closed. Oracle: " + toString(dy)) + " key: ") + cq))
582- !(dJ)
571+ let dE = valueOrErrorMessage(getBoolean(dt, cl), ((("Can not get oracle is open/closed. Oracle: " + toString(dt)) + " key: ") + cl))
572+ !(dE)
583573 }
584574 else false
585575 }
586576
587577
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
578+func dF (dG,di,dk,cB,cC) = {
579+ let dH = aI(aK(di, cB), aK(dk, cC))
580+ let dI = aI((dG + dH), (2 * az))
581+ let dF = aI(aN((dG - dH)), dI)
582+ dF
593583 }
594584
595585
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)
586+func dJ (di,dk) = {
587+ let dK = dx()
588+ let cB = bj()
589+ let cC = bk()
590+ let dL = dF(dK, bh(), bi(), cB, cC)
591+ let dM = dF(dK, di, dk, cB, cC)
592+ if (if ((dM > by()))
593+ then (dM > dL)
604594 else false)
605- then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bD())))
595+ then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(by())))
606596 else true
607597 }
608598
609599
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)))
600+func dN (dO,dP) = {
601+ let dQ = bz()
602+ if ((dO > dQ))
603+ then throw(((("Long open notional " + toString(dO)) + " > max open notional ") + toString(dQ)))
604+ else if ((dP > dQ))
605+ then throw(((("Short open notional " + toString(dP)) + " > max open notional ") + toString(dQ)))
616606 else true
617607 }
618608
619609
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))
610+func dR () = {
611+ let di = bh()
612+ let dk = bi()
613+ let cB = bj()
614+ let cC = bk()
615+ aI(aK(di, cB), aK(dk, cC))
626616 }
627617
628618
629-func dX () = {
630- let dP = dC()
631- let dY = dW()
632- (aN(aS((dP - dY)), dP) > bB())
619+func dS () = {
620+ let dK = dx()
621+ let dT = dR()
622+ (aI(aN((dK - dT)), dK) > bw())
633623 }
634624
635625
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))
626+func dU (bR,dV,di,dj,dk,dl) = {
627+ let dW = aN(bR)
628+ let dX = (0 > bR)
629+ let dY = if ((dV == aC))
640630 then {
641- let ee = dl(!(ec), eb, false, dn, do, dp, dq)._1
642- ee
631+ let dZ = dg(!(dX), dW, false, di, dj, dk, dl)._1
632+ dZ
643633 }
644- else aP(eb, dC())
645- ed
634+ else aK(dW, dx())
635+ dY
646636 }
647637
648638
649-func ef (bW,eg,dn,do,dp,dq,ea) = if ((bW == 0))
639+func ea (bR,eb,di,dj,dk,dl,dV) = if ((bR == 0))
650640 then throw("Invalid position size")
651641 else {
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)
642+ let dX = (0 > bR)
643+ let dY = dU(bR, dV, di, dj, dk, dl)
644+ let ec = if (dX)
645+ then (eb - dY)
646+ else (dY - eb)
647+ $Tuple2(dY, ec)
658648 }
659649
660650
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)
651+func ed (bT,dV) = {
652+ let ee = bS(bT)
653+ let bW = ee._1
654+ let ef = ee._2
655+ let eg = ee._3
656+ let eh = ee._4
657+ ea(bW, eg, bh(), bj(), bi(), bk(), dV)
668658 }
669659
670660
671-func en (eo,ep,eq) = aN((eo - ep), eq)
661+func ei (ej,ek,el) = aI((ej - ek), el)
672662
673663
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)
664+func em (bT,dV) = {
665+ let en = bS(bT)
666+ let bW = en._1
667+ let ef = en._2
668+ let eo = en._3
669+ let ep = en._4
670+ let eq = en._5
671+ let er = ed(bT, dV)
672+ let dY = er._1
673+ let ec = er._2
674+ let es = cW(bW, ef, ep, eq, ec)
675+ let de = es._1
676+ let df = es._2
677+ ei(de, df, dY)
688678 }
689679
690680
691-func ey (bY) = er(bY, aH)
681+func et (bT) = em(bT, aC)
692682
693683
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())
684+func eu (bT,bR) = {
685+ let ev = aO(bv(), (az - aI(et(bT), bt())))
686+ let ew = aK(aN(bR), ev)
687+ let ex = dr((bR > 0), ew, false)
688+ let ey = ex._1
689+ let cP = ex._7
690+ if ((bx() > cP))
691+ then ew
692+ else aK(aN(bR), bv())
703693 }
704694
705695
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)
696+func ez (bT,eA,eB,eC,eD,dh,eE) = {
697+ let eF = bS(bT)
698+ let eG = eF._1
699+ let eH = eF._2
700+ let eI = eF._3
701+ let eJ = eF._4
702+ let eK = eF._5
703+ let eL = (eG > 0)
704+ let eM = aN(eG)
705+ if (if ((eM >= eA))
706+ then (eA > 0)
717707 else false)
718708 then {
719- let eS = (eR > eF)
720- let eT = dw((eL > 0), eF, dm)
721- let eU = eT._1
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)
729- let eY = eX._1
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))
709+ let eN = (eM > eA)
710+ let eO = dr((eG > 0), eA, dh)
711+ let eP = eO._1
712+ let cE = eO._2
713+ let cF = eO._3
714+ let eQ = eO._4
715+ let eR = if ((eG > 0))
716+ then -(eA)
717+ else eA
718+ let eS = ed(bT, aC)
719+ let eT = eS._1
720+ let ec = eS._2
721+ let eU = aI(aN(eR), eM)
722+ let eV = aK(ec, eU)
723+ let eW = cW(eG, eH, eJ, eK, ec)
724+ let eX = eW._1
725+ let eY = eW._2
726+ let eZ = eW._3
727+ let cV = eW._4
728+ let fa = cW(eG, eH, eJ, eK, eV)._2
729+ let fb = aK(aK(eT, eU), eB)
730+ let fc = (ec - eV)
731+ let fd = if ((eG > 0))
732+ then ((eT - eP) - fc)
733+ else ((fc + eT) - eP)
734+ let fe = (eG + eR)
735+ let ff = if ((fe == 0))
746736 then $Tuple2(0, 0)
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)
737+ else $Tuple2(aN(fd), bQ(fe))
738+ let fg = ff._1
739+ let fh = ff._2
740+ let fi = (eI - fg)
741+ let fj = em(bT, aC)
742+ let fk = if ((eG > 0))
743+ then (aK((fg + fc), fj) - fc)
744+ else (aK((fg - fc), fj) - fc)
745+ let fl = ((eX - (fk + fc)) - fb)
746+ let fm = if ((0 > fl))
747+ then if (eE)
758748 then 0
759749 else throw("Invalid internalClosePosition params: unable to pay fee")
760- else fq
761- let fs = if (eI)
762- then (fp + fr)
763- else fp
764- if (if ((eH != 0))
765- then (eH > eU)
750+ else fl
751+ let fn = if (eD)
752+ then (fk + fm)
753+ else fk
754+ if (if ((eC != 0))
755+ then (eC > eP)
766756 else false)
767- then throw(((("Limit error: " + toString(eU)) + " < ") + toString(eH)))
768- else $Tuple17(fj, fs, fl, fm, ff, fa, if (if (eI)
769- then eS
757+ then throw(((("Limit error: " + toString(eP)) + " < ") + toString(eC)))
758+ else $Tuple17(fe, fn, fg, fh, fa, eV, if (if (eD)
759+ then eN
770760 else false)
771761 then 0
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)
762+ else fm, cE, cF, eQ, (bm() - fi), (bD() - (if (eL)
763+ then aN(eR)
764+ else 0)), (bC() - (if (!(eL))
765+ then aN(eR)
766+ else 0)), (bo() - (if (eL)
767+ then fi
768+ else 0)), (bn() - (if (!(eL))
769+ then fi
770+ else 0)), (fb + cV), eP)
781771 }
782- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eF)) + " max: ") + toString(eR)))
772+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eA)) + " max: ") + toString(eM)))
783773 }
784774
785775
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
794-
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])
802-
803- func fI (fG,fH) = if ((fH >= fD))
804- then fG
805- else throw("List size exceeds 20")
806-
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)
808- }
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)
820- }
821-
822-
823-func fR () = {
824- let bW = bq()
825- if ((bW == 0))
826- then $Tuple2(bm(), bn())
776+func fo () = {
777+ let bR = bl()
778+ if ((bR == 0))
779+ then $Tuple2(bh(), bi())
827780 else {
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)
781+ let fp = (bR > 0)
782+ let fq = dr(fp, aN(bR), false)
783+ let fr = fq._1
784+ let fs = fq._2
785+ let ft = fq._3
786+ $Tuple2(fs, ft)
834787 }
835788 }
836789
837790
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)
791+func fu (fv,bl,fw,fx) = {
792+ let fy = toBigInt(fv)
793+ let fz = toBigInt(bl)
794+ let fA = toBigInt(fw)
795+ let fB = toBigInt(fx)
796+ let aX = aM(fA, fy)
797+ let fC = (fy + fz)
798+ let fD = aL(aX, fC)
799+ let fE = aL(fD, fC)
800+ let fF = aL(fB, fE)
801+ toInt(fF)
849802 }
850803
851804
852-func gj (gk,cB,cC) = {
853- let bW = bq()
854- if ((bW == 0))
805+func fG (fH,cw,cx) = {
806+ let bR = bl()
807+ if ((bR == 0))
855808 then {
856- let gl = aN(aP(gk, cC), cB)
857- $Tuple3(gl, aE, 0)
809+ let fI = aI(aK(fH, cx), cw)
810+ $Tuple3(fI, az, 0)
858811 }
859812 else {
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)
813+ let fp = (bR > 0)
814+ let fr = dr(fp, aN(bR), false)._1
815+ let fI = fu(cx, bR, cw, fH)
816+ let fJ = az
817+ let fK = ea(bR, fr, cw, fI, cx, fJ, aC)._2
818+ $Tuple3(fI, fJ, fK)
866819 }
867820 }
868821
869822
870-func go () = {
871- let gp = dC()
872- let gq = ft()
873- let gr = (gq - gp)
874- if (if (if ((bH() == 0))
823+func fL () = {
824+ let fM = dx()
825+ let fN = dR()
826+ let fO = (fN - fM)
827+ if (if (if ((bC() == 0))
875828 then true
876- else (bI() == 0))
829+ else (bD() == 0))
877830 then true
878- else dI())
831+ else dD())
879832 then $Tuple3(0, 0, 0)
880- else if ((0 > gr))
833+ else if ((0 > fO))
881834 then {
882- let gs = aN(aP(gr, bw()), aG)
883- if ((bM() == aJ))
835+ let fP = aI(aK(fO, br()), aB)
836+ if ((bH() == aE))
884837 then {
885- let gt = aN(aP(gs, bH()), bI())
886- $Tuple3(gs, gt, 0)
838+ let fQ = aI(aK(fP, bC()), bD())
839+ $Tuple3(fP, fQ, 0)
887840 }
888841 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)
842+ let fR = aN(aK(fP, bC()))
843+ let fS = aN(aK(fP, bD()))
844+ let fT = (fR - fS)
845+ $Tuple3(fP, fP, fT)
893846 }
894847 }
895848 else {
896- let gt = aN(aP(gr, bw()), aG)
897- if ((bM() == aJ))
849+ let fQ = aI(aK(fO, br()), aB)
850+ if ((bH() == aE))
898851 then {
899- let gs = aN(aP(gt, bI()), bH())
900- $Tuple3(gs, gt, 0)
852+ let fP = aI(aK(fQ, bD()), bC())
853+ $Tuple3(fP, fQ, 0)
901854 }
902855 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)
856+ let fS = aN(aK(fQ, bD()))
857+ let fR = aN(aK(fQ, bC()))
858+ let fT = (fS - fR)
859+ $Tuple3(fQ, fQ, fT)
907860 }
908861 }
909862 }
910863
911864
912-func gx (gy,gz) = {
913- let gA = bj()
914- let gB = aP(gA, gz)
915- let gC = if ((gy != ""))
865+func fU (fV,fW) = {
866+ let fX = be()
867+ let fY = aK(fX, fW)
868+ let fZ = if ((fV != ""))
916869 then {
917- let gD = bf(av(), aj(ax, gy))
918- if ((gD == ay))
870+ let ga = ba(aq(), ae(as, fV))
871+ if ((ga == at))
919872 then {
920- let gE = bh(av(), aj(aw, gy))
921- let gF = aP(gB, gE)
922- $Tuple2(gF, true)
873+ let gb = bc(aq(), ae(ar, fV))
874+ let gc = aK(fY, gb)
875+ $Tuple2(gc, true)
923876 }
924877 else throw("Invalid attached artifact")
925878 }
926- else $Tuple2(gB, false)
927- let gF = gC._1
928- let gG = gC._2
929- $Tuple2(gF, gG)
879+ else $Tuple2(fY, false)
880+ let gc = fZ._1
881+ let gd = fZ._2
882+ $Tuple2(gc, gd)
930883 }
931884
932885
933-func gH (bY,gI) = {
934- let eL = bX(bY)._1
935- if ((eL == 0))
886+func ge (bT,gf) = {
887+ let eG = bS(bT)._1
888+ if ((eG == 0))
936889 then true
937- else (cc(bY) == gI)
890+ else (bX(bT) == gf)
938891 }
939892
940893
941-func gJ (bY,gI) = (cc(bY) == gI)
894+func gg (bT,gf) = (bX(bT) == gf)
942895
943896
944-func gK (bY,gy) = {
945- let gL = invoke(as(), "computeFeeDiscount", [bY], nil)
946- if ((gL == gL))
897+func gh (bT,fV) = {
898+ let gi = invoke(an(), "computeFeeDiscount", [bT], nil)
899+ if ((gi == gi))
947900 then {
948- let gM = {
949- let ca = gL
950- if ($isInstanceOf(ca, "Int"))
901+ let gj = {
902+ let bV = gi
903+ if ($isInstanceOf(bV, "Int"))
951904 then {
952- let gN = ca
953- gN
905+ let gk = bV
906+ gk
954907 }
955908 else throw("Invalid computeFeeDiscount result")
956909 }
957- let gO = gx(gy, gM)
958- let gF = gO._1
959- let gG = gO._2
960- $Tuple2(gF, gG)
910+ let gl = fU(fV, gj)
911+ let gc = gl._1
912+ let gd = gl._2
913+ $Tuple2(gc, gd)
961914 }
962915 else throw("Strict value is not equal to itself.")
963916 }
964917
965918
966-func gP (bP) = {
967- let gQ = if ((size(bP.payments) > 1))
968- then toBase58String(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifactId"))
919+func gm (bK) = {
920+ let gn = if ((size(bK.payments) > 1))
921+ then toBase58String(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifactId"))
969922 else ""
970- gQ
923+ gn
971924 }
972925
973926
974-func gR (gS) = {
975- let gT = aP(gS, bK())
976- let gU = (gS - gT)
977- $Tuple2(gT, gU)
927+func go (gp) = {
928+ let gq = aK(gp, bF())
929+ let gr = (gp - gq)
930+ $Tuple2(gq, gr)
978931 }
979932
980933
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)]
934+func gs (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = [IntegerEntry(s, gt), IntegerEntry(t, gu), IntegerEntry(u, gv), IntegerEntry(r, gw), IntegerEntry(p, eB), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dQ), IntegerEntry(A, gB), IntegerEntry(B, gB), IntegerEntry(q, gD), IntegerEntry(C, gE)]
982935
983936
984-func hi (hj,hk,hl,hm,hn) = [IntegerEntry(K, hj), IntegerEntry(I, hk), IntegerEntry(J, hl), IntegerEntry(L, hm), IntegerEntry(M, hn)]
937+func gF (gG,gH,gI,gJ,gK) = [IntegerEntry(F, gG), IntegerEntry(D, gH), IntegerEntry(E, gI), IntegerEntry(G, gJ), IntegerEntry(H, gK)]
985938
986939
987-func ho (hp,al) = if (hp)
940+func gL (gM,ag) = if (gM)
988941 then {
989- let hq = bJ()
990-[IntegerEntry(aj(i, al), (hq + 1)), IntegerEntry(d, (hq + 1))]
942+ let gN = bE()
943+[IntegerEntry(ae(i, ag), (gN + 1)), IntegerEntry(d, (gN + 1))]
991944 }
992945 else nil
993946
994947
995-func hr (hp,al,eG) = if (hp)
996- then [IntegerEntry(aj(k, al), eG)]
948+func gO (gM,ag,eB) = if (gM)
949+ then [IntegerEntry(ae(k, ag), eB)]
997950 else nil
998951
999952
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)]
953+func gP (ag,eA,gQ,gR,db,gS) = [IntegerEntry(ae(e, ag), eA), IntegerEntry(ae(f, ag), gQ), IntegerEntry(ae(g, ag), gR), IntegerEntry(ae(h, ag), db), IntegerEntry(ae(l, ag), gS)]
1001954
1002955
1003-func hw (hx) = {
1004- let fu = ((bN() / 1000) / 60)
1005- let hy = valueOrElse(getInteger(this, E), 0)
1006- if ((hy > fu))
1007- then throw("TWAP out-of-order")
1008- else {
1009- let fK = if ((hy == 0))
1010- then fu
1011- else hy
1012- if ((fu > hy))
1013- then {
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))]
1019- }
1020- else {
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)]
1026- }
1027- }
956+func gT (cw,cx) = [IntegerEntry(I, cw), IntegerEntry(J, cx)]
957+
958+
959+func gU (cB,cC) = [IntegerEntry(K, cB), IntegerEntry(L, cC)]
960+
961+
962+func gV (cw,cx,gW,gX,gY,gZ,ha,hb) = {
963+ let cB = bj()
964+ let cC = bk()
965+ if (((gY - gZ) != gW))
966+ then throw(((((("Invalid AMM state data: " + toString(gY)) + " + ") + toString(gZ)) + " != ") + toString(gW)))
967+ else (gT(cw, cx) ++ [IntegerEntry(M, gW), IntegerEntry(P, gX), IntegerEntry(N, gY), IntegerEntry(O, gZ), IntegerEntry(R, ha), IntegerEntry(Q, hb)])
1028968 }
1029969
1030970
1031-func hD (cB,cC) = [IntegerEntry(N, cB), IntegerEntry(O, cC)]
971+func hc (ag) = [DeleteEntry(ae(e, ag)), DeleteEntry(ae(f, ag)), DeleteEntry(ae(g, ag)), DeleteEntry(ae(h, ag)), DeleteEntry(ae(j, ag)), DeleteEntry(ae(k, ag)), DeleteEntry(ae(l, ag))]
1032972
1033973
1034-func hE (cG,cH) = [IntegerEntry(P, cG), IntegerEntry(Q, cH)]
1035-
1036-
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))))
974+func hd (ag,he) = {
975+ let hf = assetBalance(this, aj())
976+ if ((he > hf))
977+ then throw(((("Unable to withdraw " + toString(he)) + " from contract balance ") + toString(hf)))
978+ else [ScriptTransfer(ag, he, aj())]
1043979 }
1044980
1045981
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))]
982+func hg (bK) = if ((0 > bK))
983+ then throw("Balance")
984+ else [IntegerEntry(c, bK)]
1047985
1048986
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())]
1054- }
987+func hh (bK) = [ScriptTransfer(al(), bK, aj())]
1055988
1056989
1057-func hQ (bP) = if ((0 > bP))
1058- then throw("Balance")
1059- else [IntegerEntry(c, bP)]
1060-
1061-
1062-func hR (bP) = [ScriptTransfer(aq(), bP, ao())]
1063-
1064-
1065-func hS (hT,bP) = if (hT)
1066- then [Burn(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifact"), 1)]
990+func hi (hj,bK) = if (hj)
991+ then [Burn(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifact"), 1)]
1067992 else nil
1068993
1069994
1070-@Callable(bP)
1071-func pause () = if ((bP.caller != an()))
995+@Callable(bK)
996+func pause () = if ((bK.caller != ai()))
1072997 then throw("Invalid pause params")
1073998 else [BooleanEntry(n, true)]
1074999
10751000
10761001
1077-@Callable(bP)
1078-func unpause () = if ((bP.caller != an()))
1002+@Callable(bK)
1003+func unpause () = if ((bK.caller != ai()))
10791004 then throw("Invalid unpause params")
10801005 else [BooleanEntry(n, false)]
10811006
10821007
10831008
1084-@Callable(bP)
1085-func setCloseOnly () = if ((bP.caller != an()))
1009+@Callable(bK)
1010+func setCloseOnly () = if ((bK.caller != ai()))
10861011 then throw("Invalid setCloseOnly params")
10871012 else [BooleanEntry(o, true)]
10881013
10891014
10901015
1091-@Callable(bP)
1092-func unsetCloseOnly () = if ((bP.caller != an()))
1016+@Callable(bK)
1017+func unsetCloseOnly () = if ((bK.caller != ai()))
10931018 then throw("Invalid unsetCloseOnly params")
10941019 else [BooleanEntry(o, false)]
10951020
10961021
10971022
1098-@Callable(bP)
1099-func addLiquidity (cw) = if (if ((bP.caller != an()))
1023+@Callable(bK)
1024+func addLiquidity (cr) = if (if ((bK.caller != ai()))
11001025 then true
1101- else (0 >= cw))
1026+ else (0 >= cr))
11021027 then throw("Invalid addLiquidity params")
11031028 else {
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))
1029+ let cw = bh()
1030+ let cx = bi()
1031+ let cB = bj()
1032+ let cC = bk()
1033+ let hk = aI(aK(cw, cB), aK(cx, cC))
1034+ let hl = (cw + cr)
1035+ let hm = (aI(aK(hl, cB), hk) - cx)
1036+ let hn = (cx + hm)
1037+ let ho = fG(dx(), hl, hn)
1038+ let hp = ho._1
1039+ let hq = ho._2
1040+ let fK = ho._3
1041+ let hr = if ((fK != 0))
11171042 then {
1118- let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1119- if ((ib == ib))
1043+ let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1044+ if ((hr == hr))
11201045 then nil
11211046 else throw("Strict value is not equal to itself.")
11221047 }
11231048 else nil
1124- if ((ib == ib))
1125- then (hD(hV, hX) ++ hE(hZ, ia))
1049+ if ((hr == hr))
1050+ then (gT(hl, hn) ++ gU(hp, hq))
11261051 else throw("Strict value is not equal to itself.")
11271052 }
11281053
11291054
11301055
1131-@Callable(bP)
1132-func removeLiquidity (cw) = if (if ((bP.caller != an()))
1056+@Callable(bK)
1057+func removeLiquidity (cr) = if (if ((bK.caller != ai()))
11331058 then true
1134- else (cw >= 0))
1059+ else (cr >= 0))
11351060 then throw("Invalid removeLiquidity params")
11361061 else {
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))
1062+ let cw = bh()
1063+ let cx = bi()
1064+ let cB = bj()
1065+ let cC = bk()
1066+ let hk = aI(aK(cw, cB), aK(cx, cC))
1067+ let hl = (cw - cr)
1068+ let hs = aN((aI(aK(hl, cB), hk) - cx))
1069+ let hn = (cx - hs)
1070+ let ht = fG(dx(), hl, hn)
1071+ let hp = ht._1
1072+ let hq = ht._2
1073+ let fK = ht._3
1074+ let hr = if ((fK != 0))
11501075 then {
1151- let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1152- if ((ib == ib))
1076+ let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1077+ if ((hr == hr))
11531078 then nil
11541079 else throw("Strict value is not equal to itself.")
11551080 }
11561081 else nil
1157- if ((ib == ib))
1158- then (hD(hV, hX) ++ hE(hZ, ia))
1082+ if ((hr == hr))
1083+ then (gT(hl, hn) ++ gU(hp, hq))
11591084 else throw("Strict value is not equal to itself.")
11601085 }
11611086
11621087
11631088
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))
1089+@Callable(bK)
1090+func changeSettings (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gw))
11661091 then true
1167- else (0 >= gW))
1092+ else (0 >= gt))
11681093 then true
1169- else (0 >= gX))
1094+ else (0 >= gu))
11701095 then true
1171- else (0 >= gY))
1096+ else (0 >= gv))
11721097 then true
1173- else (0 >= eG))
1098+ else (0 >= eB))
11741099 then true
1175- else (0 >= ha))
1100+ else (0 >= gx))
11761101 then true
1177- else (0 >= hb))
1102+ else (0 >= gy))
11781103 then true
1179- else (0 >= hc))
1104+ else (0 >= gz))
11801105 then true
1181- else (0 >= hd))
1106+ else (0 >= gA))
11821107 then true
1183- else (0 >= dV))
1108+ else (0 >= dQ))
11841109 then true
1185- else (0 >= he))
1110+ else (0 >= gB))
11861111 then true
1187- else (he > aE))
1112+ else (gB > az))
11881113 then true
1189- else (0 >= hf))
1114+ else (0 >= gC))
11901115 then true
1191- else (0 >= hg))
1116+ else (0 >= gD))
11921117 then true
1193- else if ((hh != aK))
1194- then (hh != aJ)
1118+ else if ((gE != aF))
1119+ then (gE != aE)
11951120 else false)
11961121 then true
1197- else !(cr()))
1122+ else !(cm()))
11981123 then true
1199- else (bP.caller != an()))
1124+ else (bK.caller != ai()))
12001125 then throw("Invalid changeSettings params")
1201- else gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg, hh)
1126+ else gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)
12021127
12031128
12041129
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))
1130+@Callable(bK)
1131+func initialize (cw,cx,gw,gt,gu,gv,eB,hu,hv,hw,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cw))
12071132 then true
1208- else (0 >= cC))
1133+ else (0 >= cx))
12091134 then true
1210- else (0 >= gZ))
1135+ else (0 >= gw))
12111136 then true
1212- else (0 >= gW))
1137+ else (0 >= gt))
12131138 then true
1214- else (0 >= gX))
1139+ else (0 >= gu))
12151140 then true
1216- else (0 >= gY))
1141+ else (0 >= gv))
12171142 then true
1218- else (0 >= eG))
1143+ else (0 >= eB))
12191144 then true
1220- else (0 >= ha))
1145+ else (0 >= gx))
12211146 then true
1222- else (0 >= hb))
1147+ else (0 >= gy))
12231148 then true
1224- else (0 >= hc))
1149+ else (0 >= gz))
12251150 then true
1226- else (0 >= hd))
1151+ else (0 >= gA))
12271152 then true
1228- else (0 >= dV))
1153+ else (0 >= dQ))
12291154 then true
1230- else (0 >= he))
1155+ else (0 >= gB))
12311156 then true
1232- else (he > aE))
1157+ else (gB > az))
12331158 then true
1234- else (0 >= hf))
1159+ else (0 >= gC))
12351160 then true
1236- else (0 >= hg))
1161+ else (0 >= gD))
12371162 then true
1238- else if ((hh != aK))
1239- then (hh != aJ)
1163+ else if ((gE != aF))
1164+ then (gE != aE)
12401165 else false)
12411166 then true
1242- else cr())
1167+ else cm())
12431168 then true
1244- else (bP.caller != this))
1169+ else (bK.caller != this))
12451170 then throw("Invalid initialize parameters")
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)))])
1171+ else ((((gV(cw, cx, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)) ++ gF((bI() + gw), 0, 0, 0, 0)) ++ hg(0)) ++ [BooleanEntry(m, true), StringEntry(a, hu), StringEntry(b, hv), StringEntry(T, toString(addressFromStringValue(hw)))])
12471172
12481173
12491174
1250-@Callable(bP)
1251-func increasePosition (ih,ii,ij,ik) = {
1252- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1253- if ((il == il))
1175+@Callable(bK)
1176+func increasePosition (hx,hy,hz,hA) = {
1177+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1178+ if ((hB == hB))
12541179 then {
1255- let im = invoke(this, "ensureCalledOnce", nil, nil)
1256- if ((im == im))
1180+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1181+ if ((hC == hC))
12571182 then {
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)
1183+ let bT = bJ(bK)
1184+ let hD = bK.payments[0].amount
1185+ let gf = bK.payments[0].assetId
1186+ let hE = toBase58String(value(gf))
1187+ let hF = (gf == aj())
1188+ if (if (if (if (if (if (if (if (if (if ((hx != au))
1189+ then (hx != av)
12651190 else false)
12661191 then true
1267- else (0 >= in))
1192+ else (0 >= hD))
12681193 then true
1269- else !(cr()))
1194+ else !(cm()))
12701195 then true
1271- else !(ip))
1196+ else !(hF))
12721197 then true
1273- else !(gH(bY, io)))
1198+ else !(ge(bT, hE)))
12741199 then true
1275- else !(bQ(aN(aE, ii), bl(), true)))
1200+ else !(bL(aI(az, hy), bg(), true)))
12761201 then true
1277- else cs())
1202+ else cn())
12781203 then true
1279- else ct())
1204+ else co())
12801205 then true
1281- else dI())
1206+ else dD())
12821207 then throw("Invalid increasePosition parameters")
12831208 else {
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))
1209+ let hG = gh(bT, gm(bK))
1210+ let gc = hG._1
1211+ let gd = hG._2
1212+ let he = aI(hD, (aK(gc, hy) + az))
1213+ let hH = (hD - he)
1214+ let hI = invoke(ap(), "acceptPaymentWithLink", [bT, hA], [AttachedPayment(aj(), hH)])
1215+ if ((hI == hI))
12911216 then {
1292- let it = {
1293- let ca = is
1294- if ($isInstanceOf(ca, "Int"))
1217+ let hJ = {
1218+ let bV = hI
1219+ if ($isInstanceOf(bV, "Int"))
12951220 then {
1296- let gN = ca
1297- gN
1221+ let gk = bV
1222+ gk
12981223 }
12991224 else throw("Invalid referrerFee")
13001225 }
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
1226+ let hK = (hH - hJ)
1227+ let hL = bS(bT)
1228+ let eG = hL._1
1229+ let eH = hL._2
1230+ let eI = hL._3
1231+ let eJ = hL._4
1232+ let eK = hL._5
1233+ let hM = (eG == 0)
1234+ let hN = if ((eG > 0))
1235+ then (hx == au)
1236+ else (hx == av)
1237+ let hO = if (!(hM))
1238+ then hN
13141239 else false
1315- let iz = (ih == az)
1316- let iA = if (if (iw)
1240+ let hP = (hx == au)
1241+ let hQ = if (if (hM)
13171242 then true
1318- else iy)
1243+ else hO)
13191244 then {
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))
1245+ let hR = aK(he, hy)
1246+ let hS = cA(hP, hR)
1247+ let cH = hS._1
1248+ let cE = hS._2
1249+ let cF = hS._3
1250+ let eQ = hS._4
1251+ if (if ((hz != 0))
1252+ then (hz > aN(cH))
13281253 else false)
1329- then throw(((("Limit error: " + toString(aS(cM))) + " < ") + toString(ij)))
1254+ then throw(((("Limit error: " + toString(aN(cH))) + " < ") + toString(hz)))
13301255 else {
1331- let fj = (eL + cM)
1332- let iD = (bt() + (if ((fj > 0))
1333- then iB
1256+ let fe = (eG + cH)
1257+ let hT = (bo() + (if ((fe > 0))
1258+ then hR
13341259 else 0))
1335- let iE = (bs() + (if ((0 > fj))
1336- then iB
1260+ let hU = (bn() + (if ((0 > fe))
1261+ then hR
13371262 else 0))
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)))
1263+ let hV = cW(eG, eH, eJ, eK, he)
1264+ let de = hV._1
1265+ let eY = hV._2
1266+ let eZ = hV._3
1267+ let cV = hV._4
1268+ if (!(dJ(cE, cF)))
13441269 then throw("Over max spread limit")
1345- else if (!(dS(iD, iE)))
1270+ else if (!(dN(hT, hU)))
13461271 then throw("Over max open notional")
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)
1272+ else $Tuple14(fe, de, (eI + hR), bQ(fe), bI(), cF, cE, eQ, (bm() + hR), (bD() + (if ((fe > 0))
1273+ then aN(cH)
1274+ else 0)), (bC() + (if ((0 > fe))
1275+ then aN(cH)
1276+ else 0)), hT, hU, cV)
13521277 }
13531278 }
13541279 else {
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))
1280+ let hR = aK(he, hy)
1281+ let hW = ed(toString(bK.caller), aC)
1282+ let eT = hW._1
1283+ let ec = hW._2
1284+ if ((eT > hR))
13601285 then throw("Use decreasePosition to decrease position size")
13611286 else throw("Close position first")
13621287 }
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))
1288+ let fe = hQ._1
1289+ let hX = hQ._2
1290+ let fg = hQ._3
1291+ let hY = hQ._4
1292+ let hZ = hQ._5
1293+ let cF = hQ._6
1294+ let cE = hQ._7
1295+ let eQ = hQ._8
1296+ let ia = hQ._9
1297+ let ib = hQ._10
1298+ let ic = hQ._11
1299+ let hT = hQ._12
1300+ let hU = hQ._13
1301+ let cV = hQ._14
1302+ let id = go((hK + cV))
1303+ let gq = id._1
1304+ let gr = id._2
1305+ let ie = if ((he >= cV))
1306+ then invoke(am(), "addLocked", nil, [AttachedPayment(aj(), (he - cV))])
1307+ else invoke(am(), "withdrawLocked", [(cV - he)], nil)
1308+ if ((ie == ie))
13841309 then {
1385- let iP = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1386- if ((iP == iP))
1310+ let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1311+ if ((if == if))
13871312 then {
1388- let iQ = invoke(as(), "notifyFees", [bY, iu], nil)
1389- if ((iQ == iQ))
1313+ let ig = invoke(an(), "notifyFees", [bT, hK], nil)
1314+ if ((ig == ig))
13901315 then {
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))
1316+ let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1317+ if ((ih == ih))
1318+ then ((((((gP(bT, fe, hX, fg, hY, hZ) ++ gL(hM, bT)) ++ gO(hM, bT, gc)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hh(gq)) ++ hg(((bd() + he) - cV))) ++ hi(gd, bK))
13941319 else throw("Strict value is not equal to itself.")
13951320 }
13961321 else throw("Strict value is not equal to itself.")
14091334
14101335
14111336
1412-@Callable(bP)
1337+@Callable(bK)
14131338 func addMargin () = {
1414- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415- if ((il == il))
1339+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1340+ if ((hB == hB))
14161341 then {
1417- let im = invoke(this, "ensureCalledOnce", nil, nil)
1418- if ((im == im))
1342+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1343+ if ((hC == hC))
14191344 then {
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))
1345+ let bT = toString(bK.caller)
1346+ let he = bK.payments[0].amount
1347+ let gf = bK.payments[0].assetId
1348+ let hE = toBase58String(value(gf))
1349+ let hF = (gf == aj())
1350+ if (if (if (if (if (if (if (!(hF))
14261351 then true
1427- else !(ci(toString(bP.caller))))
1352+ else !(cd(toString(bK.caller))))
14281353 then true
1429- else !(gJ(bY, io)))
1354+ else !(gg(bT, hE)))
14301355 then true
1431- else !(cr()))
1356+ else !(cm()))
14321357 then true
1433- else cs())
1358+ else cn())
14341359 then true
1435- else ct())
1360+ else co())
14361361 then true
1437- else dI())
1362+ else dD())
14381363 then throw("Invalid addMargin parameters")
14391364 else {
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))
1365+ let ii = bS(bT)
1366+ let eG = ii._1
1367+ let eH = ii._2
1368+ let eI = ii._3
1369+ let eJ = ii._4
1370+ let eK = ii._5
1371+ let ie = invoke(am(), "addLocked", nil, [AttachedPayment(aj(), he)])
1372+ if ((ie == ie))
14481373 then {
1449- let da = cW(eM, eP)
1450- let iT = if ((da > 0))
1374+ let cV = cR(eH, eK)
1375+ let ij = if ((cV > 0))
14511376 then {
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))
1377+ let ik = go(cV)
1378+ let gq = ik._1
1379+ let gr = ik._2
1380+ let il = invoke(am(), "withdrawLocked", [gq], nil)
1381+ if ((il == il))
14571382 then {
1458- let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1459- if ((iW == iW))
1460- then hR(gT)
1383+ let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1384+ if ((im == im))
1385+ then hh(gq)
14611386 else throw("Strict value is not equal to itself.")
14621387 }
14631388 else throw("Strict value is not equal to itself.")
14641389 }
14651390 else nil
1466- if ((iT == iT))
1467- then ((hs(bY, eL, ((eM - da) + hO), eN, eO, bN()) ++ hQ(((bi() + hO) - da))) ++ iT)
1391+ if ((ij == ij))
1392+ then ((gP(bT, eG, ((eH - cV) + he), eI, eJ, bI()) ++ hg(((bd() + he) - cV))) ++ ij)
14681393 else throw("Strict value is not equal to itself.")
14691394 }
14701395 else throw("Strict value is not equal to itself.")
14771402
14781403
14791404
1480-@Callable(bP)
1481-func removeMargin (hO) = {
1482- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1483- if ((il == il))
1405+@Callable(bK)
1406+func removeMargin (he) = {
1407+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1408+ if ((hB == hB))
14841409 then {
1485- let im = invoke(this, "ensureCalledOnce", nil, nil)
1486- if ((im == im))
1410+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1411+ if ((hC == hC))
14871412 then {
1488- let bY = toString(bP.caller)
1489- if (if (if (if (if ((0 >= hO))
1413+ let bT = toString(bK.caller)
1414+ if (if (if (if (if ((0 >= he))
14901415 then true
1491- else !(ci(bY)))
1416+ else !(cd(bT)))
14921417 then true
1493- else !(cr()))
1418+ else !(cm()))
14941419 then true
1495- else cs())
1420+ else cn())
14961421 then true
1497- else dI())
1422+ else dD())
14981423 then throw("Invalid removeMargin parameters")
14991424 else {
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))
1425+ let in = bS(bT)
1426+ let eG = in._1
1427+ let eH = in._2
1428+ let eI = in._3
1429+ let eJ = in._4
1430+ let eK = in._5
1431+ let io = cW(eG, eH, eJ, eK, -(he))
1432+ let de = io._1
1433+ let df = io._2
1434+ let da = io._3
1435+ let cV = io._4
1436+ if ((df != 0))
15121437 then throw("Invalid removed margin amount")
15131438 else {
1514- let fo = en(dj, dk, eN)
1515- if (!(bQ(fo, bl(), true)))
1516- then throw(((("Too much margin removed: " + toString(fo)) + " < ") + toString(bl())))
1439+ let fj = ei(de, df, eI)
1440+ if (!(bL(fj, bg(), true)))
1441+ then throw(((("Too much margin removed: " + toString(fj)) + " < ") + toString(bg())))
15171442 else {
1518- let iZ = gR(da)
1519- let gT = iZ._1
1520- let gU = iZ._2
1521- let iT = if ((da > 0))
1443+ let ip = go(cV)
1444+ let gq = ip._1
1445+ let gr = ip._2
1446+ let ij = if ((cV > 0))
15221447 then {
1523- let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1524- if ((iW == iW))
1525- then hR(gT)
1448+ let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1449+ if ((im == im))
1450+ then hh(gq)
15261451 else throw("Strict value is not equal to itself.")
15271452 }
15281453 else nil
1529- if ((iT == iT))
1454+ if ((ij == ij))
15301455 then {
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)
1456+ let il = invoke(am(), "withdrawLocked", [(he + gq)], nil)
1457+ if ((il == il))
1458+ then (((gP(bT, eG, de, eI, bQ(eG), bI()) ++ hd(bK.caller, he)) ++ hg(((bd() - he) - cV))) ++ ij)
15341459 else throw("Strict value is not equal to itself.")
15351460 }
15361461 else throw("Strict value is not equal to itself.")
15451470
15461471
15471472
1548-@Callable(bP)
1549-func closePosition (eF,eH,eI) = {
1550- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1551- if ((il == il))
1473+@Callable(bK)
1474+func closePosition (eA,eC,eD) = {
1475+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1476+ if ((hB == hB))
15521477 then {
1553- let im = invoke(this, "ensureCalledOnce", nil, nil)
1554- if ((im == im))
1478+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1479+ if ((hC == hC))
15551480 then {
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)))
1481+ let bT = bJ(bK)
1482+ let iq = valueOrErrorMessage(addressFromString(bT), "Invalid caller")
1483+ let cc = ca(bT)
1484+ if (if (if (if (if (if (!(cd(bT)))
15601485 then true
1561- else !(cr()))
1486+ else !(cm()))
15621487 then true
1563- else cs())
1488+ else cn())
15641489 then true
1565- else (0 >= eF))
1490+ else (0 >= eA))
15661491 then true
1567- else (0 > eH))
1492+ else (0 > eC))
15681493 then true
1569- else dI())
1494+ else dD())
15701495 then throw("Invalid closePosition parameters")
15711496 else {
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))
1497+ let eK = bS(bT)._5
1498+ let ir = ez(bT, eA, cc, eC, eD, true, true)
1499+ let fe = ir._1
1500+ let fn = ir._2
1501+ let fg = ir._3
1502+ let fh = ir._4
1503+ let fa = ir._5
1504+ let eV = ir._6
1505+ let fm = ir._7
1506+ let cE = ir._8
1507+ let cF = ir._9
1508+ let eQ = ir._10
1509+ let ia = ir._11
1510+ let ib = ir._12
1511+ let ic = ir._13
1512+ let hT = ir._14
1513+ let hU = ir._15
1514+ let is = ir._16
1515+ if ((fa > 0))
15911516 then throw("Invalid closePosition parameters: bad debt")
1592- else if ((eP >= bN()))
1517+ else if ((eK >= bI()))
15931518 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15941519 else {
1595- let eS = (fj != 0)
1596- let jd = (fr + jc)
1597- let je = (bi() - jd)
1598- let jf = if ((0 > je))
1520+ let eN = (fe != 0)
1521+ let it = (fm + is)
1522+ let iu = (bd() - it)
1523+ let iv = if ((0 > iu))
15991524 then 0
1600- else je
1601- let iV = invoke(ar(), "withdrawLocked", [jd], nil)
1602- if ((iV == iV))
1525+ else iu
1526+ let il = invoke(am(), "withdrawLocked", [it], nil)
1527+ if ((il == il))
16031528 then {
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))
1529+ let iw = go(is)
1530+ let gq = iw._1
1531+ let gr = iw._2
1532+ let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1533+ if ((if == if))
16091534 then {
1610- let iQ = invoke(as(), "notifyFees", [bY, jc], nil)
1611- if ((iQ == iQ))
1535+ let ig = invoke(an(), "notifyFees", [bT, is], nil)
1536+ if ((ig == ig))
16121537 then {
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))
1538+ let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1539+ if ((ih == ih))
1540+ then (((((if (eN)
1541+ then gP(bT, fe, fn, fg, fh, bI())
1542+ else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ (if ((fm > 0))
1543+ then hd(iq, fm)
1544+ else nil)) ++ hg(iv)) ++ hh(gq))
16201545 else throw("Strict value is not equal to itself.")
16211546 }
16221547 else throw("Strict value is not equal to itself.")
16341559
16351560
16361561
1637-@Callable(bP)
1638-func liquidate (bY) = {
1639- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1640- if ((il == il))
1562+@Callable(bK)
1563+func liquidate (bT) = {
1564+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1565+ if ((hB == hB))
16411566 then {
1642- let jh = er(bY, aH)
1643- let ji = if (dX())
1567+ let ix = em(bT, aC)
1568+ let iy = if (dS())
16441569 then {
1645- let jj = er(bY, aI)
1646- aT(jh, jj)
1570+ let iz = em(bT, aD)
1571+ aO(ix, iz)
16471572 }
1648- else jh
1649- if (if (if (if (if (!(bQ(ji, by(), false)))
1573+ else ix
1574+ if (if (if (if (if (!(bL(iy, bt(), false)))
16501575 then true
1651- else !(ci(bY)))
1576+ else !(cd(bT)))
16521577 then true
1653- else !(cr()))
1578+ else !(cm()))
16541579 then true
1655- else cs())
1580+ else cn())
16561581 then true
1657- else dI())
1582+ else dD())
16581583 then throw("Unable to liquidate")
16591584 else {
1660- let jk = if (if ((jh > bz()))
1661- then (bA() > 0)
1585+ let iA = if (if ((ix > bu()))
1586+ then (bv() > 0)
16621587 else false)
1663- then (aE > bA())
1588+ then (az > bv())
16641589 else false
1665- let eL = bX(bY)._1
1666- let eb = aS(eL)
1667- let jl = if (jk)
1590+ let eG = bS(bT)._1
1591+ let dW = aN(eG)
1592+ let iB = if (iA)
16681593 then {
1669- let jm = ez(bY, eL)
1670- let jn = aN(aS(jm), eb)
1671- $Tuple2(jn, aS(jm))
1594+ let iC = eu(bT, eG)
1595+ let iD = aI(aN(iC), dW)
1596+ $Tuple2(iD, aN(iC))
16721597 }
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))
1598+ else $Tuple2(0, dW)
1599+ let iD = iB._1
1600+ let iC = iB._2
1601+ let iE = ez(bT, if (iA)
1602+ then iC
1603+ else dW, bu(), 0, true, false, true)
1604+ let fe = iE._1
1605+ let fn = iE._2
1606+ let fg = iE._3
1607+ let fh = iE._4
1608+ let fa = iE._5
1609+ let eV = iE._6
1610+ let fm = iE._7
1611+ let cE = iE._8
1612+ let cF = iE._9
1613+ let eQ = iE._10
1614+ let ia = iE._11
1615+ let ib = iE._12
1616+ let ic = iE._13
1617+ let hT = iE._14
1618+ let hU = iE._15
1619+ let iF = iE._16
1620+ let iG = (iF / 2)
1621+ let gr = (iF - iG)
1622+ let iu = (bd() - iF)
1623+ let iH = if ((0 > iu))
16991624 then 0
1700- else je
1701- let iW = if ((ff > 0))
1625+ else iu
1626+ let im = if ((fa > 0))
17021627 then {
1703- let iW = invoke(ar(), "exchangeFreeAndLocked", [(ff + jp)], nil)
1704- if ((iW == iW))
1628+ let im = invoke(am(), "exchangeFreeAndLocked", [(fa + iF)], nil)
1629+ if ((im == im))
17051630 then nil
17061631 else throw("Strict value is not equal to itself.")
17071632 }
17081633 else nil
1709- if ((iW == iW))
1634+ if ((im == im))
17101635 then {
1711- let iV = invoke(ar(), "withdrawLocked", [jp], nil)
1712- if ((iV == iV))
1636+ let il = invoke(am(), "withdrawLocked", [iF], nil)
1637+ if ((il == il))
17131638 then {
1714- let js = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1715- if ((js == js))
1639+ let iI = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1640+ if ((iI == iI))
17161641 then {
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))
1642+ let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1643+ if ((ih == ih))
1644+ then ((((if (iA)
1645+ then gP(bT, fe, fn, fg, fh, bI())
1646+ else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hd(bK.caller, iG)) ++ hg(iH))
17221647 else throw("Strict value is not equal to itself.")
17231648 }
17241649 else throw("Strict value is not equal to itself.")
17331658
17341659
17351660
1736-@Callable(bP)
1661+@Callable(bK)
17371662 func payFunding () = {
1738- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((il == il))
1663+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1664+ if ((hB == hB))
17401665 then {
1741- let jt = bu()
1742- if (if (if ((jt > bN()))
1666+ let iJ = bp()
1667+ if (if (if ((iJ > bI()))
17431668 then true
1744- else !(cr()))
1669+ else !(cm()))
17451670 then true
1746- else cs())
1747- then throw(((("Invalid funding block timestamp: " + toString(bN())) + " < ") + toString(jt)))
1671+ else cn())
1672+ then throw(((("Invalid funding block timestamp: " + toString(bI())) + " < ") + toString(iJ)))
17481673 else {
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))
1674+ let fM = dx()
1675+ let iK = fL()
1676+ let fP = iK._1
1677+ let fQ = iK._2
1678+ let fT = iK._3
1679+ let iL = if ((fT > 0))
17551680 then {
1756- let jv = invoke(ar(), "exchangeFreeAndLocked", [-(gw)], nil)
1757- if ((jv == jv))
1681+ let iL = invoke(am(), "exchangeFreeAndLocked", [-(fT)], nil)
1682+ if ((iL == iL))
17581683 then nil
17591684 else throw("Strict value is not equal to itself.")
17601685 }
17611686 else nil
1762- if ((jv == jv))
1763- then hi((jt + bx()), (bF() + gt), (bG() + gs), aN(gt, gp), aN(gs, gp))
1687+ if ((iL == iL))
1688+ then gF((iJ + bs()), (bA() + fQ), (bB() + fP), aI(fQ, fM), aI(fP, fM))
17641689 else throw("Strict value is not equal to itself.")
17651690 }
17661691 }
17691694
17701695
17711696
1772-@Callable(bP)
1697+@Callable(bK)
17731698 func syncTerminalPriceToOracle () = {
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())
1699+ let cw = bh()
1700+ let cx = bi()
1701+ let iM = fG(dx(), cw, cx)
1702+ let hp = iM._1
1703+ let hq = iM._2
1704+ let fK = iM._3
1705+ let iN = if (if ((0 > fK))
1706+ then (aN(fK) > bd())
17821707 else false)
1783- then -(bi())
1784- else gn
1785- let ib = if ((jx != 0))
1708+ then -(bd())
1709+ else fK
1710+ let hr = if ((iN != 0))
17861711 then {
1787- let ib = invoke(ar(), "exchangeFreeAndLocked", [jx], nil)
1788- if ((ib == ib))
1712+ let hr = invoke(am(), "exchangeFreeAndLocked", [iN], nil)
1713+ if ((hr == hr))
17891714 then nil
17901715 else throw("Strict value is not equal to itself.")
17911716 }
17921717 else nil
1793- if ((ib == ib))
1794- then ((hQ((bi() + jx)) ++ hE(hZ, ia)) ++ hw(aN(aP(cB, hZ), aP(cC, ia))))
1718+ if ((hr == hr))
1719+ then (hg((bd() + iN)) ++ gU(hp, hq))
17951720 else throw("Strict value is not equal to itself.")
17961721 }
17971722
17981723
17991724
1800-@Callable(bP)
1801-func ensureCalledOnce () = if ((bP.caller != this))
1725+@Callable(bK)
1726+func ensureCalledOnce () = if ((bK.caller != this))
18021727 then throw("Invalid saveCurrentTxId parameters")
18031728 else {
1804- let jy = valueOrElse(getString(this, X), "")
1805- if ((jy != toBase58String(bP.transactionId)))
1806- then [StringEntry(X, jy)]
1729+ let iO = valueOrElse(getString(this, S), "")
1730+ if ((iO != toBase58String(bK.transactionId)))
1731+ then [StringEntry(S, iO)]
18071732 else throw("Can not call vAMM methods twice in one tx")
18081733 }
18091734
18101735
18111736
1812-@Callable(bP)
1813-func view_calcRemainMarginWithFundingPayment (bY) = {
1814- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1815- if ((il == il))
1737+@Callable(bK)
1738+func view_calcRemainMarginWithFundingPayment (bT) = {
1739+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1740+ if ((hB == hB))
18161741 then {
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)))
1742+ let iP = bS(bT)
1743+ let bW = iP._1
1744+ let ef = iP._2
1745+ let eo = iP._3
1746+ let eh = iP._4
1747+ let eq = iP._5
1748+ let iQ = ed(bT, aC)
1749+ let dY = iQ._1
1750+ let ec = iQ._2
1751+ let iR = cW(bW, ef, eh, eq, ec)
1752+ let de = iR._1
1753+ let df = iR._2
1754+ let da = iR._3
1755+ let cV = iR._4
1756+ throw(((((((aG(de) + aG(da)) + aG(et(bT))) + aG(ec)) + aG(df)) + aG(dY)) + aG(cV)))
18321757 }
18331758 else throw("Strict value is not equal to itself.")
18341759 }
18351760
18361761
18371762
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))
1763+@Callable(bK)
1764+func view_getPegAdjustCost (iS) = {
1765+ let cw = bh()
1766+ let cx = bi()
1767+ let fF = fG(iS, cw, cx)
1768+ throw(toString(fF._3))
18441769 }
18451770
18461771
18471772
1848-@Callable(bP)
1773+@Callable(bK)
18491774 func view_getTerminalAmmPrice () = {
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))
1775+ let iT = fo()
1776+ let fs = iT._1
1777+ let ft = iT._2
1778+ let hk = aI(aK(fs, bj()), aK(ft, bk()))
1779+ throw(toString(hk))
18551780 }
18561781
18571782
18581783
1859-@Callable(bP)
1784+@Callable(bK)
18601785 func view_getFunding () = {
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)))
1786+ let fM = dx()
1787+ let iU = fL()
1788+ let fP = iU._1
1789+ let fQ = iU._2
1790+ let fT = iU._3
1791+ let iV = aI(fQ, fM)
1792+ let iW = aI(fP, fM)
1793+ throw(((((aG(iV) + aG(iW)) + aG(dR())) + aG(dx())) + aG(fT)))
18691794 }
18701795
18711796
18721797
1873-@Callable(bP)
1798+@Callable(bK)
18741799 func computeSpotPrice () = {
1875- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1876- if ((il == il))
1800+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1801+ if ((hB == hB))
18771802 then {
1878- let gi = dW()
1879- $Tuple2(nil, gi)
1803+ let fF = dR()
1804+ $Tuple2(nil, fF)
18801805 }
18811806 else throw("Strict value is not equal to itself.")
18821807 }
18831808
18841809
18851810
1886-@Callable(bP)
1887-func computeFeeForTraderWithArtifact (bY,gy) = {
1888- let gi = gK(bY, gy)
1889- $Tuple2(nil, gi)
1811+@Callable(bK)
1812+func computeFeeForTraderWithArtifact (bT,fV) = {
1813+ let fF = gh(bT, fV)
1814+ $Tuple2(nil, fF)
18901815 }
18911816
18921817
1893-@Verifier(jG)
1894-func jH () = {
1895- let jI = getString(this, Y)
1896- if (isDefined(jI))
1818+@Verifier(iX)
1819+func iY () = {
1820+ let iZ = getString(this, T)
1821+ if (isDefined(iZ))
18971822 then {
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)
1823+ let ja = getString(addressFromStringValue(value(iZ)), V)
1824+ if (isDefined(ja))
1825+ then valueOrElse(getBoolean(addressFromStringValue(value(ja)), ((("status_" + toString(this)) + "_") + toBase58String(iX.id))), false)
19011826 else throw("unable to verify: admin not set in coordinator")
19021827 }
1903- else sigVerify(jG.bodyBytes, jG.proofs[0], jG.senderPublicKey)
1828+ else sigVerify(iX.bodyBytes, iX.proofs[0], iX.senderPublicKey)
19041829 }
19051830
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
6060 let C = "k_fundingMode"
6161
62-let D = "k_lastDataStr"
62+let D = "k_latestLongPremiumFraction"
6363
64-let E = "k_lastMinuteId"
64+let E = "k_latestShortPremiumFraction"
6565
66-let F = "k_twapDataLastCumulativePrice"
66+let F = "k_nextFundingBlockMinTimestamp"
6767
68-let G = "k_twapDataLastPrice"
68+let G = "k_longFundingRate"
6969
70-let H = "k_twapDataPreviousMinuteId"
70+let H = "k_shortFundingRate"
7171
72-let I = "k_latestLongPremiumFraction"
72+let I = "k_qtAstR"
7373
74-let J = "k_latestShortPremiumFraction"
74+let J = "k_bsAstR"
7575
76-let K = "k_nextFundingBlockMinTimestamp"
76+let K = "k_qtAstW"
7777
78-let L = "k_longFundingRate"
78+let L = "k_bsAstW"
7979
80-let M = "k_shortFundingRate"
80+let M = "k_totalPositionSize"
8181
82-let N = "k_qtAstR"
82+let N = "k_totalLongPositionSize"
8383
84-let O = "k_bsAstR"
84+let O = "k_totalShortPositionSize"
8585
86-let P = "k_qtAstW"
86+let P = "k_openInterestNotional"
8787
88-let Q = "k_bsAstW"
88+let Q = "k_openInterestShort"
8989
90-let R = "k_totalPositionSize"
90+let R = "k_openInterestLong"
9191
92-let S = "k_totalLongPositionSize"
92+let S = "k_lastTx"
9393
94-let T = "k_totalShortPositionSize"
94+let T = "k_coordinatorAddress"
9595
96-let U = "k_openInterestNotional"
96+let U = "k_vault_address"
9797
98-let V = "k_openInterestShort"
98+let V = "k_admin_address"
9999
100-let W = "k_openInterestLong"
100+let W = "k_quote_asset"
101101
102-let X = "k_lastTx"
102+let X = "k_quote_staking"
103103
104-let Y = "k_coordinatorAddress"
104+let Y = "k_staking_address"
105105
106-let Z = "k_vault_address"
106+let Z = "k_miner_address"
107107
108-let aa = "k_admin_address"
108+let aa = "k_orders_address"
109109
110-let ab = "k_quote_asset"
110+let ab = "k_referral_address"
111111
112-let ac = "k_quote_staking"
112+let ac = "k_exchange_address"
113113
114-let ad = "k_staking_address"
114+let ad = "k_nft_manager_address"
115115
116-let ae = "k_miner_address"
117-
118-let af = "k_orders_address"
119-
120-let ag = "k_referral_address"
121-
122-let ah = "k_exchange_address"
123-
124-let ai = "k_nft_manager_address"
125-
126-func aj (ak,al) = ((ak + "_") + al)
116+func ae (af,ag) = ((af + "_") + ag)
127117
128118
129-func am () = valueOrErrorMessage(addressFromString(getStringValue(this, Y)), "Coordinator not set")
119+func ah () = valueOrErrorMessage(addressFromString(getStringValue(this, T)), "Coordinator not set")
130120
131121
132-func an () = addressFromString(getStringValue(am(), aa))
122+func ai () = addressFromString(getStringValue(ah(), V))
133123
134124
135-func ao () = fromBase58String(getStringValue(am(), ab))
125+func aj () = fromBase58String(getStringValue(ah(), W))
136126
137127
138-func ap () = valueOrErrorMessage(addressFromString(getStringValue(am(), ac)), "Quote asset staking not set")
128+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ah(), X)), "Quote asset staking not set")
139129
140130
141-func aq () = valueOrErrorMessage(addressFromString(getStringValue(am(), ad)), "Staking not set")
131+func al () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Y)), "Staking not set")
142132
143133
144-func ar () = valueOrErrorMessage(addressFromString(getStringValue(am(), Z)), "Vault not set")
134+func am () = valueOrErrorMessage(addressFromString(getStringValue(ah(), U)), "Vault not set")
145135
146136
147-func as () = valueOrErrorMessage(addressFromString(getStringValue(am(), ae)), "Miner not set")
137+func an () = valueOrErrorMessage(addressFromString(getStringValue(ah(), Z)), "Miner not set")
148138
149139
150-func at () = valueOrErrorMessage(addressFromString(getStringValue(am(), af)), "Orders not set")
140+func ao () = valueOrErrorMessage(addressFromString(getStringValue(ah(), aa)), "Orders not set")
151141
152142
153-func au () = valueOrErrorMessage(addressFromString(getStringValue(am(), ag)), "Referral not set")
143+func ap () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ab)), "Referral not set")
154144
155145
156-func av () = valueOrErrorMessage(addressFromString(getStringValue(am(), ai)), "NFT Manager not set")
146+func aq () = valueOrErrorMessage(addressFromString(getStringValue(ah(), ad)), "NFT Manager not set")
157147
158148
159-let aw = "k_token_param"
149+let ar = "k_token_param"
160150
161-let ax = "k_token_type"
151+let as = "k_token_type"
162152
163-let ay = "fee_reduction"
153+let at = "fee_reduction"
164154
165-let az = 1
155+let au = 1
166156
167-let aA = 2
157+let av = 2
168158
169-let aB = 15
159+let aw = 15
170160
171-let aC = 1000
161+let ax = 1000
172162
173-let aD = 6
163+let ay = 6
174164
175-let aE = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
165+let az = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
176166
177-let aF = (525600 * aE)
167+let aA = (525600 * az)
178168
179-let aG = (86400 * aE)
169+let aB = (86400 * az)
180170
181-let aH = 1
171+let aC = 1
182172
183-let aI = 2
173+let aD = 2
184174
185-let aJ = 1
175+let aE = 1
186176
187-let aK = 2
177+let aF = 2
188178
189-func aL (aM) = (toString(aM) + ",")
179+func aG (aH) = (toString(aH) + ",")
190180
191181
192-func aN (aM,aO) = fraction(aM, aE, aO, HALFEVEN)
182+func aI (aH,aJ) = fraction(aH, az, aJ, HALFEVEN)
193183
194184
195-func aP (aM,aO) = fraction(aM, aO, aE, HALFEVEN)
185+func aK (aH,aJ) = fraction(aH, aJ, az, HALFEVEN)
196186
197187
198-func aQ (aM,aO) = fraction(aM, toBigInt(aE), aO, HALFEVEN)
188+func aL (aH,aJ) = fraction(aH, toBigInt(az), aJ, HALFEVEN)
199189
200190
201-func aR (aM,aO) = fraction(aM, aO, toBigInt(aE), HALFEVEN)
191+func aM (aH,aJ) = fraction(aH, aJ, toBigInt(az), HALFEVEN)
202192
203193
204-func aS (aM) = if ((aM > 0))
205- then aM
206- else -(aM)
194+func aN (aH) = if ((aH > 0))
195+ then aH
196+ else -(aH)
207197
208198
209-func aT (aM,aO) = if ((aM >= aO))
210- then aM
211- else aO
199+func aO (aH,aJ) = if ((aH >= aJ))
200+ then aH
201+ else aJ
212202
213203
214-func aU (aV) = if ((size(aV) == 0))
204+func aP (aQ) = if ((size(aQ) == 0))
215205 then ""
216- else makeString(aV, ",")
206+ else makeString(aQ, ",")
217207
218208
219-func aW (aX) = if ((aX == ""))
209+func aR (aS) = if ((aS == ""))
220210 then nil
221- else split(aX, ",")
211+ else split(aS, ",")
222212
223213
224-func aY (aV,aZ,ba) = if ((size(aV) > aZ))
225- then (removeByIndex(aV, 0) :+ ba)
226- else (aV :+ ba)
214+func aT (aQ,aU,aV) = if ((size(aQ) > aU))
215+ then (removeByIndex(aQ, 0) :+ aV)
216+ else (aQ :+ aV)
227217
228218
229-func bb (bc) = valueOrErrorMessage(getInteger(this, bc), ("no value for " + bc))
219+func aW (aX) = valueOrErrorMessage(getInteger(this, aX), ("no value for " + aX))
230220
231221
232-func bd (bc,be) = valueOrElse(getInteger(this, bc), be)
222+func aY (aX,aZ) = valueOrElse(getInteger(this, aX), aZ)
233223
234224
235-func bf (al,ak) = {
236- let bg = valueOrErrorMessage(getString(al, ak), ("No value for key " + ak))
237- bg
225+func ba (ag,af) = {
226+ let bb = valueOrErrorMessage(getString(ag, af), ("No value for key " + af))
227+ bb
238228 }
239229
240230
241-func bh (al,ak) = {
242- let bg = valueOrErrorMessage(getInteger(al, ak), ("No value for key " + ak))
243- bg
231+func bc (ag,af) = {
232+ let bb = valueOrErrorMessage(getInteger(ag, af), ("No value for key " + af))
233+ bb
244234 }
245235
246236
247-func bi () = bb(c)
237+func bd () = aW(c)
248238
249239
250-func bj () = bb(p)
240+func be () = aW(p)
251241
252242
253-func bk () = bb(q)
243+func bf () = aW(q)
254244
255245
256-func bl () = bb(s)
246+func bg () = aW(s)
257247
258248
259-func bm () = bb(N)
249+func bh () = aW(I)
260250
261251
262-func bn () = bb(O)
252+func bi () = aW(J)
263253
264254
265-func bo () = bd(P, aE)
255+func bj () = aY(K, az)
266256
267257
268-func bp () = bd(Q, aE)
258+func bk () = aY(L, az)
269259
270260
271-func bq () = bb(R)
261+func bl () = aW(M)
272262
273263
274-func br () = bb(U)
264+func bm () = aW(P)
275265
276266
277-func bs () = bb(V)
267+func bn () = aW(Q)
278268
279269
280-func bt () = bb(W)
270+func bo () = aW(R)
281271
282272
283-func bu () = bb(K)
273+func bp () = aW(F)
284274
285275
286-func bv () = bb(r)
276+func bq () = aW(r)
287277
288278
289-func bw () = (bv() * aE)
279+func br () = (bq() * az)
290280
291281
292-func bx () = (bv() * aC)
282+func bs () = (bq() * ax)
293283
294284
295-func by () = bb(t)
285+func bt () = aW(t)
296286
297287
298-func bz () = bb(u)
288+func bu () = aW(u)
299289
300290
301-func bA () = bb(v)
291+func bv () = aW(v)
302292
303293
304-func bB () = bb(w)
294+func bw () = aW(w)
305295
306296
307-func bC () = bb(x)
297+func bx () = aW(x)
308298
309299
310-func bD () = bb(y)
300+func by () = aW(y)
311301
312302
313-func bE () = bb(z)
303+func bz () = aW(z)
314304
315305
316-func bF () = bb(I)
306+func bA () = aW(D)
317307
318308
319-func bG () = bb(J)
309+func bB () = aW(E)
320310
321311
322-func bH () = bb(T)
312+func bC () = aW(O)
323313
324314
325-func bI () = bb(S)
315+func bD () = aW(N)
326316
327317
328-func bJ () = bd(d, 0)
318+func bE () = aY(d, 0)
329319
330320
331-func bK () = bb(A)
321+func bF () = aW(A)
332322
333323
334-func bL () = bb(B)
324+func bG () = aW(B)
335325
336326
337-func bM () = bd(C, aJ)
327+func bH () = aY(C, aE)
338328
339329
340-func bN () = lastBlock.timestamp
330+func bI () = lastBlock.timestamp
341331
342332
343-func bO (bP) = valueOrElse(getString(at(), "k_sender"), toString(bP.caller))
333+func bJ (bK) = valueOrElse(getString(ao(), "k_sender"), toString(bK.caller))
344334
345335
346-func bQ (bR,bS,bT) = {
347- let bU = (bR - bS)
348- if (if (bT)
349- then (0 > bU)
336+func bL (bM,bN,bO) = {
337+ let bP = (bM - bN)
338+ if (if (bO)
339+ then (0 > bP)
350340 else false)
351- then throw(((("Invalid margin: " + toString(bR)) + " < ") + toString(bS)))
352- else if (if (!(bT))
353- then (bU >= 0)
341+ then throw(((("Invalid margin: " + toString(bM)) + " < ") + toString(bN)))
342+ else if (if (!(bO))
343+ then (bP >= 0)
354344 else false)
355- then throw(((("Invalid margin: " + toString(bR)) + " > ") + toString(bS)))
345+ then throw(((("Invalid margin: " + toString(bM)) + " > ") + toString(bN)))
356346 else true
357347 }
358348
359349
360-func bV (bW) = if ((bW == 0))
350+func bQ (bR) = if ((bR == 0))
361351 then throw("Should not be called with _positionSize == 0")
362- else if ((bW > 0))
363- then bF()
364- else bG()
352+ else if ((bR > 0))
353+ then bA()
354+ else bB()
365355
366356
367-func bX (bY) = {
368- let bZ = getInteger(this, aj(e, bY))
369- let ca = bZ
370- if ($isInstanceOf(ca, "Int"))
357+func bS (bT) = {
358+ let bU = getInteger(this, ae(e, bT))
359+ let bV = bU
360+ if ($isInstanceOf(bV, "Int"))
371361 then {
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)))
362+ let bW = bV
363+ $Tuple5(bW, getIntegerValue(this, ae(f, bT)), getIntegerValue(this, ae(g, bT)), getIntegerValue(this, ae(h, bT)), getIntegerValue(this, ae(l, bT)))
374364 }
375365 else $Tuple5(0, 0, 0, 0, 0)
376366 }
377367
378368
379-func cc (bY) = {
380- let cd = getString(this, aj(j, bY))
381- let ca = cd
382- if ($isInstanceOf(ca, "String"))
369+func bX (bT) = {
370+ let bY = getString(this, ae(j, bT))
371+ let bV = bY
372+ if ($isInstanceOf(bV, "String"))
383373 then {
384- let ce = ca
385- ce
374+ let bZ = bV
375+ bZ
386376 }
387- else toBase58String(ao())
377+ else toBase58String(aj())
388378 }
389379
390380
391-func cf (bY) = {
392- let cg = getInteger(this, aj(k, bY))
393- let ca = cg
394- if ($isInstanceOf(ca, "Int"))
381+func ca (bT) = {
382+ let cb = getInteger(this, ae(k, bT))
383+ let bV = cb
384+ if ($isInstanceOf(bV, "Int"))
395385 then {
396- let ch = ca
397- ch
386+ let cc = bV
387+ cc
398388 }
399- else bj()
389+ else be()
400390 }
401391
402392
403-func ci (bY) = if ((bX(bY)._1 == 0))
393+func cd (bT) = if ((bS(bT)._1 == 0))
404394 then throw("No open position")
405395 else true
406396
407397
408-func cj (ck) = {
409- let cl = getString(this, ck)
410- if (if (isDefined(cl))
411- then (value(cl) != "")
398+func ce (cf) = {
399+ let cg = getString(this, cf)
400+ if (if (isDefined(cg))
401+ then (value(cg) != "")
412402 else false)
413403 then {
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)
404+ let ch = split(value(cg), ",")
405+ let ci = valueOrErrorMessage(addressFromString(ch[0]), ("Invalid oracle address in: " + value(cg)))
406+ let cj = ch[1]
407+ let ck = ch[2]
408+ let cl = ch[3]
409+ $Tuple4(ci, cj, ck, cl)
420410 }
421411 else unit
422412 }
423413
424414
425-func cr () = valueOrElse(getBoolean(this, m), false)
415+func cm () = valueOrElse(getBoolean(this, m), false)
426416
427417
428-func cs () = valueOrElse(getBoolean(this, n), false)
418+func cn () = valueOrElse(getBoolean(this, n), false)
429419
430420
431-func ct () = valueOrElse(getBoolean(this, o), false)
421+func co () = valueOrElse(getBoolean(this, o), false)
432422
433423
434-func cu (cv,cw,cx) = if (cv)
424+func cp (cq,cr,cs) = if (cq)
435425 then {
436- let cy = (bn() - cx)
437- if ((0 >= cy))
426+ let ct = (bi() - cs)
427+ if ((0 >= ct))
438428 then throw("Tx lead to base asset reserve <= 0, revert")
439- else $Tuple3((bm() + cw), cy, (bq() + cx))
429+ else $Tuple3((bh() + cr), ct, (bl() + cs))
440430 }
441431 else {
442- let cz = (bm() - cw)
443- if ((0 >= cz))
432+ let cu = (bh() - cr)
433+ if ((0 >= cu))
444434 then throw("Tx lead to base quote reserve <= 0, revert")
445- else $Tuple3(cz, (bn() + cx), (bq() - cx))
435+ else $Tuple3(cu, (bi() + cs), (bl() - cs))
446436 }
447437
448438
449-func cA (cB,cC) = {
450- let cD = toBigInt(cB)
451- let cE = toBigInt(cC)
452- aR(cD, cE)
439+func cv (cw,cx) = {
440+ let cy = toBigInt(cw)
441+ let cz = toBigInt(cx)
442+ aM(cy, cz)
453443 }
454444
455445
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)
446+func cA (cq,cr) = {
447+ let cw = bh()
448+ let cx = bi()
449+ let cB = bj()
450+ let cC = bk()
451+ let cD = aI(cr, cB)
452+ let aX = cv(cw, cx)
453+ let cE = if (cq)
454+ then (cw + cD)
455+ else (cw - cD)
456+ let cF = toInt(aL(aX, toBigInt(cE)))
457+ let cG = aN((cF - cx))
458+ let cH = if (cq)
459+ then cG
460+ else -(cG)
461+ let cI = cp(cq, cD, cG)
462+ let cJ = cI._1
463+ let cK = cI._2
464+ let cL = cI._3
465+ let cM = aI(aK(cw, cB), aK(cx, cC))
466+ let cN = aI(cr, cG)
467+ let cO = aN((cM - cN))
468+ let cP = (az - aI(cM, (cM + cO)))
469+ let cQ = bx()
470+ if ((cP > cQ))
471+ then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(cw)) + " before base asset: ") + toString(cx)) + " quote asset amount to exchange: ") + toString(cr)) + " price before: ") + toString(cM)) + " marketPrice: ") + toString(cN)))
472+ else $Tuple4(cH, cJ, cK, cL)
483473 }
484474
485475
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
476+func cR (cS,cT) = {
477+ let cU = ((((bI() - cT) / 1000) / 60) * az)
478+ let cV = aI(aK(aK(cS, cU), bf()), aA)
479+ cV
490480 }
491481
492482
493-func db (dc,cX,dd,cY,de) = {
494- let df = if ((dc != 0))
483+func cW (cX,cS,cY,cT,cZ) = {
484+ let da = if ((cX != 0))
495485 then {
496- let dg = bV(dc)
497- aP((dg - dd), dc)
486+ let db = bQ(cX)
487+ aK((db - cY), cX)
498488 }
499489 else 0
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)
490+ let cV = cR(cS, cT)
491+ let dc = (((cZ - cV) - da) + cS)
492+ let dd = if ((0 > dc))
493+ then $Tuple2(0, aN(dc))
494+ else $Tuple2(aN(dc), 0)
495+ let de = dd._1
496+ let df = dd._2
497+ $Tuple4(de, df, da, cV)
508498 }
509499
510500
511-func dl (cv,cx,dm,dn,do,dp,dq) = {
512- let cR = aN(aP(dn, do), aP(dp, dq))
513- if ((cx == 0))
501+func dg (cq,cs,dh,di,dj,dk,dl) = {
502+ let cM = aI(aK(di, dj), aK(dk, dl))
503+ if ((cs == 0))
514504 then throw("Invalid base asset amount")
515505 else {
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
506+ let aX = cv(di, dk)
507+ let dm = if (cq)
508+ then (dk + cs)
509+ else (dk - cs)
510+ let dn = toInt(aL(aX, toBigInt(dm)))
511+ let do = aN((dn - di))
512+ let dp = aK(do, dj)
513+ let cQ = bx()
514+ let dq = cp(!(cq), do, cs)
515+ let cJ = dq._1
516+ let cK = dq._2
517+ let cL = dq._3
518+ let cN = aI(dp, cs)
519+ let cO = aN((cM - cN))
520+ let cP = (az - aI(cM, (cM + cO)))
521+ if (if ((cP > cQ))
522+ then dh
533523 else false)
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)
524+ then throw(((((((((((((("Price impact " + toString(cP)) + " > max price impact ") + toString(cQ)) + " before quote asset: ") + toString(di)) + " before base asset: ") + toString(dk)) + " base asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cM)) + " market price: ") + toString(cN)))
525+ else $Tuple7(dp, cJ, cK, cL, (bD() - (if (cq)
526+ then aN(cs)
527+ else 0)), (bC() - (if (!(cq))
528+ then aN(cs)
529+ else 0)), cP)
540530 }
541531 }
542532
543533
544-func dw (cv,cx,dm) = dl(cv, cx, dm, bm(), bo(), bn(), bp())
534+func dr (cq,cs,dh) = dg(cq, cs, dh, bh(), bj(), bi(), bk())
545535
546536
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 != ""))
537+func ds (dt,cj,ck) = {
538+ let du = valueOrErrorMessage(getInteger(dt, cj), ((("Can not get oracle price. Oracle: " + toString(dt)) + " key: ") + cj))
539+ if ((ck != ""))
550540 then {
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
541+ let dv = lastBlock.height
542+ let dw = valueOrErrorMessage(getInteger(dt, ck), ((("Can not get oracle block. Oracle: " + toString(dt)) + " key: ") + ck))
543+ if (((dv - dw) > bG()))
544+ then throw(((("Oracle stale data. Last oracle block: " + toString(dw)) + " current block: ") + toString(dv)))
545+ else du
556546 }
557- else dz
547+ else du
558548 }
559549
560550
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))
551+func dx () = {
552+ let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
553+ let dz = ds(dy._1, dy._2, dy._3)
554+ let dA = ce(b)
555+ let dB = if (isDefined(dA))
566556 then {
567- let dH = value(dF)
568- dx(dH._1, dH._2, dH._3)
557+ let dC = value(dA)
558+ ds(dC._1, dC._2, dC._3)
569559 }
570- else aE
571- aN(dE, dG)
560+ else az
561+ aI(dz, dB)
572562 }
573563
574564
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 != ""))
565+func dD () = {
566+ let dy = valueOrErrorMessage(ce(a), "No base asset oracle data")
567+ let dt = dy._1
568+ let cl = dy._4
569+ if ((cl != ""))
580570 then {
581- let dJ = valueOrErrorMessage(getBoolean(dy, cq), ((("Can not get oracle is open/closed. Oracle: " + toString(dy)) + " key: ") + cq))
582- !(dJ)
571+ let dE = valueOrErrorMessage(getBoolean(dt, cl), ((("Can not get oracle is open/closed. Oracle: " + toString(dt)) + " key: ") + cl))
572+ !(dE)
583573 }
584574 else false
585575 }
586576
587577
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
578+func dF (dG,di,dk,cB,cC) = {
579+ let dH = aI(aK(di, cB), aK(dk, cC))
580+ let dI = aI((dG + dH), (2 * az))
581+ let dF = aI(aN((dG - dH)), dI)
582+ dF
593583 }
594584
595585
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)
586+func dJ (di,dk) = {
587+ let dK = dx()
588+ let cB = bj()
589+ let cC = bk()
590+ let dL = dF(dK, bh(), bi(), cB, cC)
591+ let dM = dF(dK, di, dk, cB, cC)
592+ if (if ((dM > by()))
593+ then (dM > dL)
604594 else false)
605- then throw(((("Price spread " + toString(dR)) + " > max price spread ") + toString(bD())))
595+ then throw(((("Price spread " + toString(dM)) + " > max price spread ") + toString(by())))
606596 else true
607597 }
608598
609599
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)))
600+func dN (dO,dP) = {
601+ let dQ = bz()
602+ if ((dO > dQ))
603+ then throw(((("Long open notional " + toString(dO)) + " > max open notional ") + toString(dQ)))
604+ else if ((dP > dQ))
605+ then throw(((("Short open notional " + toString(dP)) + " > max open notional ") + toString(dQ)))
616606 else true
617607 }
618608
619609
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))
610+func dR () = {
611+ let di = bh()
612+ let dk = bi()
613+ let cB = bj()
614+ let cC = bk()
615+ aI(aK(di, cB), aK(dk, cC))
626616 }
627617
628618
629-func dX () = {
630- let dP = dC()
631- let dY = dW()
632- (aN(aS((dP - dY)), dP) > bB())
619+func dS () = {
620+ let dK = dx()
621+ let dT = dR()
622+ (aI(aN((dK - dT)), dK) > bw())
633623 }
634624
635625
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))
626+func dU (bR,dV,di,dj,dk,dl) = {
627+ let dW = aN(bR)
628+ let dX = (0 > bR)
629+ let dY = if ((dV == aC))
640630 then {
641- let ee = dl(!(ec), eb, false, dn, do, dp, dq)._1
642- ee
631+ let dZ = dg(!(dX), dW, false, di, dj, dk, dl)._1
632+ dZ
643633 }
644- else aP(eb, dC())
645- ed
634+ else aK(dW, dx())
635+ dY
646636 }
647637
648638
649-func ef (bW,eg,dn,do,dp,dq,ea) = if ((bW == 0))
639+func ea (bR,eb,di,dj,dk,dl,dV) = if ((bR == 0))
650640 then throw("Invalid position size")
651641 else {
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)
642+ let dX = (0 > bR)
643+ let dY = dU(bR, dV, di, dj, dk, dl)
644+ let ec = if (dX)
645+ then (eb - dY)
646+ else (dY - eb)
647+ $Tuple2(dY, ec)
658648 }
659649
660650
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)
651+func ed (bT,dV) = {
652+ let ee = bS(bT)
653+ let bW = ee._1
654+ let ef = ee._2
655+ let eg = ee._3
656+ let eh = ee._4
657+ ea(bW, eg, bh(), bj(), bi(), bk(), dV)
668658 }
669659
670660
671-func en (eo,ep,eq) = aN((eo - ep), eq)
661+func ei (ej,ek,el) = aI((ej - ek), el)
672662
673663
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)
664+func em (bT,dV) = {
665+ let en = bS(bT)
666+ let bW = en._1
667+ let ef = en._2
668+ let eo = en._3
669+ let ep = en._4
670+ let eq = en._5
671+ let er = ed(bT, dV)
672+ let dY = er._1
673+ let ec = er._2
674+ let es = cW(bW, ef, ep, eq, ec)
675+ let de = es._1
676+ let df = es._2
677+ ei(de, df, dY)
688678 }
689679
690680
691-func ey (bY) = er(bY, aH)
681+func et (bT) = em(bT, aC)
692682
693683
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())
684+func eu (bT,bR) = {
685+ let ev = aO(bv(), (az - aI(et(bT), bt())))
686+ let ew = aK(aN(bR), ev)
687+ let ex = dr((bR > 0), ew, false)
688+ let ey = ex._1
689+ let cP = ex._7
690+ if ((bx() > cP))
691+ then ew
692+ else aK(aN(bR), bv())
703693 }
704694
705695
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)
696+func ez (bT,eA,eB,eC,eD,dh,eE) = {
697+ let eF = bS(bT)
698+ let eG = eF._1
699+ let eH = eF._2
700+ let eI = eF._3
701+ let eJ = eF._4
702+ let eK = eF._5
703+ let eL = (eG > 0)
704+ let eM = aN(eG)
705+ if (if ((eM >= eA))
706+ then (eA > 0)
717707 else false)
718708 then {
719- let eS = (eR > eF)
720- let eT = dw((eL > 0), eF, dm)
721- let eU = eT._1
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)
729- let eY = eX._1
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))
709+ let eN = (eM > eA)
710+ let eO = dr((eG > 0), eA, dh)
711+ let eP = eO._1
712+ let cE = eO._2
713+ let cF = eO._3
714+ let eQ = eO._4
715+ let eR = if ((eG > 0))
716+ then -(eA)
717+ else eA
718+ let eS = ed(bT, aC)
719+ let eT = eS._1
720+ let ec = eS._2
721+ let eU = aI(aN(eR), eM)
722+ let eV = aK(ec, eU)
723+ let eW = cW(eG, eH, eJ, eK, ec)
724+ let eX = eW._1
725+ let eY = eW._2
726+ let eZ = eW._3
727+ let cV = eW._4
728+ let fa = cW(eG, eH, eJ, eK, eV)._2
729+ let fb = aK(aK(eT, eU), eB)
730+ let fc = (ec - eV)
731+ let fd = if ((eG > 0))
732+ then ((eT - eP) - fc)
733+ else ((fc + eT) - eP)
734+ let fe = (eG + eR)
735+ let ff = if ((fe == 0))
746736 then $Tuple2(0, 0)
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)
737+ else $Tuple2(aN(fd), bQ(fe))
738+ let fg = ff._1
739+ let fh = ff._2
740+ let fi = (eI - fg)
741+ let fj = em(bT, aC)
742+ let fk = if ((eG > 0))
743+ then (aK((fg + fc), fj) - fc)
744+ else (aK((fg - fc), fj) - fc)
745+ let fl = ((eX - (fk + fc)) - fb)
746+ let fm = if ((0 > fl))
747+ then if (eE)
758748 then 0
759749 else throw("Invalid internalClosePosition params: unable to pay fee")
760- else fq
761- let fs = if (eI)
762- then (fp + fr)
763- else fp
764- if (if ((eH != 0))
765- then (eH > eU)
750+ else fl
751+ let fn = if (eD)
752+ then (fk + fm)
753+ else fk
754+ if (if ((eC != 0))
755+ then (eC > eP)
766756 else false)
767- then throw(((("Limit error: " + toString(eU)) + " < ") + toString(eH)))
768- else $Tuple17(fj, fs, fl, fm, ff, fa, if (if (eI)
769- then eS
757+ then throw(((("Limit error: " + toString(eP)) + " < ") + toString(eC)))
758+ else $Tuple17(fe, fn, fg, fh, fa, eV, if (if (eD)
759+ then eN
770760 else false)
771761 then 0
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)
762+ else fm, cE, cF, eQ, (bm() - fi), (bD() - (if (eL)
763+ then aN(eR)
764+ else 0)), (bC() - (if (!(eL))
765+ then aN(eR)
766+ else 0)), (bo() - (if (eL)
767+ then fi
768+ else 0)), (bn() - (if (!(eL))
769+ then fi
770+ else 0)), (fb + cV), eP)
781771 }
782- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eF)) + " max: ") + toString(eR)))
772+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eA)) + " max: ") + toString(eM)))
783773 }
784774
785775
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
794-
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])
802-
803- func fI (fG,fH) = if ((fH >= fD))
804- then fG
805- else throw("List size exceeds 20")
806-
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)
808- }
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)
820- }
821-
822-
823-func fR () = {
824- let bW = bq()
825- if ((bW == 0))
826- then $Tuple2(bm(), bn())
776+func fo () = {
777+ let bR = bl()
778+ if ((bR == 0))
779+ then $Tuple2(bh(), bi())
827780 else {
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)
781+ let fp = (bR > 0)
782+ let fq = dr(fp, aN(bR), false)
783+ let fr = fq._1
784+ let fs = fq._2
785+ let ft = fq._3
786+ $Tuple2(fs, ft)
834787 }
835788 }
836789
837790
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)
791+func fu (fv,bl,fw,fx) = {
792+ let fy = toBigInt(fv)
793+ let fz = toBigInt(bl)
794+ let fA = toBigInt(fw)
795+ let fB = toBigInt(fx)
796+ let aX = aM(fA, fy)
797+ let fC = (fy + fz)
798+ let fD = aL(aX, fC)
799+ let fE = aL(fD, fC)
800+ let fF = aL(fB, fE)
801+ toInt(fF)
849802 }
850803
851804
852-func gj (gk,cB,cC) = {
853- let bW = bq()
854- if ((bW == 0))
805+func fG (fH,cw,cx) = {
806+ let bR = bl()
807+ if ((bR == 0))
855808 then {
856- let gl = aN(aP(gk, cC), cB)
857- $Tuple3(gl, aE, 0)
809+ let fI = aI(aK(fH, cx), cw)
810+ $Tuple3(fI, az, 0)
858811 }
859812 else {
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)
813+ let fp = (bR > 0)
814+ let fr = dr(fp, aN(bR), false)._1
815+ let fI = fu(cx, bR, cw, fH)
816+ let fJ = az
817+ let fK = ea(bR, fr, cw, fI, cx, fJ, aC)._2
818+ $Tuple3(fI, fJ, fK)
866819 }
867820 }
868821
869822
870-func go () = {
871- let gp = dC()
872- let gq = ft()
873- let gr = (gq - gp)
874- if (if (if ((bH() == 0))
823+func fL () = {
824+ let fM = dx()
825+ let fN = dR()
826+ let fO = (fN - fM)
827+ if (if (if ((bC() == 0))
875828 then true
876- else (bI() == 0))
829+ else (bD() == 0))
877830 then true
878- else dI())
831+ else dD())
879832 then $Tuple3(0, 0, 0)
880- else if ((0 > gr))
833+ else if ((0 > fO))
881834 then {
882- let gs = aN(aP(gr, bw()), aG)
883- if ((bM() == aJ))
835+ let fP = aI(aK(fO, br()), aB)
836+ if ((bH() == aE))
884837 then {
885- let gt = aN(aP(gs, bH()), bI())
886- $Tuple3(gs, gt, 0)
838+ let fQ = aI(aK(fP, bC()), bD())
839+ $Tuple3(fP, fQ, 0)
887840 }
888841 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)
842+ let fR = aN(aK(fP, bC()))
843+ let fS = aN(aK(fP, bD()))
844+ let fT = (fR - fS)
845+ $Tuple3(fP, fP, fT)
893846 }
894847 }
895848 else {
896- let gt = aN(aP(gr, bw()), aG)
897- if ((bM() == aJ))
849+ let fQ = aI(aK(fO, br()), aB)
850+ if ((bH() == aE))
898851 then {
899- let gs = aN(aP(gt, bI()), bH())
900- $Tuple3(gs, gt, 0)
852+ let fP = aI(aK(fQ, bD()), bC())
853+ $Tuple3(fP, fQ, 0)
901854 }
902855 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)
856+ let fS = aN(aK(fQ, bD()))
857+ let fR = aN(aK(fQ, bC()))
858+ let fT = (fS - fR)
859+ $Tuple3(fQ, fQ, fT)
907860 }
908861 }
909862 }
910863
911864
912-func gx (gy,gz) = {
913- let gA = bj()
914- let gB = aP(gA, gz)
915- let gC = if ((gy != ""))
865+func fU (fV,fW) = {
866+ let fX = be()
867+ let fY = aK(fX, fW)
868+ let fZ = if ((fV != ""))
916869 then {
917- let gD = bf(av(), aj(ax, gy))
918- if ((gD == ay))
870+ let ga = ba(aq(), ae(as, fV))
871+ if ((ga == at))
919872 then {
920- let gE = bh(av(), aj(aw, gy))
921- let gF = aP(gB, gE)
922- $Tuple2(gF, true)
873+ let gb = bc(aq(), ae(ar, fV))
874+ let gc = aK(fY, gb)
875+ $Tuple2(gc, true)
923876 }
924877 else throw("Invalid attached artifact")
925878 }
926- else $Tuple2(gB, false)
927- let gF = gC._1
928- let gG = gC._2
929- $Tuple2(gF, gG)
879+ else $Tuple2(fY, false)
880+ let gc = fZ._1
881+ let gd = fZ._2
882+ $Tuple2(gc, gd)
930883 }
931884
932885
933-func gH (bY,gI) = {
934- let eL = bX(bY)._1
935- if ((eL == 0))
886+func ge (bT,gf) = {
887+ let eG = bS(bT)._1
888+ if ((eG == 0))
936889 then true
937- else (cc(bY) == gI)
890+ else (bX(bT) == gf)
938891 }
939892
940893
941-func gJ (bY,gI) = (cc(bY) == gI)
894+func gg (bT,gf) = (bX(bT) == gf)
942895
943896
944-func gK (bY,gy) = {
945- let gL = invoke(as(), "computeFeeDiscount", [bY], nil)
946- if ((gL == gL))
897+func gh (bT,fV) = {
898+ let gi = invoke(an(), "computeFeeDiscount", [bT], nil)
899+ if ((gi == gi))
947900 then {
948- let gM = {
949- let ca = gL
950- if ($isInstanceOf(ca, "Int"))
901+ let gj = {
902+ let bV = gi
903+ if ($isInstanceOf(bV, "Int"))
951904 then {
952- let gN = ca
953- gN
905+ let gk = bV
906+ gk
954907 }
955908 else throw("Invalid computeFeeDiscount result")
956909 }
957- let gO = gx(gy, gM)
958- let gF = gO._1
959- let gG = gO._2
960- $Tuple2(gF, gG)
910+ let gl = fU(fV, gj)
911+ let gc = gl._1
912+ let gd = gl._2
913+ $Tuple2(gc, gd)
961914 }
962915 else throw("Strict value is not equal to itself.")
963916 }
964917
965918
966-func gP (bP) = {
967- let gQ = if ((size(bP.payments) > 1))
968- then toBase58String(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifactId"))
919+func gm (bK) = {
920+ let gn = if ((size(bK.payments) > 1))
921+ then toBase58String(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifactId"))
969922 else ""
970- gQ
923+ gn
971924 }
972925
973926
974-func gR (gS) = {
975- let gT = aP(gS, bK())
976- let gU = (gS - gT)
977- $Tuple2(gT, gU)
927+func go (gp) = {
928+ let gq = aK(gp, bF())
929+ let gr = (gp - gq)
930+ $Tuple2(gq, gr)
978931 }
979932
980933
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)]
934+func gs (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = [IntegerEntry(s, gt), IntegerEntry(t, gu), IntegerEntry(u, gv), IntegerEntry(r, gw), IntegerEntry(p, eB), IntegerEntry(w, gx), IntegerEntry(x, gy), IntegerEntry(v, gz), IntegerEntry(y, gA), IntegerEntry(z, dQ), IntegerEntry(A, gB), IntegerEntry(B, gB), IntegerEntry(q, gD), IntegerEntry(C, gE)]
982935
983936
984-func hi (hj,hk,hl,hm,hn) = [IntegerEntry(K, hj), IntegerEntry(I, hk), IntegerEntry(J, hl), IntegerEntry(L, hm), IntegerEntry(M, hn)]
937+func gF (gG,gH,gI,gJ,gK) = [IntegerEntry(F, gG), IntegerEntry(D, gH), IntegerEntry(E, gI), IntegerEntry(G, gJ), IntegerEntry(H, gK)]
985938
986939
987-func ho (hp,al) = if (hp)
940+func gL (gM,ag) = if (gM)
988941 then {
989- let hq = bJ()
990-[IntegerEntry(aj(i, al), (hq + 1)), IntegerEntry(d, (hq + 1))]
942+ let gN = bE()
943+[IntegerEntry(ae(i, ag), (gN + 1)), IntegerEntry(d, (gN + 1))]
991944 }
992945 else nil
993946
994947
995-func hr (hp,al,eG) = if (hp)
996- then [IntegerEntry(aj(k, al), eG)]
948+func gO (gM,ag,eB) = if (gM)
949+ then [IntegerEntry(ae(k, ag), eB)]
997950 else nil
998951
999952
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)]
953+func gP (ag,eA,gQ,gR,db,gS) = [IntegerEntry(ae(e, ag), eA), IntegerEntry(ae(f, ag), gQ), IntegerEntry(ae(g, ag), gR), IntegerEntry(ae(h, ag), db), IntegerEntry(ae(l, ag), gS)]
1001954
1002955
1003-func hw (hx) = {
1004- let fu = ((bN() / 1000) / 60)
1005- let hy = valueOrElse(getInteger(this, E), 0)
1006- if ((hy > fu))
1007- then throw("TWAP out-of-order")
1008- else {
1009- let fK = if ((hy == 0))
1010- then fu
1011- else hy
1012- if ((fu > hy))
1013- then {
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))]
1019- }
1020- else {
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)]
1026- }
1027- }
956+func gT (cw,cx) = [IntegerEntry(I, cw), IntegerEntry(J, cx)]
957+
958+
959+func gU (cB,cC) = [IntegerEntry(K, cB), IntegerEntry(L, cC)]
960+
961+
962+func gV (cw,cx,gW,gX,gY,gZ,ha,hb) = {
963+ let cB = bj()
964+ let cC = bk()
965+ if (((gY - gZ) != gW))
966+ then throw(((((("Invalid AMM state data: " + toString(gY)) + " + ") + toString(gZ)) + " != ") + toString(gW)))
967+ else (gT(cw, cx) ++ [IntegerEntry(M, gW), IntegerEntry(P, gX), IntegerEntry(N, gY), IntegerEntry(O, gZ), IntegerEntry(R, ha), IntegerEntry(Q, hb)])
1028968 }
1029969
1030970
1031-func hD (cB,cC) = [IntegerEntry(N, cB), IntegerEntry(O, cC)]
971+func hc (ag) = [DeleteEntry(ae(e, ag)), DeleteEntry(ae(f, ag)), DeleteEntry(ae(g, ag)), DeleteEntry(ae(h, ag)), DeleteEntry(ae(j, ag)), DeleteEntry(ae(k, ag)), DeleteEntry(ae(l, ag))]
1032972
1033973
1034-func hE (cG,cH) = [IntegerEntry(P, cG), IntegerEntry(Q, cH)]
1035-
1036-
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))))
974+func hd (ag,he) = {
975+ let hf = assetBalance(this, aj())
976+ if ((he > hf))
977+ then throw(((("Unable to withdraw " + toString(he)) + " from contract balance ") + toString(hf)))
978+ else [ScriptTransfer(ag, he, aj())]
1043979 }
1044980
1045981
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))]
982+func hg (bK) = if ((0 > bK))
983+ then throw("Balance")
984+ else [IntegerEntry(c, bK)]
1047985
1048986
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())]
1054- }
987+func hh (bK) = [ScriptTransfer(al(), bK, aj())]
1055988
1056989
1057-func hQ (bP) = if ((0 > bP))
1058- then throw("Balance")
1059- else [IntegerEntry(c, bP)]
1060-
1061-
1062-func hR (bP) = [ScriptTransfer(aq(), bP, ao())]
1063-
1064-
1065-func hS (hT,bP) = if (hT)
1066- then [Burn(valueOrErrorMessage(bP.payments[1].assetId, "Invalid artifact"), 1)]
990+func hi (hj,bK) = if (hj)
991+ then [Burn(valueOrErrorMessage(bK.payments[1].assetId, "Invalid artifact"), 1)]
1067992 else nil
1068993
1069994
1070-@Callable(bP)
1071-func pause () = if ((bP.caller != an()))
995+@Callable(bK)
996+func pause () = if ((bK.caller != ai()))
1072997 then throw("Invalid pause params")
1073998 else [BooleanEntry(n, true)]
1074999
10751000
10761001
1077-@Callable(bP)
1078-func unpause () = if ((bP.caller != an()))
1002+@Callable(bK)
1003+func unpause () = if ((bK.caller != ai()))
10791004 then throw("Invalid unpause params")
10801005 else [BooleanEntry(n, false)]
10811006
10821007
10831008
1084-@Callable(bP)
1085-func setCloseOnly () = if ((bP.caller != an()))
1009+@Callable(bK)
1010+func setCloseOnly () = if ((bK.caller != ai()))
10861011 then throw("Invalid setCloseOnly params")
10871012 else [BooleanEntry(o, true)]
10881013
10891014
10901015
1091-@Callable(bP)
1092-func unsetCloseOnly () = if ((bP.caller != an()))
1016+@Callable(bK)
1017+func unsetCloseOnly () = if ((bK.caller != ai()))
10931018 then throw("Invalid unsetCloseOnly params")
10941019 else [BooleanEntry(o, false)]
10951020
10961021
10971022
1098-@Callable(bP)
1099-func addLiquidity (cw) = if (if ((bP.caller != an()))
1023+@Callable(bK)
1024+func addLiquidity (cr) = if (if ((bK.caller != ai()))
11001025 then true
1101- else (0 >= cw))
1026+ else (0 >= cr))
11021027 then throw("Invalid addLiquidity params")
11031028 else {
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))
1029+ let cw = bh()
1030+ let cx = bi()
1031+ let cB = bj()
1032+ let cC = bk()
1033+ let hk = aI(aK(cw, cB), aK(cx, cC))
1034+ let hl = (cw + cr)
1035+ let hm = (aI(aK(hl, cB), hk) - cx)
1036+ let hn = (cx + hm)
1037+ let ho = fG(dx(), hl, hn)
1038+ let hp = ho._1
1039+ let hq = ho._2
1040+ let fK = ho._3
1041+ let hr = if ((fK != 0))
11171042 then {
1118- let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1119- if ((ib == ib))
1043+ let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1044+ if ((hr == hr))
11201045 then nil
11211046 else throw("Strict value is not equal to itself.")
11221047 }
11231048 else nil
1124- if ((ib == ib))
1125- then (hD(hV, hX) ++ hE(hZ, ia))
1049+ if ((hr == hr))
1050+ then (gT(hl, hn) ++ gU(hp, hq))
11261051 else throw("Strict value is not equal to itself.")
11271052 }
11281053
11291054
11301055
1131-@Callable(bP)
1132-func removeLiquidity (cw) = if (if ((bP.caller != an()))
1056+@Callable(bK)
1057+func removeLiquidity (cr) = if (if ((bK.caller != ai()))
11331058 then true
1134- else (cw >= 0))
1059+ else (cr >= 0))
11351060 then throw("Invalid removeLiquidity params")
11361061 else {
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))
1062+ let cw = bh()
1063+ let cx = bi()
1064+ let cB = bj()
1065+ let cC = bk()
1066+ let hk = aI(aK(cw, cB), aK(cx, cC))
1067+ let hl = (cw - cr)
1068+ let hs = aN((aI(aK(hl, cB), hk) - cx))
1069+ let hn = (cx - hs)
1070+ let ht = fG(dx(), hl, hn)
1071+ let hp = ht._1
1072+ let hq = ht._2
1073+ let fK = ht._3
1074+ let hr = if ((fK != 0))
11501075 then {
1151- let ib = invoke(ar(), "exchangeFreeAndLocked", [gn], nil)
1152- if ((ib == ib))
1076+ let hr = invoke(am(), "exchangeFreeAndLocked", [fK], nil)
1077+ if ((hr == hr))
11531078 then nil
11541079 else throw("Strict value is not equal to itself.")
11551080 }
11561081 else nil
1157- if ((ib == ib))
1158- then (hD(hV, hX) ++ hE(hZ, ia))
1082+ if ((hr == hr))
1083+ then (gT(hl, hn) ++ gU(hp, hq))
11591084 else throw("Strict value is not equal to itself.")
11601085 }
11611086
11621087
11631088
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))
1089+@Callable(bK)
1090+func changeSettings (gt,gu,gv,gw,eB,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gw))
11661091 then true
1167- else (0 >= gW))
1092+ else (0 >= gt))
11681093 then true
1169- else (0 >= gX))
1094+ else (0 >= gu))
11701095 then true
1171- else (0 >= gY))
1096+ else (0 >= gv))
11721097 then true
1173- else (0 >= eG))
1098+ else (0 >= eB))
11741099 then true
1175- else (0 >= ha))
1100+ else (0 >= gx))
11761101 then true
1177- else (0 >= hb))
1102+ else (0 >= gy))
11781103 then true
1179- else (0 >= hc))
1104+ else (0 >= gz))
11801105 then true
1181- else (0 >= hd))
1106+ else (0 >= gA))
11821107 then true
1183- else (0 >= dV))
1108+ else (0 >= dQ))
11841109 then true
1185- else (0 >= he))
1110+ else (0 >= gB))
11861111 then true
1187- else (he > aE))
1112+ else (gB > az))
11881113 then true
1189- else (0 >= hf))
1114+ else (0 >= gC))
11901115 then true
1191- else (0 >= hg))
1116+ else (0 >= gD))
11921117 then true
1193- else if ((hh != aK))
1194- then (hh != aJ)
1118+ else if ((gE != aF))
1119+ then (gE != aE)
11951120 else false)
11961121 then true
1197- else !(cr()))
1122+ else !(cm()))
11981123 then true
1199- else (bP.caller != an()))
1124+ else (bK.caller != ai()))
12001125 then throw("Invalid changeSettings params")
1201- else gV(gW, gX, gY, gZ, eG, ha, hb, hc, hd, dV, he, hf, hg, hh)
1126+ else gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)
12021127
12031128
12041129
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))
1130+@Callable(bK)
1131+func initialize (cw,cx,gw,gt,gu,gv,eB,hu,hv,hw,gx,gy,gz,gA,dQ,gB,gC,gD,gE) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cw))
12071132 then true
1208- else (0 >= cC))
1133+ else (0 >= cx))
12091134 then true
1210- else (0 >= gZ))
1135+ else (0 >= gw))
12111136 then true
1212- else (0 >= gW))
1137+ else (0 >= gt))
12131138 then true
1214- else (0 >= gX))
1139+ else (0 >= gu))
12151140 then true
1216- else (0 >= gY))
1141+ else (0 >= gv))
12171142 then true
1218- else (0 >= eG))
1143+ else (0 >= eB))
12191144 then true
1220- else (0 >= ha))
1145+ else (0 >= gx))
12211146 then true
1222- else (0 >= hb))
1147+ else (0 >= gy))
12231148 then true
1224- else (0 >= hc))
1149+ else (0 >= gz))
12251150 then true
1226- else (0 >= hd))
1151+ else (0 >= gA))
12271152 then true
1228- else (0 >= dV))
1153+ else (0 >= dQ))
12291154 then true
1230- else (0 >= he))
1155+ else (0 >= gB))
12311156 then true
1232- else (he > aE))
1157+ else (gB > az))
12331158 then true
1234- else (0 >= hf))
1159+ else (0 >= gC))
12351160 then true
1236- else (0 >= hg))
1161+ else (0 >= gD))
12371162 then true
1238- else if ((hh != aK))
1239- then (hh != aJ)
1163+ else if ((gE != aF))
1164+ then (gE != aE)
12401165 else false)
12411166 then true
1242- else cr())
1167+ else cm())
12431168 then true
1244- else (bP.caller != this))
1169+ else (bK.caller != this))
12451170 then throw("Invalid initialize parameters")
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)))])
1171+ else ((((gV(cw, cx, 0, 0, 0, 0, 0, 0) ++ gs(gt, gu, gv, gw, eB, gx, gy, gz, gA, dQ, gB, gC, gD, gE)) ++ gF((bI() + gw), 0, 0, 0, 0)) ++ hg(0)) ++ [BooleanEntry(m, true), StringEntry(a, hu), StringEntry(b, hv), StringEntry(T, toString(addressFromStringValue(hw)))])
12471172
12481173
12491174
1250-@Callable(bP)
1251-func increasePosition (ih,ii,ij,ik) = {
1252- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1253- if ((il == il))
1175+@Callable(bK)
1176+func increasePosition (hx,hy,hz,hA) = {
1177+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1178+ if ((hB == hB))
12541179 then {
1255- let im = invoke(this, "ensureCalledOnce", nil, nil)
1256- if ((im == im))
1180+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1181+ if ((hC == hC))
12571182 then {
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)
1183+ let bT = bJ(bK)
1184+ let hD = bK.payments[0].amount
1185+ let gf = bK.payments[0].assetId
1186+ let hE = toBase58String(value(gf))
1187+ let hF = (gf == aj())
1188+ if (if (if (if (if (if (if (if (if (if ((hx != au))
1189+ then (hx != av)
12651190 else false)
12661191 then true
1267- else (0 >= in))
1192+ else (0 >= hD))
12681193 then true
1269- else !(cr()))
1194+ else !(cm()))
12701195 then true
1271- else !(ip))
1196+ else !(hF))
12721197 then true
1273- else !(gH(bY, io)))
1198+ else !(ge(bT, hE)))
12741199 then true
1275- else !(bQ(aN(aE, ii), bl(), true)))
1200+ else !(bL(aI(az, hy), bg(), true)))
12761201 then true
1277- else cs())
1202+ else cn())
12781203 then true
1279- else ct())
1204+ else co())
12801205 then true
1281- else dI())
1206+ else dD())
12821207 then throw("Invalid increasePosition parameters")
12831208 else {
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))
1209+ let hG = gh(bT, gm(bK))
1210+ let gc = hG._1
1211+ let gd = hG._2
1212+ let he = aI(hD, (aK(gc, hy) + az))
1213+ let hH = (hD - he)
1214+ let hI = invoke(ap(), "acceptPaymentWithLink", [bT, hA], [AttachedPayment(aj(), hH)])
1215+ if ((hI == hI))
12911216 then {
1292- let it = {
1293- let ca = is
1294- if ($isInstanceOf(ca, "Int"))
1217+ let hJ = {
1218+ let bV = hI
1219+ if ($isInstanceOf(bV, "Int"))
12951220 then {
1296- let gN = ca
1297- gN
1221+ let gk = bV
1222+ gk
12981223 }
12991224 else throw("Invalid referrerFee")
13001225 }
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
1226+ let hK = (hH - hJ)
1227+ let hL = bS(bT)
1228+ let eG = hL._1
1229+ let eH = hL._2
1230+ let eI = hL._3
1231+ let eJ = hL._4
1232+ let eK = hL._5
1233+ let hM = (eG == 0)
1234+ let hN = if ((eG > 0))
1235+ then (hx == au)
1236+ else (hx == av)
1237+ let hO = if (!(hM))
1238+ then hN
13141239 else false
1315- let iz = (ih == az)
1316- let iA = if (if (iw)
1240+ let hP = (hx == au)
1241+ let hQ = if (if (hM)
13171242 then true
1318- else iy)
1243+ else hO)
13191244 then {
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))
1245+ let hR = aK(he, hy)
1246+ let hS = cA(hP, hR)
1247+ let cH = hS._1
1248+ let cE = hS._2
1249+ let cF = hS._3
1250+ let eQ = hS._4
1251+ if (if ((hz != 0))
1252+ then (hz > aN(cH))
13281253 else false)
1329- then throw(((("Limit error: " + toString(aS(cM))) + " < ") + toString(ij)))
1254+ then throw(((("Limit error: " + toString(aN(cH))) + " < ") + toString(hz)))
13301255 else {
1331- let fj = (eL + cM)
1332- let iD = (bt() + (if ((fj > 0))
1333- then iB
1256+ let fe = (eG + cH)
1257+ let hT = (bo() + (if ((fe > 0))
1258+ then hR
13341259 else 0))
1335- let iE = (bs() + (if ((0 > fj))
1336- then iB
1260+ let hU = (bn() + (if ((0 > fe))
1261+ then hR
13371262 else 0))
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)))
1263+ let hV = cW(eG, eH, eJ, eK, he)
1264+ let de = hV._1
1265+ let eY = hV._2
1266+ let eZ = hV._3
1267+ let cV = hV._4
1268+ if (!(dJ(cE, cF)))
13441269 then throw("Over max spread limit")
1345- else if (!(dS(iD, iE)))
1270+ else if (!(dN(hT, hU)))
13461271 then throw("Over max open notional")
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)
1272+ else $Tuple14(fe, de, (eI + hR), bQ(fe), bI(), cF, cE, eQ, (bm() + hR), (bD() + (if ((fe > 0))
1273+ then aN(cH)
1274+ else 0)), (bC() + (if ((0 > fe))
1275+ then aN(cH)
1276+ else 0)), hT, hU, cV)
13521277 }
13531278 }
13541279 else {
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))
1280+ let hR = aK(he, hy)
1281+ let hW = ed(toString(bK.caller), aC)
1282+ let eT = hW._1
1283+ let ec = hW._2
1284+ if ((eT > hR))
13601285 then throw("Use decreasePosition to decrease position size")
13611286 else throw("Close position first")
13621287 }
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))
1288+ let fe = hQ._1
1289+ let hX = hQ._2
1290+ let fg = hQ._3
1291+ let hY = hQ._4
1292+ let hZ = hQ._5
1293+ let cF = hQ._6
1294+ let cE = hQ._7
1295+ let eQ = hQ._8
1296+ let ia = hQ._9
1297+ let ib = hQ._10
1298+ let ic = hQ._11
1299+ let hT = hQ._12
1300+ let hU = hQ._13
1301+ let cV = hQ._14
1302+ let id = go((hK + cV))
1303+ let gq = id._1
1304+ let gr = id._2
1305+ let ie = if ((he >= cV))
1306+ then invoke(am(), "addLocked", nil, [AttachedPayment(aj(), (he - cV))])
1307+ else invoke(am(), "withdrawLocked", [(cV - he)], nil)
1308+ if ((ie == ie))
13841309 then {
1385- let iP = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1386- if ((iP == iP))
1310+ let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1311+ if ((if == if))
13871312 then {
1388- let iQ = invoke(as(), "notifyFees", [bY, iu], nil)
1389- if ((iQ == iQ))
1313+ let ig = invoke(an(), "notifyFees", [bT, hK], nil)
1314+ if ((ig == ig))
13901315 then {
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))
1316+ let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1317+ if ((ih == ih))
1318+ then ((((((gP(bT, fe, hX, fg, hY, hZ) ++ gL(hM, bT)) ++ gO(hM, bT, gc)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hh(gq)) ++ hg(((bd() + he) - cV))) ++ hi(gd, bK))
13941319 else throw("Strict value is not equal to itself.")
13951320 }
13961321 else throw("Strict value is not equal to itself.")
13971322 }
13981323 else throw("Strict value is not equal to itself.")
13991324 }
14001325 else throw("Strict value is not equal to itself.")
14011326 }
14021327 else throw("Strict value is not equal to itself.")
14031328 }
14041329 }
14051330 else throw("Strict value is not equal to itself.")
14061331 }
14071332 else throw("Strict value is not equal to itself.")
14081333 }
14091334
14101335
14111336
1412-@Callable(bP)
1337+@Callable(bK)
14131338 func addMargin () = {
1414- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1415- if ((il == il))
1339+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1340+ if ((hB == hB))
14161341 then {
1417- let im = invoke(this, "ensureCalledOnce", nil, nil)
1418- if ((im == im))
1342+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1343+ if ((hC == hC))
14191344 then {
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))
1345+ let bT = toString(bK.caller)
1346+ let he = bK.payments[0].amount
1347+ let gf = bK.payments[0].assetId
1348+ let hE = toBase58String(value(gf))
1349+ let hF = (gf == aj())
1350+ if (if (if (if (if (if (if (!(hF))
14261351 then true
1427- else !(ci(toString(bP.caller))))
1352+ else !(cd(toString(bK.caller))))
14281353 then true
1429- else !(gJ(bY, io)))
1354+ else !(gg(bT, hE)))
14301355 then true
1431- else !(cr()))
1356+ else !(cm()))
14321357 then true
1433- else cs())
1358+ else cn())
14341359 then true
1435- else ct())
1360+ else co())
14361361 then true
1437- else dI())
1362+ else dD())
14381363 then throw("Invalid addMargin parameters")
14391364 else {
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))
1365+ let ii = bS(bT)
1366+ let eG = ii._1
1367+ let eH = ii._2
1368+ let eI = ii._3
1369+ let eJ = ii._4
1370+ let eK = ii._5
1371+ let ie = invoke(am(), "addLocked", nil, [AttachedPayment(aj(), he)])
1372+ if ((ie == ie))
14481373 then {
1449- let da = cW(eM, eP)
1450- let iT = if ((da > 0))
1374+ let cV = cR(eH, eK)
1375+ let ij = if ((cV > 0))
14511376 then {
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))
1377+ let ik = go(cV)
1378+ let gq = ik._1
1379+ let gr = ik._2
1380+ let il = invoke(am(), "withdrawLocked", [gq], nil)
1381+ if ((il == il))
14571382 then {
1458- let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1459- if ((iW == iW))
1460- then hR(gT)
1383+ let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1384+ if ((im == im))
1385+ then hh(gq)
14611386 else throw("Strict value is not equal to itself.")
14621387 }
14631388 else throw("Strict value is not equal to itself.")
14641389 }
14651390 else nil
1466- if ((iT == iT))
1467- then ((hs(bY, eL, ((eM - da) + hO), eN, eO, bN()) ++ hQ(((bi() + hO) - da))) ++ iT)
1391+ if ((ij == ij))
1392+ then ((gP(bT, eG, ((eH - cV) + he), eI, eJ, bI()) ++ hg(((bd() + he) - cV))) ++ ij)
14681393 else throw("Strict value is not equal to itself.")
14691394 }
14701395 else throw("Strict value is not equal to itself.")
14711396 }
14721397 }
14731398 else throw("Strict value is not equal to itself.")
14741399 }
14751400 else throw("Strict value is not equal to itself.")
14761401 }
14771402
14781403
14791404
1480-@Callable(bP)
1481-func removeMargin (hO) = {
1482- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1483- if ((il == il))
1405+@Callable(bK)
1406+func removeMargin (he) = {
1407+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1408+ if ((hB == hB))
14841409 then {
1485- let im = invoke(this, "ensureCalledOnce", nil, nil)
1486- if ((im == im))
1410+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1411+ if ((hC == hC))
14871412 then {
1488- let bY = toString(bP.caller)
1489- if (if (if (if (if ((0 >= hO))
1413+ let bT = toString(bK.caller)
1414+ if (if (if (if (if ((0 >= he))
14901415 then true
1491- else !(ci(bY)))
1416+ else !(cd(bT)))
14921417 then true
1493- else !(cr()))
1418+ else !(cm()))
14941419 then true
1495- else cs())
1420+ else cn())
14961421 then true
1497- else dI())
1422+ else dD())
14981423 then throw("Invalid removeMargin parameters")
14991424 else {
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))
1425+ let in = bS(bT)
1426+ let eG = in._1
1427+ let eH = in._2
1428+ let eI = in._3
1429+ let eJ = in._4
1430+ let eK = in._5
1431+ let io = cW(eG, eH, eJ, eK, -(he))
1432+ let de = io._1
1433+ let df = io._2
1434+ let da = io._3
1435+ let cV = io._4
1436+ if ((df != 0))
15121437 then throw("Invalid removed margin amount")
15131438 else {
1514- let fo = en(dj, dk, eN)
1515- if (!(bQ(fo, bl(), true)))
1516- then throw(((("Too much margin removed: " + toString(fo)) + " < ") + toString(bl())))
1439+ let fj = ei(de, df, eI)
1440+ if (!(bL(fj, bg(), true)))
1441+ then throw(((("Too much margin removed: " + toString(fj)) + " < ") + toString(bg())))
15171442 else {
1518- let iZ = gR(da)
1519- let gT = iZ._1
1520- let gU = iZ._2
1521- let iT = if ((da > 0))
1443+ let ip = go(cV)
1444+ let gq = ip._1
1445+ let gr = ip._2
1446+ let ij = if ((cV > 0))
15221447 then {
1523- let iW = invoke(ar(), "exchangeFreeAndLocked", [-(gU)], nil)
1524- if ((iW == iW))
1525- then hR(gT)
1448+ let im = invoke(am(), "exchangeFreeAndLocked", [-(gr)], nil)
1449+ if ((im == im))
1450+ then hh(gq)
15261451 else throw("Strict value is not equal to itself.")
15271452 }
15281453 else nil
1529- if ((iT == iT))
1454+ if ((ij == ij))
15301455 then {
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)
1456+ let il = invoke(am(), "withdrawLocked", [(he + gq)], nil)
1457+ if ((il == il))
1458+ then (((gP(bT, eG, de, eI, bQ(eG), bI()) ++ hd(bK.caller, he)) ++ hg(((bd() - he) - cV))) ++ ij)
15341459 else throw("Strict value is not equal to itself.")
15351460 }
15361461 else throw("Strict value is not equal to itself.")
15371462 }
15381463 }
15391464 }
15401465 }
15411466 else throw("Strict value is not equal to itself.")
15421467 }
15431468 else throw("Strict value is not equal to itself.")
15441469 }
15451470
15461471
15471472
1548-@Callable(bP)
1549-func closePosition (eF,eH,eI) = {
1550- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1551- if ((il == il))
1473+@Callable(bK)
1474+func closePosition (eA,eC,eD) = {
1475+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1476+ if ((hB == hB))
15521477 then {
1553- let im = invoke(this, "ensureCalledOnce", nil, nil)
1554- if ((im == im))
1478+ let hC = invoke(this, "ensureCalledOnce", nil, nil)
1479+ if ((hC == hC))
15551480 then {
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)))
1481+ let bT = bJ(bK)
1482+ let iq = valueOrErrorMessage(addressFromString(bT), "Invalid caller")
1483+ let cc = ca(bT)
1484+ if (if (if (if (if (if (!(cd(bT)))
15601485 then true
1561- else !(cr()))
1486+ else !(cm()))
15621487 then true
1563- else cs())
1488+ else cn())
15641489 then true
1565- else (0 >= eF))
1490+ else (0 >= eA))
15661491 then true
1567- else (0 > eH))
1492+ else (0 > eC))
15681493 then true
1569- else dI())
1494+ else dD())
15701495 then throw("Invalid closePosition parameters")
15711496 else {
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))
1497+ let eK = bS(bT)._5
1498+ let ir = ez(bT, eA, cc, eC, eD, true, true)
1499+ let fe = ir._1
1500+ let fn = ir._2
1501+ let fg = ir._3
1502+ let fh = ir._4
1503+ let fa = ir._5
1504+ let eV = ir._6
1505+ let fm = ir._7
1506+ let cE = ir._8
1507+ let cF = ir._9
1508+ let eQ = ir._10
1509+ let ia = ir._11
1510+ let ib = ir._12
1511+ let ic = ir._13
1512+ let hT = ir._14
1513+ let hU = ir._15
1514+ let is = ir._16
1515+ if ((fa > 0))
15911516 then throw("Invalid closePosition parameters: bad debt")
1592- else if ((eP >= bN()))
1517+ else if ((eK >= bI()))
15931518 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15941519 else {
1595- let eS = (fj != 0)
1596- let jd = (fr + jc)
1597- let je = (bi() - jd)
1598- let jf = if ((0 > je))
1520+ let eN = (fe != 0)
1521+ let it = (fm + is)
1522+ let iu = (bd() - it)
1523+ let iv = if ((0 > iu))
15991524 then 0
1600- else je
1601- let iV = invoke(ar(), "withdrawLocked", [jd], nil)
1602- if ((iV == iV))
1525+ else iu
1526+ let il = invoke(am(), "withdrawLocked", [it], nil)
1527+ if ((il == il))
16031528 then {
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))
1529+ let iw = go(is)
1530+ let gq = iw._1
1531+ let gr = iw._2
1532+ let if = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1533+ if ((if == if))
16091534 then {
1610- let iQ = invoke(as(), "notifyFees", [bY, jc], nil)
1611- if ((iQ == iQ))
1535+ let ig = invoke(an(), "notifyFees", [bT, is], nil)
1536+ if ((ig == ig))
16121537 then {
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))
1538+ let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1539+ if ((ih == ih))
1540+ then (((((if (eN)
1541+ then gP(bT, fe, fn, fg, fh, bI())
1542+ else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ (if ((fm > 0))
1543+ then hd(iq, fm)
1544+ else nil)) ++ hg(iv)) ++ hh(gq))
16201545 else throw("Strict value is not equal to itself.")
16211546 }
16221547 else throw("Strict value is not equal to itself.")
16231548 }
16241549 else throw("Strict value is not equal to itself.")
16251550 }
16261551 else throw("Strict value is not equal to itself.")
16271552 }
16281553 }
16291554 }
16301555 else throw("Strict value is not equal to itself.")
16311556 }
16321557 else throw("Strict value is not equal to itself.")
16331558 }
16341559
16351560
16361561
1637-@Callable(bP)
1638-func liquidate (bY) = {
1639- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1640- if ((il == il))
1562+@Callable(bK)
1563+func liquidate (bT) = {
1564+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1565+ if ((hB == hB))
16411566 then {
1642- let jh = er(bY, aH)
1643- let ji = if (dX())
1567+ let ix = em(bT, aC)
1568+ let iy = if (dS())
16441569 then {
1645- let jj = er(bY, aI)
1646- aT(jh, jj)
1570+ let iz = em(bT, aD)
1571+ aO(ix, iz)
16471572 }
1648- else jh
1649- if (if (if (if (if (!(bQ(ji, by(), false)))
1573+ else ix
1574+ if (if (if (if (if (!(bL(iy, bt(), false)))
16501575 then true
1651- else !(ci(bY)))
1576+ else !(cd(bT)))
16521577 then true
1653- else !(cr()))
1578+ else !(cm()))
16541579 then true
1655- else cs())
1580+ else cn())
16561581 then true
1657- else dI())
1582+ else dD())
16581583 then throw("Unable to liquidate")
16591584 else {
1660- let jk = if (if ((jh > bz()))
1661- then (bA() > 0)
1585+ let iA = if (if ((ix > bu()))
1586+ then (bv() > 0)
16621587 else false)
1663- then (aE > bA())
1588+ then (az > bv())
16641589 else false
1665- let eL = bX(bY)._1
1666- let eb = aS(eL)
1667- let jl = if (jk)
1590+ let eG = bS(bT)._1
1591+ let dW = aN(eG)
1592+ let iB = if (iA)
16681593 then {
1669- let jm = ez(bY, eL)
1670- let jn = aN(aS(jm), eb)
1671- $Tuple2(jn, aS(jm))
1594+ let iC = eu(bT, eG)
1595+ let iD = aI(aN(iC), dW)
1596+ $Tuple2(iD, aN(iC))
16721597 }
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))
1598+ else $Tuple2(0, dW)
1599+ let iD = iB._1
1600+ let iC = iB._2
1601+ let iE = ez(bT, if (iA)
1602+ then iC
1603+ else dW, bu(), 0, true, false, true)
1604+ let fe = iE._1
1605+ let fn = iE._2
1606+ let fg = iE._3
1607+ let fh = iE._4
1608+ let fa = iE._5
1609+ let eV = iE._6
1610+ let fm = iE._7
1611+ let cE = iE._8
1612+ let cF = iE._9
1613+ let eQ = iE._10
1614+ let ia = iE._11
1615+ let ib = iE._12
1616+ let ic = iE._13
1617+ let hT = iE._14
1618+ let hU = iE._15
1619+ let iF = iE._16
1620+ let iG = (iF / 2)
1621+ let gr = (iF - iG)
1622+ let iu = (bd() - iF)
1623+ let iH = if ((0 > iu))
16991624 then 0
1700- else je
1701- let iW = if ((ff > 0))
1625+ else iu
1626+ let im = if ((fa > 0))
17021627 then {
1703- let iW = invoke(ar(), "exchangeFreeAndLocked", [(ff + jp)], nil)
1704- if ((iW == iW))
1628+ let im = invoke(am(), "exchangeFreeAndLocked", [(fa + iF)], nil)
1629+ if ((im == im))
17051630 then nil
17061631 else throw("Strict value is not equal to itself.")
17071632 }
17081633 else nil
1709- if ((iW == iW))
1634+ if ((im == im))
17101635 then {
1711- let iV = invoke(ar(), "withdrawLocked", [jp], nil)
1712- if ((iV == iV))
1636+ let il = invoke(am(), "withdrawLocked", [iF], nil)
1637+ if ((il == il))
17131638 then {
1714- let js = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gU)])
1715- if ((js == js))
1639+ let iI = invoke(am(), "addFree", nil, [AttachedPayment(aj(), gr)])
1640+ if ((iI == iI))
17161641 then {
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))
1642+ let ih = invoke(an(), "notifyNotional", [bT, fg], nil)
1643+ if ((ih == ih))
1644+ then ((((if (iA)
1645+ then gP(bT, fe, fn, fg, fh, bI())
1646+ else hc(bT)) ++ gV(cE, cF, eQ, ia, ib, ic, hT, hU)) ++ hd(bK.caller, iG)) ++ hg(iH))
17221647 else throw("Strict value is not equal to itself.")
17231648 }
17241649 else throw("Strict value is not equal to itself.")
17251650 }
17261651 else throw("Strict value is not equal to itself.")
17271652 }
17281653 else throw("Strict value is not equal to itself.")
17291654 }
17301655 }
17311656 else throw("Strict value is not equal to itself.")
17321657 }
17331658
17341659
17351660
1736-@Callable(bP)
1661+@Callable(bK)
17371662 func payFunding () = {
1738- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((il == il))
1663+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1664+ if ((hB == hB))
17401665 then {
1741- let jt = bu()
1742- if (if (if ((jt > bN()))
1666+ let iJ = bp()
1667+ if (if (if ((iJ > bI()))
17431668 then true
1744- else !(cr()))
1669+ else !(cm()))
17451670 then true
1746- else cs())
1747- then throw(((("Invalid funding block timestamp: " + toString(bN())) + " < ") + toString(jt)))
1671+ else cn())
1672+ then throw(((("Invalid funding block timestamp: " + toString(bI())) + " < ") + toString(iJ)))
17481673 else {
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))
1674+ let fM = dx()
1675+ let iK = fL()
1676+ let fP = iK._1
1677+ let fQ = iK._2
1678+ let fT = iK._3
1679+ let iL = if ((fT > 0))
17551680 then {
1756- let jv = invoke(ar(), "exchangeFreeAndLocked", [-(gw)], nil)
1757- if ((jv == jv))
1681+ let iL = invoke(am(), "exchangeFreeAndLocked", [-(fT)], nil)
1682+ if ((iL == iL))
17581683 then nil
17591684 else throw("Strict value is not equal to itself.")
17601685 }
17611686 else nil
1762- if ((jv == jv))
1763- then hi((jt + bx()), (bF() + gt), (bG() + gs), aN(gt, gp), aN(gs, gp))
1687+ if ((iL == iL))
1688+ then gF((iJ + bs()), (bA() + fQ), (bB() + fP), aI(fQ, fM), aI(fP, fM))
17641689 else throw("Strict value is not equal to itself.")
17651690 }
17661691 }
17671692 else throw("Strict value is not equal to itself.")
17681693 }
17691694
17701695
17711696
1772-@Callable(bP)
1697+@Callable(bK)
17731698 func syncTerminalPriceToOracle () = {
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())
1699+ let cw = bh()
1700+ let cx = bi()
1701+ let iM = fG(dx(), cw, cx)
1702+ let hp = iM._1
1703+ let hq = iM._2
1704+ let fK = iM._3
1705+ let iN = if (if ((0 > fK))
1706+ then (aN(fK) > bd())
17821707 else false)
1783- then -(bi())
1784- else gn
1785- let ib = if ((jx != 0))
1708+ then -(bd())
1709+ else fK
1710+ let hr = if ((iN != 0))
17861711 then {
1787- let ib = invoke(ar(), "exchangeFreeAndLocked", [jx], nil)
1788- if ((ib == ib))
1712+ let hr = invoke(am(), "exchangeFreeAndLocked", [iN], nil)
1713+ if ((hr == hr))
17891714 then nil
17901715 else throw("Strict value is not equal to itself.")
17911716 }
17921717 else nil
1793- if ((ib == ib))
1794- then ((hQ((bi() + jx)) ++ hE(hZ, ia)) ++ hw(aN(aP(cB, hZ), aP(cC, ia))))
1718+ if ((hr == hr))
1719+ then (hg((bd() + iN)) ++ gU(hp, hq))
17951720 else throw("Strict value is not equal to itself.")
17961721 }
17971722
17981723
17991724
1800-@Callable(bP)
1801-func ensureCalledOnce () = if ((bP.caller != this))
1725+@Callable(bK)
1726+func ensureCalledOnce () = if ((bK.caller != this))
18021727 then throw("Invalid saveCurrentTxId parameters")
18031728 else {
1804- let jy = valueOrElse(getString(this, X), "")
1805- if ((jy != toBase58String(bP.transactionId)))
1806- then [StringEntry(X, jy)]
1729+ let iO = valueOrElse(getString(this, S), "")
1730+ if ((iO != toBase58String(bK.transactionId)))
1731+ then [StringEntry(S, iO)]
18071732 else throw("Can not call vAMM methods twice in one tx")
18081733 }
18091734
18101735
18111736
1812-@Callable(bP)
1813-func view_calcRemainMarginWithFundingPayment (bY) = {
1814- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1815- if ((il == il))
1737+@Callable(bK)
1738+func view_calcRemainMarginWithFundingPayment (bT) = {
1739+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1740+ if ((hB == hB))
18161741 then {
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)))
1742+ let iP = bS(bT)
1743+ let bW = iP._1
1744+ let ef = iP._2
1745+ let eo = iP._3
1746+ let eh = iP._4
1747+ let eq = iP._5
1748+ let iQ = ed(bT, aC)
1749+ let dY = iQ._1
1750+ let ec = iQ._2
1751+ let iR = cW(bW, ef, eh, eq, ec)
1752+ let de = iR._1
1753+ let df = iR._2
1754+ let da = iR._3
1755+ let cV = iR._4
1756+ throw(((((((aG(de) + aG(da)) + aG(et(bT))) + aG(ec)) + aG(df)) + aG(dY)) + aG(cV)))
18321757 }
18331758 else throw("Strict value is not equal to itself.")
18341759 }
18351760
18361761
18371762
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))
1763+@Callable(bK)
1764+func view_getPegAdjustCost (iS) = {
1765+ let cw = bh()
1766+ let cx = bi()
1767+ let fF = fG(iS, cw, cx)
1768+ throw(toString(fF._3))
18441769 }
18451770
18461771
18471772
1848-@Callable(bP)
1773+@Callable(bK)
18491774 func view_getTerminalAmmPrice () = {
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))
1775+ let iT = fo()
1776+ let fs = iT._1
1777+ let ft = iT._2
1778+ let hk = aI(aK(fs, bj()), aK(ft, bk()))
1779+ throw(toString(hk))
18551780 }
18561781
18571782
18581783
1859-@Callable(bP)
1784+@Callable(bK)
18601785 func view_getFunding () = {
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)))
1786+ let fM = dx()
1787+ let iU = fL()
1788+ let fP = iU._1
1789+ let fQ = iU._2
1790+ let fT = iU._3
1791+ let iV = aI(fQ, fM)
1792+ let iW = aI(fP, fM)
1793+ throw(((((aG(iV) + aG(iW)) + aG(dR())) + aG(dx())) + aG(fT)))
18691794 }
18701795
18711796
18721797
1873-@Callable(bP)
1798+@Callable(bK)
18741799 func computeSpotPrice () = {
1875- let il = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1876- if ((il == il))
1800+ let hB = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1801+ if ((hB == hB))
18771802 then {
1878- let gi = dW()
1879- $Tuple2(nil, gi)
1803+ let fF = dR()
1804+ $Tuple2(nil, fF)
18801805 }
18811806 else throw("Strict value is not equal to itself.")
18821807 }
18831808
18841809
18851810
1886-@Callable(bP)
1887-func computeFeeForTraderWithArtifact (bY,gy) = {
1888- let gi = gK(bY, gy)
1889- $Tuple2(nil, gi)
1811+@Callable(bK)
1812+func computeFeeForTraderWithArtifact (bT,fV) = {
1813+ let fF = gh(bT, fV)
1814+ $Tuple2(nil, fF)
18901815 }
18911816
18921817
1893-@Verifier(jG)
1894-func jH () = {
1895- let jI = getString(this, Y)
1896- if (isDefined(jI))
1818+@Verifier(iX)
1819+func iY () = {
1820+ let iZ = getString(this, T)
1821+ if (isDefined(iZ))
18971822 then {
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)
1823+ let ja = getString(addressFromStringValue(value(iZ)), V)
1824+ if (isDefined(ja))
1825+ then valueOrElse(getBoolean(addressFromStringValue(value(ja)), ((("status_" + toString(this)) + "_") + toBase58String(iX.id))), false)
19011826 else throw("unable to verify: admin not set in coordinator")
19021827 }
1903- else sigVerify(jG.bodyBytes, jG.proofs[0], jG.senderPublicKey)
1828+ else sigVerify(iX.bodyBytes, iX.proofs[0], iX.senderPublicKey)
19041829 }
19051830

github/deemru/w8io/873ac7e 
864.99 ms