tx · BudZemgSDq2sY2fKioSTGwrpGrYqF5aCLs3E6fjXk8c9

3Mp3uUKsY4LnTo3j4N7dJAfqRfMJ6Rgr35Q:  -0.07500000 Waves

2022.12.13 16:01 [2358575] smart account 3Mp3uUKsY4LnTo3j4N7dJAfqRfMJ6Rgr35Q > SELF 0.00000000 Waves

{ "type": 13, "id": "BudZemgSDq2sY2fKioSTGwrpGrYqF5aCLs3E6fjXk8c9", "fee": 7500000, "feeAssetId": null, "timestamp": 1670936467035, "version": 2, "chainId": 84, "sender": "3Mp3uUKsY4LnTo3j4N7dJAfqRfMJ6Rgr35Q", "senderPublicKey": "EiYReiiFX6CXEuz35wibBnvZ8LjJHZrgFwR73fomjgzy", "proofs": [ "5BFzK76gAUbjPAmu9i3QRq4kok7xYNZiubaNbrcsZnDoJe23fZCKobNBGP2gLiArPVAeuZM8ybyThutjFaaowsL9" ], "script": "base64:BgJ6CAISABIAEgASABIDCgEBEgMKAQESDgoMAQEBAQEBAQEBAQEBEhQKEgEBAQEBAQEICAgIAQEBAQEBARIFCgMBAQESBgoEAQEBCBIAEgMKAQESBAoCAQESAwoBCBIAEgASAwoBCBIDCgEBEgASABIDCgEIEgASBAoCCAjAAQAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AAVrX29yYQIFa19vcmEACWtfYmFsYW5jZQIJa19iYWxhbmNlAAprX3NlcXVlbmNlAgprX3NlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UAD2tfcG9zaXRpb25Bc3NldAIPa19wb3NpdGlvbkFzc2V0AA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19sYXN0RGF0YVN0cgINa19sYXN0RGF0YVN0cgAOa19sYXN0TWludXRlSWQCDmtfbGFzdE1pbnV0ZUlkAB1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UAE2tfdHdhcERhdGFMYXN0UHJpY2UCE2tfdHdhcERhdGFMYXN0UHJpY2UAGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAhprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAD2tfdmF1bHRfYWRkcmVzcwIPa192YXVsdF9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfcXVvdGVfc3Rha2luZwIPa19xdW90ZV9zdGFraW5nABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwAUa19jb2xsYXRlcmFsX2FkZHJlc3MCFGtfY29sbGF0ZXJhbF9hZGRyZXNzABJrX2V4Y2hhbmdlX2FkZHJlc3MCEmtfZXhjaGFuZ2VfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MAIGtfdHJhZGVyX21hcmtldF9hc3NldF9jb2xsYXRlcmFsAiBrX3RyYWRlcl9tYXJrZXRfYXNzZXRfY29sbGF0ZXJhbAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ5hZG1pblB1YmxpY0tleQAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19hZG1pbl9wdWJsaWNfa2V5AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX3F1b3RlX3N0YWtpbmcCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0ARFjb2xsYXRlcmFsQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRRrX2NvbGxhdGVyYWxfYWRkcmVzcwIaQ29sbGF0ZXJhbCBNYW5hZ2VyIG5vdCBzZXQBC3N3YXBBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABRJrX2V4Y2hhbmdlX2FkZHJlc3MCD05vIHN3YXAgYWRkcmVzcwIUSW52YWxpZCBzd2FwIGFkZHJlc3MAEWtfd2hpdGVsaXN0X2Fzc2V0AhFrX3doaXRlbGlzdF9hc3NldAEQaXNXaGl0ZWxpc3RBc3NldAEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEWNvbGxhdGVyYWxBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgURa193aGl0ZWxpc3RfYXNzZXQFCF9hc3NldElkBwANa190b2tlbl9wYXJhbQINa190b2tlbl9wYXJhbQAMa190b2tlbl90eXBlAgxrX3Rva2VuX3R5cGUAGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQINZmVlX3JlZHVjdGlvbgAIRElSX0xPTkcAAQAJRElSX1NIT1JUAAIADVRXQVBfSU5URVJWQUwADwAPT1JBQ0xFX0lOVEVSVkFMAA8AB1NFQ09ORFMA6AcAD0RFQ0lNQUxfTlVNQkVSUwAGAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBXNxcnRkAQJfeAkBBHNxcnQEBQJfeAUPREVDSU1BTF9OVU1CRVJTBQ9ERUNJTUFMX05VTUJFUlMFCEhBTEZFVkVOAQRwb3dkAgJfeAJfeQkAbAYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQZic3FydGQBAl94CQEKc3FydEJpZ0ludAQFAl94BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BBWJwb3dkAgJfeAJfeQkAdgYFAl94BQ9ERUNJTUFMX05VTUJFUlMFAl95BQ9ERUNJTUFMX05VTUJFUlMFD0RFQ0lNQUxfTlVNQkVSUwUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBAg5JbnZhbGlkIG1hcmdpbgMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBAg5JbnZhbGlkIG1hcmdpbgYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCWCgQFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAlgoEAAAAAAAAAAABEGdldFBvc2l0aW9uQXNzZXQBB190cmFkZXIEEHBvc2l0aW9uQXNzZXRPcHQJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUPa19wb3NpdGlvbkFzc2V0BQdfdHJhZGVyBAckbWF0Y2gwBRBwb3NpdGlvbkFzc2V0T3B0AwkAAQIFByRtYXRjaDACBlN0cmluZwQNcG9zaXRpb25Bc3NldAUHJG1hdGNoMAUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQljbG9zZU9ubHkACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFC2tfY2xvc2VPbmx5BwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQBDWNhbGNJbnZhcmlhbnQEB19xdEFzdFIHX3F0QXN0VwdfYnNBc3RSB19ic0FzdFcEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYnF0QXN0VwkAtgIBBQdfcXRBc3RXBAdiYnNBc3RSCQC2AgEFB19ic0FzdFIEB2Jic0FzdFcJALYCAQUHX2JzQXN0VwkBBWJtdWxkAgkBBWJtdWxkAgUHYnF0QXN0UgUHYnF0QXN0VwkBBWJtdWxkAgUHYmJzQXN0UgUHYmJzQXN0VwEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAFrCQENY2FsY0ludmFyaWFudAQFB19xdEFzdFIFB19xdEFzdFcFB19ic0FzdFIFB19ic0FzdFcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQZfaXNBZGQJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBCQEEbXVsZAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFB19xdEFzdFcEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBBGRpdmQCCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgUHX3F0QXN0VwQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNjk0NjE3MTA5CQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjk0NjE3MTA5Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY5NDYxNzEwOQJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjk0NjE3MTA5Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BBBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCBQxfbWFyZ2luRGVsdGEFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4NTk2MTg3MjMDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg1OTYxODcyMwJfMQQHYmFkRGVidAgFDSR0MDE4NTk2MTg3MjMCXzIJAJUKAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAQFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBCQEEbXVsZAIFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgUQX2Jhc2VBc3NldFdlaWdodAQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE5OTExMjAwNzIJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5OTExMjAwNzICXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxOTkxMTIwMDcyAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE5OTExMjAwNzICXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQQIYmxvY2tLZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5AgADCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sIBQlsYXN0QmxvY2sGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQtvcmFjbGVQcmljZQUKcHJpY2VBZnRlcgkAaAIAAgUMREVDSU1BTF9VTklUBAxhYnNQcmljZURpZmYJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUKcHJpY2VBZnRlcgUMYXZlcmFnZVByaWNlAwkAZgIFDGFic1ByaWNlRGlmZgkBDm1heFByaWNlU3ByZWFkAAkAAgEJAKwCAgkArAICCQCsAgICDVByaWNlIHNwcmVhZCAJAKQDAQUMYWJzUHJpY2VEaWZmAhQgPiBtYXggcHJpY2Ugc3ByZWFkIAkApAMBCQEObWF4UHJpY2VTcHJlYWQABgEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCEV9sb25nT3Blbk5vdGlvbmFsEl9zaG9ydE9wZW5Ob3Rpb25hbAQQX21heE9wZW5Ob3Rpb25hbAkBD21heE9wZW5Ob3Rpb25hbAADCQBmAgURX2xvbmdPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAAIBCQCsAgIJAKwCAgkArAICAhNMb25nIG9wZW4gbm90aW9uYWwgCQCkAwEFEV9sb25nT3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAMJAGYCBRJfc2hvcnRPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAAIBCQCsAgIJAKwCAgkArAICAhRTaG9ydCBvcGVuIG5vdGlvbmFsIAkApAMBBRJfc2hvcnRPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsBgEMZ2V0U3BvdFByaWNlAAQSX3F1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RSAAQRX2Jhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABAtvcmFjbGVQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDI0MjMxMjQ0NTEJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI0MjMxMjQ0NTECXzEEAngxCAUNJHQwMjQyMzEyNDQ1MQJfMgQCeDIIBQ0kdDAyNDIzMTI0NDUxAl8zBAJ4MwgFDSR0MDI0MjMxMjQ0NTECXzQFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQESZ2V0T3JhY2xlVHdhcFByaWNlAAUQcG9zaXRpb25Ob3Rpb25hbAErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcNX3Bvc2l0aW9uU2l6ZRVfcG9zaXRpb25PcGVuTm90aW9uYWwSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQHX29wdGlvbgMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBgUNX3Bvc2l0aW9uU2l6ZQUHX29wdGlvbgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQEDXVucmVhbGl6ZWRQbmwDBQdpc1Nob3J0CQBlAgUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBRBwb3NpdGlvbk5vdGlvbmFsCQBlAgUQcG9zaXRpb25Ob3Rpb25hbAUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsCQCUCgIFEHBvc2l0aW9uTm90aW9uYWwFDXVucmVhbGl6ZWRQbmwBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgdfdHJhZGVyB19vcHRpb24EDSR0MDI1ODc2MjYwMDQJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI1ODc2MjYwMDQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjU4NzYyNjAwNAJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyNTg3NjI2MDA0Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI1ODc2MjYwMDQCXzQJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUMcG9zaXRpb25TaXplBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwAFB19vcHRpb24BD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgdfdHJhZGVyB19vcHRpb24EDSR0MDI2NTE3MjY2MjgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDI2NTE3MjY2MjgCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjY1MTcyNjYyOAJfMgQDcG9uCAUNJHQwMjY1MTcyNjYyOAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyNjUxNzI2NjI4Al80BA0kdDAyNjYzNDI2NzI3CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjY2MzQyNjcyNwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDI2NjM0MjY3MjcCXzIEDSR0MDI2NzMyMjY4OTgJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI2NzMyMjY4OTgCXzEEB2JhZERlYnQIBQ0kdDAyNjczMjI2ODk4Al8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwEHX3RyYWRlcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIHX3RyYWRlcg1fcG9zaXRpb25TaXplBAxtYXhpbXVtUmF0aW8JAQR2bWF4AgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzcDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBwJfMQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgdfdHJhZGVyFF9jaGVja01heFByaWNlSW1wYWN0BA0kdDAyODEzODI4MjY2CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAyODEzODI4MjY2Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI4MTM4MjgyNjYCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjgxMzgyODI2NgJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyODEzODI4MjY2Al80BA11bnJlYWxpemVkUG5sCAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UAl8yBA0kdDAyODM2MTI4NTI5CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyODM2MTI4NTI5Al8xBAdiYWREZWJ0CAUNJHQwMjgzNjEyODUyOQJfMgQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEBLQEFDHBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwFDXVucmVhbGl6ZWRQbmwEDW1hcmdpblRvVmF1bHQJAQEtAQUMcmVtYWluTWFyZ2luBA0kdDAyODY1NjI4OTMwCQEKc3dhcE91dHB1dAMJAGYCBQxwb3NpdGlvblNpemUAAAkBA2FicwEFDHBvc2l0aW9uU2l6ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDAyODY1NjI4OTMwAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMjg2NTYyODkzMAJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMjg2NTYyODkzMAJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDI4NjU2Mjg5MzACXzQEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMjg2NTYyODkzMAJfNQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwMjg2NTYyODkzMAJfNgQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQCfCg0FFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQUHYmFkRGVidAULcmVhbGl6ZWRQbmwFDW1hcmdpblRvVmF1bHQFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQxwb3NpdGlvblNpemUAAAUUcG9zaXRpb25PcGVuTm90aW9uYWwAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsAAABEGdldFR3YXBTcG90UHJpY2UABAhtaW51dGVJZAkAaQIJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwA8BA1zdGFydE1pbnV0ZUlkCQBlAgUIbWludXRlSWQFDVRXQVBfSU5URVJWQUwEB2xpc3RTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABARsaXN0CQC1CQIFB2xpc3RTdHICASwKAQhmaWx0ZXJGbgILYWNjdW11bGF0b3IEbmV4dAMJAGcCBQ1zdGFydE1pbnV0ZUlkCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQJAM0IAgULYWNjdW11bGF0b3IJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAULYWNjdW11bGF0b3IEBWxpc3RGCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbHRlckZuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQECG1heEluZGV4AwkAZgIJAJADAQUFbGlzdEYAAAkAlgMBBQVsaXN0RgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxpc3QAAAQMbGFzdE1pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtfbGFzdE1pbnV0ZUlkAAAEFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABAxlbmRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEEm5vd0N1bXVsYXRpdmVQcmljZQkAZAIFFmVuZExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUMZW5kTGFzdFByaWNlBBhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEDnN0YXJ0TGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFCG1heEluZGV4AAAEFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlCQBkAgUYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFDXN0YXJ0TWludXRlSWQFCG1heEluZGV4BQ5zdGFydExhc3RQcmljZQkAaQIJAGUCBRJub3dDdW11bGF0aXZlUHJpY2UFFHN0YXJ0Q3VtdWxhdGl2ZVByaWNlBQ1UV0FQX0lOVEVSVkFMARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAJAJQKAgkBBnF0QXN0UgAJAQZic0FzdFIABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEDSR0MDMxMDUzMzEyMzIJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgFDSR0MDMxMDUzMzEyMzICXzEEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDAzMTA1MzMxMjMyAl8yBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDAzMTA1MzMxMjMyAl8zCQCUCgIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQETZ2V0UXVvdGVBc3NldFdlaWdodAQQYmFzZUFzc2V0UmVzZXJ2ZRF0b3RhbFBvc2l0aW9uU2l6ZRFxdW90ZUFzc2V0UmVzZXJ2ZQt0YXJnZXRQcmljZQQBYgkAtgIBBRBiYXNlQXNzZXRSZXNlcnZlBAJzegkAtgIBBRF0b3RhbFBvc2l0aW9uU2l6ZQQBcQkAtgIBBRFxdW90ZUFzc2V0UmVzZXJ2ZQQBcAkAtgIBBQt0YXJnZXRQcmljZQQDYnMyCQEFYnBvd2QCCQC3AgIFAWIFAnN6CQC2AgEJAGgCAAIFDERFQ0lNQUxfVU5JVAQEcWJzMgkBBWJtdWxkAgUBcQUDYnMyBANwczQJALkCAgkAtgIBAAQJAQVibXVsZAIFAXAFAnN6BANzcXIJAQZic3FydGQBCQEFYm11bGQCBQRxYnMyCQC4AgIFAXEFA3BzNAQCYnEJAQVibXVsZAIFAWIFAXEEAnFzCQEFYm11bGQCBQFxBQJzegQDdG9wCQC3AgIJALcCAgkAvgIBBQNzcXIFAmJxBQJxcwQDYm90CQC5AgIJALYCAQACCQEFYm11bGQCBQFxBQJzegQGcmVzdWx0CQEFYmRpdmQCBQN0b3AFA2JvdAkAoAMBBQZyZXN1bHQBFGdldFN5bmNUZXJtaW5hbFByaWNlAQ5fdGVybWluYWxQcmljZQQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAECW5ld1F0QXN0VwkBE2dldFF1b3RlQXNzZXRXZWlnaHQEBQdfYnNBc3RSBQ1fcG9zaXRpb25TaXplBQdfcXRBc3RSBQ5fdGVybWluYWxQcmljZQQJbmV3QnNBc3RXBQxERUNJTUFMX1VOSVQEDW1hcmdpblRvVmF1bHQICQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDV9wb3NpdGlvblNpemUFFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQUHX3F0QXN0UgUJbmV3UXRBc3RXBQdfYnNBc3RSBQluZXdCc0FzdFcFD1BOTF9PUFRJT05fU1BPVAJfMgkAlQoDBQluZXdRdEFzdFcFCW5ld0JzQXN0VwUNbWFyZ2luVG9WYXVsdAEKZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBEmdldE9yYWNsZVR3YXBQcmljZQAEDXNwb3RUd2FwUHJpY2UJARBnZXRUd2FwU3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFDXNwb3RUd2FwUHJpY2UFD3VuZGVybHlpbmdQcmljZQMDCQAAAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAAAGCQAAAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAkAlAoCAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQCUCgIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAQ5nZXRBZGp1c3RlZEZlZQILX2FydGlmYWN0SWQQX2Jhc2VGZWVEaXNjb3VudAQKYmFzZUZlZVJhdwkBA2ZlZQAEB2Jhc2VGZWUJAQRtdWxkAgUKYmFzZUZlZVJhdwUQX2Jhc2VGZWVEaXNjb3VudAQNJHQwMzQzMzEzNDgyNgMJAQIhPQIFC19hcnRpZmFjdElkAgAEDGFydGlmYWN0S2luZAkBBHN0ckECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQxrX3Rva2VuX3R5cGUFC19hcnRpZmFjdElkAwkAAAIFDGFydGlmYWN0S2luZAUYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFBAlyZWR1Y3Rpb24JAQRpbnRBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUNa190b2tlbl9wYXJhbQULX2FydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDM0MzMxMzQ4MjYCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDM0MzMxMzQ4MjYCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEXaXNTYW1lQXNzZXRPck5vUG9zaXRpb24CB190cmFkZXIIX2Fzc2V0SWQED29sZFBvc2l0aW9uU2l6ZQgJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEDCQAAAgUPb2xkUG9zaXRpb25TaXplAAAGCQAAAgkBEGdldFBvc2l0aW9uQXNzZXQBBQdfdHJhZGVyBQhfYXNzZXRJZAELaXNTYW1lQXNzZXQCB190cmFkZXIIX2Fzc2V0SWQJAAACCQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIFCF9hc3NldElkAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDBF9hbW0IX2Fzc2V0SWQHX3RyYWRlcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUga190cmFkZXJfbWFya2V0X2Fzc2V0X2NvbGxhdGVyYWwCAV8FBF9hbW0CAV8FCF9hc3NldElkAgFfBQdfdHJhZGVyARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQdfdHJhZGVyBA1wb3NpdGlvbkFzc2V0CQEQZ2V0UG9zaXRpb25Bc3NldAEFB190cmFkZXIDCQAAAgUNcG9zaXRpb25Bc3NldAkA2AQBCQEKcXVvdGVBc3NldAAJAJQKAgAABQ1wb3NpdGlvbkFzc2V0BANrZXkJAR5nZXRCb3Jyb3dlZEJ5VHJhZGVySW5NYXJrZXRLZXkDCQClCAEFBHRoaXMFDXBvc2l0aW9uQXNzZXQFB190cmFkZXIEBmJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkAmggCCQERY29sbGF0ZXJhbEFkZHJlc3MABQNrZXkAAAkAlAoCBQZib3Jyb3cFDXBvc2l0aW9uQXNzZXQBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQQZG9HZXRGZWVEaXNjb3VudAkA/AcECQEMbWluZXJBZGRyZXNzAAISY29tcHV0ZUZlZURpc2NvdW50CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFEGRvR2V0RmVlRGlzY291bnQFEGRvR2V0RmVlRGlzY291bnQEC2ZlZURpc2NvdW50BAckbWF0Y2gwBRBkb0dldEZlZURpc2NvdW50AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECIUludmFsaWQgY29tcHV0ZUZlZURpc2NvdW50IHJlc3VsdAQNJHQwMzYwNTczNjEzMQkBDmdldEFkanVzdGVkRmVlAgULX2FydGlmYWN0SWQFC2ZlZURpc2NvdW50BAthZGp1c3RlZEZlZQgFDSR0MDM2MDU3MzYxMzECXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDM2MDU3MzYxMzECXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0QXJ0aWZhY3RJZAEBaQQKYXJ0aWZhY3RJZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEkludmFsaWQgYXJ0aWZhY3RJZAIABQphcnRpZmFjdElkAQ1kaXN0cmlidXRlRmVlAQpfZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMJAQRtdWxkAgUKX2ZlZUFtb3VudAkBE2ZlZVRvU3Rha2Vyc1BlcmNlbnQABApmZWVUb1ZhdWx0CQBlAgUKX2ZlZUFtb3VudAUMZmVlVG9TdGFrZXJzCQCUCgIFDGZlZVRvU3Rha2VycwUKZmVlVG9WYXVsdAEOdXBkYXRlU2V0dGluZ3MMEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19pbml0TWFyZ2luUmF0aW8FEF9pbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19tYXhPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4T3JhY2xlRGVsYXkFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBE3VwZGF0ZVBvc2l0aW9uQXNzZXQCCF9hZGRyZXNzCF9hc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFD2tfcG9zaXRpb25Bc3NldAUIX2FkZHJlc3MFCF9hc3NldElkBQNuaWwBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXICDWlzTmV3UG9zaXRpb24IX2FkZHJlc3MDBQ1pc05ld1Bvc2l0aW9uBA9jdXJyZW50U2VxdWVuY2UJAQxsYXN0U2VxdWVuY2UACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFCF9hZGRyZXNzCQBkAgUPY3VycmVudFNlcXVlbmNlAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtfc2VxdWVuY2UJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBQhfYWRkcmVzcwVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FCF9hZGRyZXNzBQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQNuaWwBCmFwcGVuZFR3YXABBl9wcmljZQQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQZfcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFCXByZXZQcmljZQQEbGlzdAkBC3B1c2hUb1F1ZXVlAwkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABQ1UV0FQX0lOVEVSVkFMCQCkAwEFCG1pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19sYXN0TWludXRlSWQFCG1pbnV0ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfbGFzdERhdGFTdHIJAQlsaXN0VG9TdHIBBQRsaXN0BQNuaWwEGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAkApAMBBQhtaW51dGVJZAAABBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFBl9wcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUGX3ByaWNlBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwJAQphcHBlbmRUd2FwAQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ9rX3Bvc2l0aW9uQXNzZXQFCF9hZGRyZXNzBQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEBaQMJAGYCAAAFAWkJAAIBAgdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFAWkFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwXAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFBXByaWNlBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIBaQEPcmVtb3ZlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAh5JbnZhbGlkIHJlbW92ZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFBXByaWNlBAtxdEFzdFJBZnRlcgkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BAtic0FzdFJBZnRlcgkAZQIFB19ic0FzdFIFF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIBaQEOY2hhbmdlU2V0dGluZ3MMEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIGNoYW5nZVNldHRpbmdzIHBhcmFtcwkBDnVwZGF0ZVNldHRpbmdzDAUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkBaQEKaW5pdGlhbGl6ZRIHX3F0QXN0UgdfYnNBc3RSDl9mdW5kaW5nUGVyaW9kEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbwRfZmVlB19vcmFjbGUKX29yYWNsZUtleQ9fb3JhY2xlQmxvY2tLZXkMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZwIAAAUPX21heE9yYWNsZURlbGF5BgkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0IBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAAACQEOdXBkYXRlU2V0dGluZ3MMBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQkBDXVwZGF0ZUZ1bmRpbmcFCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAJAQ11cGRhdGVCYWxhbmNlAQAACQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgkAzAgCCQELU3RyaW5nRW50cnkCBQVrX29yYQUHX29yYWNsZQkAzAgCCQELU3RyaW5nRW50cnkCBQlrX29yYV9rZXkFCl9vcmFjbGVLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa19vcmFfYmxvY2tfa2V5BQ9fb3JhY2xlQmxvY2tLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MFDF9jb29yZGluYXRvcgUDbmlsAWkBEGRlY3JlYXNlUG9zaXRpb24DB19hbW91bnQJX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQZwYXVzZWQACQACAQIjSW52YWxpZCBkZWNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDQ4NjcwNDg4MTAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDQ4NjcwNDg4MTACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNDg2NzA0ODgxMAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0ODY3MDQ4ODEwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDQ4NjcwNDg4MTACXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDQ4OTgzNDkwODcJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDQ4OTgzNDkwODcCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA0ODk4MzQ5MDg3Al8yBA0kdDA0OTA5MzUxNzUxAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAQNJHQwNDk1MDg0OTY5MgkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDQ5NTA4NDk2OTICXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0OTUwODQ5NjkyAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0OTUwODQ5NjkyAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNDk1MDg0OTY5MgJfNAQYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwcJAAIBCQCsAgIJAKwCAgkArAICAiVUb28gbGl0dGxlIGJhc2UgYXNzZXQgZXhjaGFuZ2VkLCBnb3QgCQCkAwEFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwIKIGV4cGVjdGVkIAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BAtyZWFsaXplZFBubAkBBGRpdmQCCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQNJHQwNTAxMjk1MDM3NAkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDUwMTI5NTAzNzQCXzEEB2JhZERlYnQIBQ0kdDA1MDEyOTUwMzc0Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDUwMTI5NTAzNzQCXzMEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFDG9wZW5Ob3Rpb25hbAQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkAngoMBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA0OTA5MzUxNzUxAl8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDQ5MDkzNTE3NTECXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDkwOTM1MTc1MQJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA0OTA5MzUxNzUxAl80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA0OTA5MzUxNzUxAl81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDkwOTM1MTc1MQJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQ5MDkzNTE3NTECXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0OTA5MzUxNzUxAl84BA50b3RhbExvbmdBZnRlcggFDSR0MDQ5MDkzNTE3NTECXzkED3RvdGFsU2hvcnRBZnRlcggFDSR0MDQ5MDkzNTE3NTEDXzEwBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDQ5MDkzNTE3NTEDXzExBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA0OTA5MzUxNzUxA18xMgQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQEOdXBkYXRlUG9zaXRpb24FBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQaW5jcmVhc2VQb3NpdGlvbgQKX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluawQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQABBFpc0NvbGxhdGVyYWxBc3NldAkBEGlzV2hpdGVsaXN0QXNzZXQBBQtfYXNzZXRJZFN0cgMDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgMJAQEhAQUMaXNRdW90ZUFzc2V0CQEBIQEFEWlzQ29sbGF0ZXJhbEFzc2V0BwYJAQEhAQkBF2lzU2FtZUFzc2V0T3JOb1Bvc2l0aW9uAgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA1MzE4OTUzMjc0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDUzMTg5NTMyNzQCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDUzMTg5NTMyNzQCXzIEDHJhd0ZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50BQthZGp1c3RlZEZlZQQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFDHJhd0ZlZUFtb3VudAQTZGlzdHJpYnV0ZUZlZUFtb3VudAMFEWlzQ29sbGF0ZXJhbEFzc2V0BAhkb0JvcnJvdwkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAgZib3Jyb3cJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhfYXNzZXRJZAUHX2Ftb3VudAUDbmlsAwkAAAIFCGRvQm9ycm93BQhkb0JvcnJvdwQNYmFsYW5jZUJlZm9yZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQxyYXdGZWVBbW91bnQFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgQPZXhjaGFuZ2VkQW1vdW50CQBlAgUMYmFsYW5jZUFmdGVyBQ1iYWxhbmNlQmVmb3JlAwkAAAIFD2V4Y2hhbmdlZEFtb3VudAUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FDHJhd0ZlZUFtb3VudAMJAAACBRNkaXN0cmlidXRlRmVlQW1vdW50BRNkaXN0cmlidXRlRmVlQW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDU0NTkwNTQ3MzAJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDU0NTkwNTQ3MzACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTQ1OTA1NDczMAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1NDU5MDU0NzMwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDU0NTkwNTQ3MzACXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA1NTAxOTU4MDYwAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTU0ODE1NTY1NAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDU1NDgxNTU2NTQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NTQ4MTU1NjU0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1NTQ4MTU1NjU0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNTU0ODE1NTY1NAJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABBlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50CQEEZGl2ZAIFDG9wZW5Ob3Rpb25hbAUJX2xldmVyYWdlBA0kdDA1NjI2MjU2NTAxCQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRlpbmNyZWFzZU1hcmdpblJlcXVpcmVtZW50BAxyZW1haW5NYXJnaW4IBQ0kdDA1NjI2MjU2NTAxAl8xBAJ4MQgFDSR0MDU2MjYyNTY1MDECXzIEAngyCAUNJHQwNTYyNjI1NjUwMQJfMwMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCeCgwFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNTc3NjA1Nzg3NgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDU3NzYwNTc4NzYCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA1Nzc2MDU3ODc2Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTUwMTk1ODA2MAJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1NTAxOTU4MDYwAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU1MDE5NTgwNjACXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTUwMTk1ODA2MAJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTUwMTk1ODA2MAJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDU1MDE5NTgwNjACXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1NTAxOTU4MDYwAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTUwMTk1ODA2MAJfOAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1NTAxOTU4MDYwAl85BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1NTAxOTU4MDYwA18xMAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1NTAxOTU4MDYwA18xMQQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTUwMTk1ODA2MANfMTIEDSR0MDU4MDY2NTgxMjMJAQ1kaXN0cmlidXRlRmVlAQUJZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMIBQ0kdDA1ODA2NjU4MTIzAl8xBApmZWVUb1ZhdWx0CAUNJHQwNTgwNjY1ODEyMwJfMgQFc3Rha2UDBQxpc1F1b3RlQXNzZXQEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgIFDWlzTmV3UG9zaXRpb24FB190cmFkZXIJARN1cGRhdGVQb3NpdGlvbkFzc2V0AgUHX3RyYWRlcgULX2Fzc2V0SWRTdHIJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAQRaXNDb2xsYXRlcmFsQXNzZXQJARBpc1doaXRlbGlzdEFzc2V0AQULX2Fzc2V0SWRTdHIDAwMDAwMDCQEBIQEFDGlzUXVvdGVBc3NldAkBASEBBRFpc0NvbGxhdGVyYWxBc3NldAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpc1NhbWVBc3NldAIFB190cmFkZXIFC19hc3NldElkU3RyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDYwMDcxNjAxNTYJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyCQENZ2V0QXJ0aWZhY3RJZAEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNjAwNzE2MDE1NgJfMQQMYnVybkFydGlmYWN0CAUNJHQwNjAwNzE2MDE1NgJfMgQMcmF3RmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQFC2FkanVzdGVkRmVlBAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUMcmF3RmVlQW1vdW50BBNkaXN0cmlidXRlRmVlQW1vdW50AwURaXNDb2xsYXRlcmFsQXNzZXQECGRvQm9ycm93CQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACBmJvcnJvdwkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCF9hc3NldElkBQdfYW1vdW50BQNuaWwDCQAAAgUIZG9Cb3Jyb3cFCGRvQm9ycm93BA1iYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAAACBQ1iYWxhbmNlQmVmb3JlBQ1iYWxhbmNlQmVmb3JlBAZkb1N3YXAJAPwHBAkBC3N3YXBBZGRyZXNzAAIEc3dhcAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIX2Fzc2V0SWQFDHJhd0ZlZUFtb3VudAUDbmlsAwkAAAIFBmRvU3dhcAUGZG9Td2FwBAxiYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAAAIFDGJhbGFuY2VBZnRlcgUMYmFsYW5jZUFmdGVyBA9leGNoYW5nZWRBbW91bnQJAGUCBQxiYWxhbmNlQWZ0ZXIFDWJhbGFuY2VCZWZvcmUDCQAAAgUPZXhjaGFuZ2VkQW1vdW50BQ9leGNoYW5nZWRBbW91bnQFD2V4Y2hhbmdlZEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUMcmF3RmVlQW1vdW50AwkAAAIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFE2Rpc3RyaWJ1dGVGZWVBbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAg1hY2NlcHRQYXltZW50CQDMCAIFB190cmFkZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDYxNDU1NjE1OTUJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDYxNDU1NjE1OTUCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjE0NTU2MTU5NQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2MTQ1NTYxNTk1Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDYxNDU1NjE1OTUCXzQEDSR0MDYxNjAxNjE2NTgJAQ1kaXN0cmlidXRlRmVlAQUJZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMIBQ0kdDA2MTYwMTYxNjU4Al8xBApmZWVUb1ZhdWx0CAUNJHQwNjE2MDE2MTY1OAJfMgQFc3Rha2UDBQxpc1F1b3RlQXNzZXQEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgURb2xkUG9zaXRpb25NYXJnaW4FB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAh9JbnZhbGlkIHJlbW92ZU1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA2Mjc3MDYyOTEwCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2Mjc3MDYyOTEwAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDYyNzcwNjI5MTACXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjI3NzA2MjkxMAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2Mjc3MDYyOTEwAl80BAttYXJnaW5EZWx0YQkBAS0BBQdfYW1vdW50BA0kdDA2Mjk0NzYzMTI2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQttYXJnaW5EZWx0YQQMcmVtYWluTWFyZ2luCAUNJHQwNjI5NDc2MzEyNgJfMQQHYmFkRGVidAgFDSR0MDYyOTQ3NjMxMjYCXzIDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEDXF1b3RlQXNzZXRTdHIJANgEAQkBCnF1b3RlQXNzZXQABA0kdDA2MzU3MDYzNjI0CQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNjM1NzA2MzYyNAJfMQQHYXNzZXRJZAgFDSR0MDYzNTcwNjM2MjQCXzIEB3RvUmVwYXkDCQBmAgUHX2Ftb3VudAUIYm9ycm93ZWQFCGJvcnJvd2VkBQdfYW1vdW50BAp0b1dpdGhkcmF3AwkAZgIFCGJvcnJvd2VkBQdfYW1vdW50AAAJAGUCBQdfYW1vdW50BQhib3Jyb3dlZAQLZmluYWxCb3Jyb3cJAGUCBQhib3Jyb3dlZAUHdG9SZXBheQQVc3dpdGNoUG9zaXRpb25Ub1F1b3RlAwkAZgIFC2ZpbmFsQm9ycm93AAAFA25pbAkBE3VwZGF0ZVBvc2l0aW9uQXNzZXQCBQdfdHJhZGVyBQ1xdW90ZUFzc2V0U3RyBA1kb1Nhbml0eUNoZWNrAwkBAiE9AgkAZAIFB3RvUmVwYXkFCnRvV2l0aGRyYXcFB19hbW91bnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIIdG9SZXBheT0JAKQDAQUHdG9SZXBheQIOICsgdG9XaXRoZHJhdz0JAKQDAQUKdG9XaXRoZHJhdwIEICE9IAkApAMBBQdfYW1vdW50BQNuaWwDCQAAAgUNZG9TYW5pdHlDaGVjawUNZG9TYW5pdHlDaGVjawQJZG9VbnN0YWtlAwkAZgIFCnRvV2l0aGRyYXcAAAQJZG9VbnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQp0b1dpdGhkcmF3BQNuaWwFA25pbAMJAAACBQlkb1Vuc3Rha2UFCWRvVW5zdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUJZG9VbnN0YWtlBQlkb1Vuc3Rha2UEFnJldHVybkNvbGxhdGVyYWxBY3Rpb24DCQBmAgUHdG9SZXBheQAABAdkb1JlcGF5CQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACBXJlcGF5CQDMCAIFB190cmFkZXIJAMwIAgUHdG9SZXBheQkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQdkb1JlcGF5BQdkb1JlcGF5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9SZXBheQkA2QQBBQdhc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uBRZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9vbGRQb3NpdGlvblNpemUDCQBmAgUKdG9XaXRoZHJhdwAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFCnRvV2l0aGRyYXcFA25pbAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAUVc3dpdGNoUG9zaXRpb25Ub1F1b3RlBRZyZXR1cm5Db2xsYXRlcmFsQWN0aW9uCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDWNsb3NlUG9zaXRpb24CBV9zaXplFF9taW5RdW90ZUFzc2V0QW1vdW50BARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyAwMDAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQBnAgAABQVfc2l6ZQYJAGYCAAAFFF9taW5RdW90ZUFzc2V0QW1vdW50CQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDY1NzgyNjU5MjIJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY1NzgyNjU5MjICXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjU3ODI2NTkyMgJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NTc4MjY1OTIyAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY1NzgyNjU5MjICXzQEDSR0MDY1OTI4NzAzNjUDCQBmAgkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQUFX3NpemUECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDY2NTE5NjY3NDEJAQpzd2FwT3V0cHV0AwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQVfc2l6ZQYEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA2NjUxOTY2NzQxAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjY1MTk2Njc0MQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjY1MTk2Njc0MQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY2NTE5NjY3NDECXzQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkBAS0BBQVfc2l6ZQUFX3NpemUEDSR0MDY2ODMyNjY5ODYJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDY2ODMyNjY5ODYCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2NjgzMjY2OTg2Al8yBAJtcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUNcmVhbGl6ZWRSYXRpbwQNJHQwNjcyNjU2NzUwMwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgULcmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDY3MjY1Njc1MDMCXzEED3Bvc2l0aW9uQmFkRGVidAgFDSR0MDY3MjY1Njc1MDMCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNjcyNjU2NzUwMwJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAQRbmV3UG9zaXRpb25NYXJnaW4JAQRtdWxkAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFAm1yBA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKEKDwUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sCQBkAgkBA2FicwEJAGUCBQxyZW1haW5NYXJnaW4FEW5ld1Bvc2l0aW9uTWFyZ2luBQtyZWFsaXplZFBubAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AAADCQBmAgUFX3NpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNjkzMDY2OTcyNQkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIGBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwNjkzMDY2OTcyNQJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNjkzMDY2OTcyNQJfMgQLcmVhbGl6ZWRQbmwIBQ0kdDA2OTMwNjY5NzI1Al8zBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNjkzMDY2OTcyNQJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDY5MzA2Njk3MjUCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDY5MzA2Njk3MjUCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2OTMwNjY5NzI1Al83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjkzMDY2OTcyNQJfOAQCeDIIBQ0kdDA2OTMwNjY5NzI1Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDY5MzA2Njk3MjUDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA2OTMwNjY5NzI1A18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2OTMwNjY5NzI1A18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNjkzMDY2OTcyNQNfMTMDAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQChCg8AAAAAAAAAAAUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA2NTkyODcwMzY1Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDY1OTI4NzAzNjUCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjU5Mjg3MDM2NQJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2NTkyODcwMzY1Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA2NTkyODcwMzY1Al81BAtyZWFsaXplZFBubAgFDSR0MDY1OTI4NzAzNjUCXzYEDW1hcmdpblRvVmF1bHQIBQ0kdDA2NTkyODcwMzY1Al83BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjU5Mjg3MDM2NQJfOAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjU5Mjg3MDM2NQJfOQQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDY1OTI4NzAzNjUDXzEwBBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNjU5Mjg3MDM2NQNfMTEEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNjU5Mjg3MDM2NQNfMTIED3RvdGFsU2hvcnRBZnRlcggFDSR0MDY1OTI4NzAzNjUDXzEzBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDY1OTI4NzAzNjUDXzE0BBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2NTkyODcwMzY1A18xNQMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BA53aXRoZHJhd0Ftb3VudAkBA2FicwEFDW1hcmdpblRvVmF1bHQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNJHQwNzA1NzQ3MDc4MQMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDWFtbU5ld0JhbGFuY2UIBQ0kdDA3MDU3NDcwNzgxAl8xBAN4MTEIBQ0kdDA3MDU3NDcwNzgxAl8yBA0kdDA3MDc4ODcwODQyCQETZ2V0Qm9ycm93ZWRCeVRyYWRlcgEFB190cmFkZXIECGJvcnJvd2VkCAUNJHQwNzA3ODg3MDg0MgJfMQQHYXNzZXRJZAgFDSR0MDcwNzg4NzA4NDICXzIEDSR0MDcwODU3NzE3MTYDCQBmAgUIYm9ycm93ZWQAAAMJAGcCBQ53aXRoZHJhd0Ftb3VudAUIYm9ycm93ZWQEB2RvUmVwYXkJAPwHBAkBEWNvbGxhdGVyYWxBZGRyZXNzAAIFcmVwYXkJAMwIAgUHX3RyYWRlcgkAzAgCBQhib3Jyb3dlZAkAzAgCBQdhc3NldElkBQNuaWwFA25pbAMJAAACBQdkb1JlcGF5BQdkb1JlcGF5CQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOX3RyYWRlckFkZHJlc3MFCGJvcnJvd2VkCQDZBAEFB2Fzc2V0SWQFA25pbAkAZQIFDndpdGhkcmF3QW1vdW50BQhib3Jyb3dlZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACGHJlYWxpemVQYXJ0aWFsbHlBbmRDbG9zZQkAzAgCBQdfdHJhZGVyCQDMCAIFDndpdGhkcmF3QW1vdW50CQDMCAIFB2Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOX3RyYWRlckFkZHJlc3MFDndpdGhkcmF3QW1vdW50CQDZBAEFB2Fzc2V0SWQFA25pbAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFA25pbAUOd2l0aGRyYXdBbW91bnQDCQAAAgUNJHQwNzA4NTc3MTcxNgUNJHQwNzA4NTc3MTcxNgQTcXVvdGVXaXRoZHJhd0Ftb3VudAgFDSR0MDcwODU3NzE3MTYCXzIEFHNlbmRDb2xsYXRlcmFsQWN0aW9uCAUNJHQwNzA4NTc3MTcxNgJfMQQHdW5zdGFrZQMJAGYCBRNxdW90ZVdpdGhkcmF3QW1vdW50AAAEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFE3F1b3RlV2l0aGRyYXdBbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIDCQAAAgUPbmV3UG9zaXRpb25TaXplAAAJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgMJAGYCBRNxdW90ZVdpdGhkcmF3QW1vdW50AAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBRNxdW90ZVdpdGhkcmF3QW1vdW50BQNuaWwJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQUUc2VuZENvbGxhdGVyYWxBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAQdfdHJhZGVyBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEC21hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQMDAwkAZgIFD3Nwb3RNYXJnaW5SYXRpbwkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ACQBmAgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAAABwkAZgIFDERFQ0lNQUxfVU5JVAkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAcEDSR0MDc0MDEzNzQxNjMJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDc0MDEzNzQxNjMCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNzQwMTM3NDE2MwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA3NDAxMzc0MTYzAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDc0MDEzNzQxNjMCXzQECl9kaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFCURJUl9TSE9SVAUIRElSX0xPTkcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUEDSR0MDc0Mzg4NzQ0OTIJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDc0Mzg4NzQ0OTICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA3NDM4ODc0NDkyAl8yBA0kdDA3NDUwMDc0Njg3CQEJc3dhcElucHV0AgUFaXNBZGQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDc0NTAwNzQ2ODcCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NDUwMDc0Njg3Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NDUwMDc0Njg3Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzQ1MDA3NDY4NwJfNAQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRBsaXF1aWRhdGlvblJhdGlvBA0kdDA3NDk3Njc1MjA5CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwNzQ5NzY3NTIwOQJfMQQHYmFkRGVidAgFDSR0MDc0OTc2NzUyMDkCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwNzQ5NzY3NTIwOQJfMwQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBBFuZXdQb3NpdGlvbk1hcmdpbgkAZQIFDHJlbWFpbk1hcmdpbgUSbGlxdWlkYXRpb25QZW5hbHR5BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABRJsaXF1aWRhdGlvblBlbmFsdHkEDSR0MDc2Mzc4NzY1MDcDCQBmAgAABQphbW1CYWxhbmNlCQCUCgIAAAkBA2FicwEFCmFtbUJhbGFuY2UJAJQKAgUKYW1tQmFsYW5jZQAABA1uZXdBbW1CYWxhbmNlCAUNJHQwNzYzNzg3NjUwNwJfMQQDeDExCAUNJHQwNzYzNzg3NjUwNwJfMgQNJHQwNzY1MTU3NjU2OQkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDc2NTE1NzY1NjkCXzEEB2Fzc2V0SWQIBQ0kdDA3NjUxNTc2NTY5Al8yBBVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwDCQBmAgUIYm9ycm93ZWQAAAQQY29sbGF0ZXJhbFRvU2VsbAkBBG11bGQCBQhib3Jyb3dlZAUQbGlxdWlkYXRpb25SYXRpbwQPcmVhbGl6ZUFuZENsb3NlCQD8BwQJARFjb2xsYXRlcmFsQWRkcmVzcwACEHJlYWxpemVQYXJ0aWFsbHkJAMwIAgUHX3RyYWRlcgkAzAgCBQdhc3NldElkCQDMCAIFEGNvbGxhdGVyYWxUb1NlbGwFA25pbAUDbmlsAwkAAAIFD3JlYWxpemVBbmRDbG9zZQUPcmVhbGl6ZUFuZENsb3NlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRVkb0xpcXVpZGF0ZUNvbGxhdGVyYWwFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDA3ODI2NDc4NzU5CQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgcEAngxCAUNJHQwNzgyNjQ3ODc1OQJfMQQHYmFkRGVidAgFDSR0MDc4MjY0Nzg3NTkCXzIEAngyCAUNJHQwNzgyNjQ3ODc1OQJfMwQCeDMIBQ0kdDA3ODI2NDc4NzU5Al80BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzgyNjQ3ODc1OQJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNzgyNjQ3ODc1OQJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDc4MjY0Nzg3NTkCXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3ODI2NDc4NzU5Al84BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwNzgyNjQ3ODc1OQJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3ODI2NDc4NzU5A18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzgyNjQ3ODc1OQNfMTEEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzgyNjQ3ODc1OQNfMTIEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc4MjY0Nzg3NTkDXzEzBBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA3OTE2Nzc5Mjk2AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDc5MTY3NzkyOTYCXzEEA3gxMQgFDSR0MDc5MTY3NzkyOTYCXzIEDSR0MDc5MzA0NzkzNTgJARNnZXRCb3Jyb3dlZEJ5VHJhZGVyAQUHX3RyYWRlcgQIYm9ycm93ZWQIBQ0kdDA3OTMwNDc5MzU4Al8xBAdhc3NldElkCAUNJHQwNzkzMDQ3OTM1OAJfMgQVZG9MaXF1aWRhdGVDb2xsYXRlcmFsAwkAZgIFCGJvcnJvd2VkAAAED3JlYWxpemVBbmRDbG9zZQkA/AcECQERY29sbGF0ZXJhbEFkZHJlc3MAAhhyZWFsaXplUGFydGlhbGx5QW5kQ2xvc2UJAMwIAgUHX3RyYWRlcgkAzAgCAAAJAMwIAgUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUPcmVhbGl6ZUFuZENsb3NlBQ9yZWFsaXplQW5kQ2xvc2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFWRvTGlxdWlkYXRlQ29sbGF0ZXJhbAUVZG9MaXF1aWRhdGVDb2xsYXRlcmFsBAF4AwkAZgIFB2JhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQdiYWREZWJ0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFEmxpcXVpZGF0aW9uUGVuYWx0eQUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQQZGVwb3NpdEluc3VyYW5jZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAAQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAgFCWxhc3RCbG9jawl0aW1lc3RhbXAGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgEJAKwCAgkArAICCQCsAgICIUludmFsaWQgZnVuZGluZyBibG9jayB0aW1lc3RhbXA6IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAIDIDwgCQCkAwEFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNJHQwODEyMzQ4MTI5NgkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgxMjM0ODEyOTYCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MTIzNDgxMjk2Al8yCQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABA0kdDA4MTY3ODgxNzk5CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UBCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDgxNjc4ODE3OTkCXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDgxNjc4ODE3OTkCXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA4MTY3ODgxNzk5Al8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIACQDOCAIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQEKYXBwZW5kVHdhcAEJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBRNuZXdRdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFB19ic0FzdFIFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQBB190cmFkZXIEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwODI0MTk4MjUyMAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwODI0MTk4MjUyMAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA4MjQxOTgyNTIwAl8yBANwb24IBQ0kdDA4MjQxOTgyNTIwAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDgyNDE5ODI1MjACXzQEDSR0MDgyNTIzODI2MjQJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDgyNTIzODI2MjQCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA4MjUyMzgyNjI0Al8yBA0kdDA4MjYyNzgyNzk5CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA4MjYyNzgyNzk5Al8xBAdiYWREZWJ0CAUNJHQwODI2Mjc4Mjc5OQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA4MjYyNzgyNzk5Al8zCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAQUGX3ByaWNlCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDgzMTQ2ODMyMjcJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDgzMTQ2ODMyMjcCXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDgzMTQ2ODMyMjcCXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNJHQwODM0NDY4MzUwOAkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDgzNDQ2ODM1MDgCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4MzQ0NjgzNTA4Al8yBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQtsb25nRnVuZGluZwkBAXMBBQxzaG9ydEZ1bmRpbmcJAQFzAQkBEGdldFR3YXBTcG90UHJpY2UACQEBcwEJARJnZXRPcmFjbGVUd2FwUHJpY2UAAWkBGHZpZXdfZ2V0Qm9ycm93ZWRCeVRyYWRlcgEHX3RyYWRlcgQNJHQwODM3OTg4Mzg1MgkBE2dldEJvcnJvd2VkQnlUcmFkZXIBBQdfdHJhZGVyBAhib3Jyb3dlZAgFDSR0MDgzNzk4ODM4NTICXzEEB2Fzc2V0SWQIBQ0kdDA4Mzc5ODgzODUyAl8yCQACAQkArAICCQEBcwEFCGJvcnJvd2VkBQdhc3NldElkAWkBEGNvbXB1dGVTcG90UHJpY2UABAZyZXN1bHQJAQxnZXRTcG90UHJpY2UACQCUCgIFA25pbAUGcmVzdWx0AWkBH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCB190cmFkZXILX2FydGlmYWN0SWQEBnJlc3VsdAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIFC19hcnRpZmFjdElkCQCUCgIFA25pbAUGcmVzdWx0AQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5AJ90m7k=", "height": 2358575, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DmZoZEAUhkk25Wo4hhmv9n6gwqN3UqXSQaTa2Z6MPhcR Next: 14eaH4cCRPoMQd9nmabMwfKkYe8jcCKKJKaKhsp9a4GR Diff:
OldNewDifferences
19271927
19281928 @Callable(cg)
19291929 func payFunding () = {
1930- let jC = bN()
1931- if (if (if ((jC > lastBlock.timestamp))
1932- then true
1933- else !(cx()))
1934- then true
1935- else cy())
1936- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
1937- else {
1938- let fD = dz()
1939- let jD = fC()
1940- let fG = jD._1
1941- let fH = jD._2
1942- gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1943- }
1930+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1931+ if ((hu == hu))
1932+ then {
1933+ let jC = bN()
1934+ if (if (if ((jC > lastBlock.timestamp))
1935+ then true
1936+ else !(cx()))
1937+ then true
1938+ else cy())
1939+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
1940+ else {
1941+ let fD = dz()
1942+ let jD = fC()
1943+ let fG = jD._1
1944+ let fH = jD._2
1945+ gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1946+ }
1947+ }
1948+ else throw("Strict value is not equal to itself.")
19441949 }
19451950
19461951
19601965 }
19611966 else nil
19621967 if ((jH == jH))
1963- then gT(jF, jG)
1968+ then {
1969+ let cH = bF()
1970+ let cJ = bG()
1971+ (gT(jF, jG) ++ gL(aR(aT(cH, jF), aT(cJ, jG))))
1972+ }
19641973 else throw("Strict value is not equal to itself.")
19651974 }
19661975
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_sequence"
1313
1414 let f = "k_positionSize"
1515
1616 let g = "k_positionMargin"
1717
1818 let h = "k_positionOpenNotional"
1919
2020 let i = "k_positionFraction"
2121
2222 let j = "k_positionSequence"
2323
2424 let k = "k_positionAsset"
2525
2626 let l = "k_initialized"
2727
2828 let m = "k_paused"
2929
3030 let n = "k_closeOnly"
3131
3232 let o = "k_fee"
3333
3434 let p = "k_fundingPeriod"
3535
3636 let q = "k_initMarginRatio"
3737
3838 let r = "k_mmr"
3939
4040 let s = "k_liquidationFeeRatio"
4141
4242 let t = "k_partLiquidationRatio"
4343
4444 let u = "k_spreadLimit"
4545
4646 let v = "k_maxPriceImpact"
4747
4848 let w = "k_maxPriceSpread"
4949
5050 let x = "k_maxOpenNotional"
5151
5252 let y = "k_feeToStakersPercent"
5353
5454 let z = "k_maxOracleDelay"
5555
5656 let A = "k_lastDataStr"
5757
5858 let B = "k_lastMinuteId"
5959
6060 let C = "k_twapDataLastCumulativePrice"
6161
6262 let D = "k_twapDataLastPrice"
6363
6464 let E = "k_twapDataPreviousMinuteId"
6565
6666 let F = "k_latestLongPremiumFraction"
6767
6868 let G = "k_latestShortPremiumFraction"
6969
7070 let H = "k_nextFundingBlockMinTimestamp"
7171
7272 let I = "k_longFundingRate"
7373
7474 let J = "k_shortFundingRate"
7575
7676 let K = "k_qtAstR"
7777
7878 let L = "k_bsAstR"
7979
8080 let M = "k_qtAstW"
8181
8282 let N = "k_bsAstW"
8383
8484 let O = "k_totalPositionSize"
8585
8686 let P = "k_totalLongPositionSize"
8787
8888 let Q = "k_totalShortPositionSize"
8989
9090 let R = "k_openInterestNotional"
9191
9292 let S = "k_openInterestShort"
9393
9494 let T = "k_openInterestLong"
9595
9696 let U = "k_coordinatorAddress"
9797
9898 let V = "k_vault_address"
9999
100100 let W = "k_admin_address"
101101
102102 let X = "k_admin_public_key"
103103
104104 let Y = "k_quote_asset"
105105
106106 let Z = "k_quote_staking"
107107
108108 let aa = "k_staking_address"
109109
110110 let ab = "k_miner_address"
111111
112112 let ac = "k_orders_address"
113113
114114 let ad = "k_referral_address"
115115
116116 let ae = "k_collateral_address"
117117
118118 let af = "k_exchange_address"
119119
120120 let ag = "k_nft_manager_address"
121121
122122 let ah = "k_trader_market_asset_collateral"
123123
124124 func ai (aj,ak) = ((aj + "_") + ak)
125125
126126
127127 func al () = valueOrErrorMessage(addressFromString(getStringValue(this, U)), "Coordinator not set")
128128
129129
130130 func am () = addressFromString(getStringValue(al(), W))
131131
132132
133133 func an () = fromBase58String(getStringValue(al(), X))
134134
135135
136136 func ao () = fromBase58String(getStringValue(al(), Y))
137137
138138
139139 func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), Z)), "Quote asset staking not set")
140140
141141
142142 func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), aa)), "Staking not set")
143143
144144
145145 func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), V)), "Vault not set")
146146
147147
148148 func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Miner not set")
149149
150150
151151 func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Orders not set")
152152
153153
154154 func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Referral not set")
155155
156156
157157 func av () = valueOrErrorMessage(addressFromString(getStringValue(al(), ag)), "NFT Manager not set")
158158
159159
160160 func aw () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Collateral Manager not set")
161161
162162
163163 func ax () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(al(), af), "No swap address")), "Invalid swap address")
164164
165165
166166 let ay = "k_whitelist_asset"
167167
168168 func az (aA) = valueOrElse(getBoolean(aw(), ai(ay, aA)), false)
169169
170170
171171 let aB = "k_token_param"
172172
173173 let aC = "k_token_type"
174174
175175 let aD = "fee_reduction"
176176
177177 let aE = 1
178178
179179 let aF = 2
180180
181181 let aG = 15
182182
183183 let aH = 15
184184
185185 let aI = 1000
186186
187187 let aJ = 6
188188
189189 let aK = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
190190
191191 let aL = (86400 * aK)
192192
193193 let aM = 100
194194
195195 let aN = 1
196196
197197 let aO = 2
198198
199199 func aP (aQ) = (toString(aQ) + ",")
200200
201201
202202 func aR (aQ,aS) = fraction(aQ, aK, aS, HALFEVEN)
203203
204204
205205 func aT (aQ,aS) = fraction(aQ, aS, aK, HALFEVEN)
206206
207207
208208 func aU (aQ) = sqrt(aQ, aJ, aJ, HALFEVEN)
209209
210210
211211 func aV (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
212212
213213
214214 func aW (aQ,aS) = fraction(aQ, toBigInt(aK), aS, HALFEVEN)
215215
216216
217217 func aX (aQ,aS) = fraction(aQ, aS, toBigInt(aK), HALFEVEN)
218218
219219
220220 func aY (aQ) = sqrtBigInt(aQ, aJ, aJ, HALFEVEN)
221221
222222
223223 func aZ (aQ,aS) = pow(aQ, aJ, aS, aJ, aJ, HALFEVEN)
224224
225225
226226 func ba (aQ) = if ((aQ > 0))
227227 then aQ
228228 else -(aQ)
229229
230230
231231 func bb (aQ,aS) = if ((aQ >= aS))
232232 then aQ
233233 else aS
234234
235235
236236 func bc (bd) = {
237237 func be (bf,bg) = ((bf + bg) + ",")
238238
239239 let bh = {
240240 let bi = bd
241241 let bj = size(bi)
242242 let bk = ""
243243 func bl (bm,bn) = if ((bn >= bj))
244244 then bm
245245 else be(bm, bi[bn])
246246
247247 func bo (bm,bn) = if ((bn >= bj))
248248 then bm
249249 else throw("List size exceeds 20")
250250
251251 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
252252 }
253253 let bp = dropRight(bh, 1)
254254 let bq = if ((take(bp, 1) == ","))
255255 then drop(bp, 1)
256256 else bp
257257 bq
258258 }
259259
260260
261261 func br (bs) = split(bs, ",")
262262
263263
264264 func bt (bd,bu,bv) = if ((size(bd) > bu))
265265 then (removeByIndex(bd, 0) :+ bv)
266266 else (bd :+ bv)
267267
268268
269269 func bw (bx) = valueOrErrorMessage(getInteger(this, bx), ("no value for " + bx))
270270
271271
272272 func by (bx,bz) = valueOrElse(getInteger(this, bx), bz)
273273
274274
275275 func bA (ak,aj) = {
276276 let bg = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
277277 bg
278278 }
279279
280280
281281 func bB (ak,aj) = {
282282 let bg = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
283283 bg
284284 }
285285
286286
287287 func bC () = bw(d)
288288
289289
290290 func bD () = bw(o)
291291
292292
293293 func bE () = bw(q)
294294
295295
296296 func bF () = bw(K)
297297
298298
299299 func bG () = bw(L)
300300
301301
302302 func bH () = by(M, aK)
303303
304304
305305 func bI () = by(N, aK)
306306
307307
308308 func bJ () = bw(O)
309309
310310
311311 func bK () = bw(R)
312312
313313
314314 func bL () = bw(S)
315315
316316
317317 func bM () = bw(T)
318318
319319
320320 func bN () = bw(H)
321321
322322
323323 func bO () = bw(p)
324324
325325
326326 func bP () = (bO() * aK)
327327
328328
329329 func bQ () = (bO() * aI)
330330
331331
332332 func bR () = bw(r)
333333
334334
335335 func bS () = bw(s)
336336
337337
338338 func bT () = bw(t)
339339
340340
341341 func bU () = bw(u)
342342
343343
344344 func bV () = bw(v)
345345
346346
347347 func bW () = bw(w)
348348
349349
350350 func bX () = bw(x)
351351
352352
353353 func bY () = bw(F)
354354
355355
356356 func bZ () = bw(G)
357357
358358
359359 func ca () = bw(Q)
360360
361361
362362 func cb () = bw(P)
363363
364364
365365 func cc () = by(e, 0)
366366
367367
368368 func cd () = bw(y)
369369
370370
371371 func ce () = bw(z)
372372
373373
374374 func cf (cg) = valueOrElse(getString(at(), "k_sender"), toString(cg.caller))
375375
376376
377377 func ch (ci,cj,ck) = {
378378 let cl = (ci - cj)
379379 if (if (ck)
380380 then (0 > cl)
381381 else false)
382382 then throw("Invalid margin")
383383 else if (if (!(ck))
384384 then (cl >= 0)
385385 else false)
386386 then throw("Invalid margin")
387387 else true
388388 }
389389
390390
391391 func cm (cn) = if ((cn == 0))
392392 then throw("Should not be called with _positionSize == 0")
393393 else if ((cn > 0))
394394 then bY()
395395 else bZ()
396396
397397
398398 func co (cp) = {
399399 let cq = getInteger(this, ai(f, cp))
400400 let cr = cq
401401 if ($isInstanceOf(cr, "Int"))
402402 then {
403403 let cs = cr
404404 $Tuple4(cs, getIntegerValue(this, ai(g, cp)), getIntegerValue(this, ai(h, cp)), getIntegerValue(this, ai(i, cp)))
405405 }
406406 else $Tuple4(0, 0, 0, 0)
407407 }
408408
409409
410410 func ct (cp) = {
411411 let cu = getString(this, ai(k, cp))
412412 let cr = cu
413413 if ($isInstanceOf(cr, "String"))
414414 then {
415415 let cv = cr
416416 cv
417417 }
418418 else toBase58String(ao())
419419 }
420420
421421
422422 func cw (cp) = if ((co(cp)._1 == 0))
423423 then throw("No open position")
424424 else true
425425
426426
427427 func cx () = valueOrElse(getBoolean(this, l), false)
428428
429429
430430 func cy () = valueOrElse(getBoolean(this, m), false)
431431
432432
433433 func cz () = valueOrElse(getBoolean(this, n), false)
434434
435435
436436 func cA (cB,cC,cD) = if (cB)
437437 then {
438438 let cE = (bG() - cD)
439439 if ((0 >= cE))
440440 then throw("Tx lead to base asset reserve <= 0, revert")
441441 else $Tuple3((bF() + cC), cE, (bJ() + cD))
442442 }
443443 else {
444444 let cF = (bF() - cC)
445445 if ((0 >= cF))
446446 then throw("Tx lead to base quote reserve <= 0, revert")
447447 else $Tuple3(cF, (bG() + cD), (bJ() - cD))
448448 }
449449
450450
451451 func cG (cH,cI,cJ,cK) = {
452452 let cL = toBigInt(cH)
453453 let cM = toBigInt(cI)
454454 let cN = toBigInt(cJ)
455455 let cO = toBigInt(cK)
456456 aX(aX(cL, cM), aX(cN, cO))
457457 }
458458
459459
460460 func cP (cB,cC) = {
461461 let cH = bF()
462462 let cJ = bG()
463463 let cI = bH()
464464 let cK = bI()
465465 let bx = cG(cH, cI, cJ, cK)
466466 let cQ = if (cB)
467467 then (cH + cC)
468468 else (cH - cC)
469469 let cR = toInt(aW(bx, toBigInt(aT(cQ, cI))))
470470 let cS = aR(ba((cR - cJ)), cI)
471471 let cT = if (cB)
472472 then cS
473473 else -(cS)
474474 let cU = cA(cB, cC, cS)
475475 let cV = cU._1
476476 let cW = cU._2
477477 let cX = cU._3
478478 let cY = aR(aT(cH, cI), aT(cJ, cK))
479479 let cZ = aR(cC, cS)
480480 let da = ba((cY - cZ))
481481 let db = (aK - aR(cY, (cY + da)))
482482 let dc = bV()
483483 if ((db > dc))
484484 then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(cH)) + " before base asset: ") + toString(cJ)) + " quote asset amount to exchange: ") + toString(cC)) + " price before: ") + toString(cY)) + " marketPrice: ") + toString(cZ)))
485485 else $Tuple4(cT, cV, cW, cX)
486486 }
487487
488488
489489 func dd (de,df,dg,dh) = {
490490 let di = if ((de != 0))
491491 then {
492492 let dj = cm(de)
493493 aT((dj - dg), de)
494494 }
495495 else 0
496496 let dk = ((dh - di) + df)
497497 let dl = if ((0 > dk))
498498 then $Tuple2(0, ba(dk))
499499 else $Tuple2(ba(dk), 0)
500500 let dm = dl._1
501501 let dn = dl._2
502502 $Tuple3(dm, dn, di)
503503 }
504504
505505
506506 func do (cB,cD,dp,dq,dr,ds,dt) = {
507507 let cY = aR(aT(dq, dr), aT(ds, dt))
508508 if ((cD == 0))
509509 then throw("Invalid base asset amount")
510510 else {
511511 let bx = cG(dq, dr, ds, dt)
512512 let du = if (cB)
513513 then (ds + cD)
514514 else (ds - cD)
515515 let dv = toInt(aW(bx, toBigInt(aT(du, dt))))
516516 let dw = ba((dv - aT(dq, dr)))
517517 let dc = bV()
518518 let dx = cA(!(cB), dw, cD)
519519 let cV = dx._1
520520 let cW = dx._2
521521 let cX = dx._3
522522 let cZ = aR(dw, cD)
523523 let da = ba((cY - cZ))
524524 let db = (aK - aR(cY, (cY + da)))
525525 if (if ((db > dc))
526526 then dp
527527 else false)
528528 then throw(((((((((((((("Price impact " + toString(db)) + " > max price impact ") + toString(dc)) + " before quote asset: ") + toString(dq)) + " before base asset: ") + toString(ds)) + " base asset amount to exchange: ") + toString(cD)) + " price before: ") + toString(cY)) + " market price: ") + toString(cZ)))
529529 else $Tuple7(dw, cV, cW, cX, (cb() - (if (cB)
530530 then ba(cD)
531531 else 0)), (ca() - (if (!(cB))
532532 then ba(cD)
533533 else 0)), db)
534534 }
535535 }
536536
537537
538538 func dy (cB,cD,dp) = do(cB, cD, dp, bF(), bH(), bG(), bI())
539539
540540
541541 func dz () = {
542542 let dA = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
543543 let dB = getStringValue(this, a)
544544 let dC = valueOrErrorMessage(getInteger(dA, dB), ((("Can not get oracle price. Oracle: " + toString(dA)) + " key: ") + dB))
545545 let dD = valueOrElse(getString(this, b), "")
546546 if ((dD != ""))
547547 then {
548548 let dE = lastBlock.height
549549 let dF = valueOrErrorMessage(getInteger(dA, dD), ((("Can not get oracle block. Oracle: " + toString(dA)) + " key: ") + dD))
550550 if (((dE - dF) > ce()))
551551 then throw(((("Oracle stale data. Last oracle block: " + toString(dF)) + " current block: ") + toString(dE)))
552552 else dC
553553 }
554554 else dC
555555 }
556556
557557
558558 func dG (dq,ds) = {
559559 let dH = dz()
560560 let cI = bH()
561561 let cK = bI()
562562 let dI = aR(aT(dq, cI), aT(ds, cK))
563563 let dJ = aR((dH + dI), (2 * aK))
564564 let dK = aR(ba((dH - dI)), dJ)
565565 if ((dK > bW()))
566566 then throw(((("Price spread " + toString(dK)) + " > max price spread ") + toString(bW())))
567567 else true
568568 }
569569
570570
571571 func dL (dM,dN) = {
572572 let dO = bX()
573573 if ((dM > dO))
574574 then throw(((("Long open notional " + toString(dM)) + " > max open notional ") + toString(dO)))
575575 else if ((dN > dO))
576576 then throw(((("Short open notional " + toString(dN)) + " > max open notional ") + toString(dO)))
577577 else true
578578 }
579579
580580
581581 func dP () = {
582582 let dq = bF()
583583 let ds = bG()
584584 let cI = bH()
585585 let cK = bI()
586586 aR(aT(dq, cI), aT(ds, cK))
587587 }
588588
589589
590590 func dQ () = {
591591 let dH = dz()
592592 let dR = dP()
593593 (aR(ba((dH - dR)), dH) > bU())
594594 }
595595
596596
597597 func dS (cn,dT,dq,dr,ds,dt) = {
598598 let dU = ba(cn)
599599 let dV = (0 > cn)
600600 let dW = if ((dT == aN))
601601 then {
602602 let dX = do(!(dV), dU, false, dq, dr, ds, dt)
603603 let dY = dX._1
604604 let dZ = dX._2
605605 let ea = dX._3
606606 let eb = dX._4
607607 dY
608608 }
609609 else aT(dU, dz())
610610 dW
611611 }
612612
613613
614614 func ec (cn,ed,dq,dr,ds,dt,dT) = if ((cn == 0))
615615 then throw("Invalid position size")
616616 else {
617617 let dV = (0 > cn)
618618 let dW = dS(cn, dT, dq, dr, ds, dt)
619619 let ee = if (dV)
620620 then (ed - dW)
621621 else (dW - ed)
622622 $Tuple2(dW, ee)
623623 }
624624
625625
626626 func ef (cp,dT) = {
627627 let eg = co(cp)
628628 let cs = eg._1
629629 let eh = eg._2
630630 let ei = eg._3
631631 let ej = eg._4
632632 ec(cs, ei, bF(), bH(), bG(), bI(), dT)
633633 }
634634
635635
636636 func ek (el,em,en) = aR((el - em), en)
637637
638638
639639 func eo (cp,dT) = {
640640 let ep = co(cp)
641641 let cs = ep._1
642642 let eh = ep._2
643643 let eq = ep._3
644644 let ej = ep._4
645645 let er = ef(cp, dT)
646646 let dW = er._1
647647 let ee = er._2
648648 let es = dd(cs, eh, ej, ee)
649649 let dm = es._1
650650 let dn = es._2
651651 ek(dm, dn, dW)
652652 }
653653
654654
655655 func et (cp) = eo(cp, aN)
656656
657657
658658 func eu (cp,cn) = {
659659 let ev = bb(bT(), (aK - aR(et(cp), bR())))
660660 let ew = aT(ba(cn), ev)
661661 let ex = dy((cn > 0), ew, false)
662662 let ey = ex._1
663663 let db = ex._7
664664 if ((bV() > db))
665665 then ey
666666 else {
667667 let ez = aT(ba(cn), bT())
668668 let eA = dy((cn > 0), ez, false)._1
669669 eA
670670 }
671671 }
672672
673673
674674 func eB (cp,dp) = {
675675 let eC = co(cp)
676676 let cs = eC._1
677677 let eh = eC._2
678678 let ei = eC._3
679679 let ej = eC._4
680680 let ee = ef(cp, aN)._2
681681 let eD = dd(cs, eh, ej, ee)
682682 let dm = eD._1
683683 let dn = eD._2
684684 let ez = -(cs)
685685 let eE = ee
686686 let eF = -(dm)
687687 let eG = dy((cs > 0), ba(cs), dp)
688688 let eA = eG._1
689689 let cQ = eG._2
690690 let cR = eG._3
691691 let eH = eG._4
692692 let eI = eG._5
693693 let eJ = eG._6
694694 let eK = (bK() - ei)
695695 $Tuple13(ez, dn, eE, eF, cQ, cR, eH, eK, eA, eI, eJ, (bM() - (if ((cs > 0))
696696 then ei
697697 else 0)), (bL() - (if ((0 > cs))
698698 then ei
699699 else 0)))
700700 }
701701
702702
703703 func eL () = {
704704 let eM = ((lastBlock.timestamp / 1000) / 60)
705705 let eN = (eM - aG)
706706 let eO = valueOrElse(getString(this, A), "")
707707 let eP = split(eO, ",")
708708 func eQ (bf,eR) = if ((eN >= parseIntValue(eR)))
709709 then (bf :+ parseIntValue(eR))
710710 else bf
711711
712712 let eS = {
713713 let bi = eP
714714 let bj = size(bi)
715715 let bk = nil
716716 func bl (bm,bn) = if ((bn >= bj))
717717 then bm
718718 else eQ(bm, bi[bn])
719719
720720 func bo (bm,bn) = if ((bn >= bj))
721721 then bm
722722 else throw("List size exceeds 20")
723723
724724 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
725725 }
726726 let eT = if ((size(eS) > 0))
727727 then max(eS)
728728 else parseIntValue(eP[0])
729729 let eU = valueOrElse(getInteger(this, B), 0)
730730 let eV = valueOrElse(getInteger(this, ((C + "_") + toString(eU))), 0)
731731 let eW = valueOrElse(getInteger(this, ((D + "_") + toString(eU))), 0)
732732 let eX = (eV + ((eM - eU) * eW))
733733 let eY = valueOrElse(getInteger(this, ((C + "_") + toString(eT))), 0)
734734 let eZ = valueOrElse(getInteger(this, ((D + "_") + toString(eT))), 0)
735735 let fa = (eY + ((eN - eT) * eZ))
736736 ((eX - fa) / aG)
737737 }
738738
739739
740740 func fb () = {
741741 let cn = bJ()
742742 if ((cn == 0))
743743 then $Tuple2(bF(), bG())
744744 else {
745745 let fc = (cn > 0)
746746 let fd = dy(fc, ba(cn), false)
747747 let fe = fd._1
748748 let ff = fd._2
749749 let fg = fd._3
750750 $Tuple2(ff, fg)
751751 }
752752 }
753753
754754
755755 func fh (fi,bJ,fj,fk) = {
756756 let fl = toBigInt(fi)
757757 let fm = toBigInt(bJ)
758758 let fn = toBigInt(fj)
759759 let fo = toBigInt(fk)
760760 let fp = aZ((fl + fm), toBigInt((2 * aK)))
761761 let fq = aX(fn, fp)
762762 let fr = (toBigInt(4) * aX(fo, fm))
763763 let fs = aY(aX(fq, (fn - fr)))
764764 let ft = aX(fl, fn)
765765 let fu = aX(fn, fm)
766766 let fv = ((-(fs) + ft) + fu)
767767 let fw = (toBigInt(2) * aX(fn, fm))
768768 let fx = aW(fv, fw)
769769 toInt(fx)
770770 }
771771
772772
773773 func fy (fz) = {
774774 let cn = bJ()
775775 if ((cn == 0))
776776 then {
777777 let cH = bF()
778778 let cJ = bG()
779779 let fA = aR(aT(fz, cJ), cH)
780780 $Tuple3(fA, aK, 0)
781781 }
782782 else {
783783 let fc = (cn > 0)
784784 let fe = dy(fc, ba(cn), false)._1
785785 let cH = bF()
786786 let cJ = bG()
787787 let fA = fh(cJ, cn, cH, fz)
788788 let fB = aK
789789 let eF = ec(cn, fe, cH, fA, cJ, fB, aN)._2
790790 $Tuple3(fA, fB, eF)
791791 }
792792 }
793793
794794
795795 func fC () = {
796796 let fD = dz()
797797 let fE = eL()
798798 let fF = (fE - fD)
799799 if (if ((ca() == 0))
800800 then true
801801 else (cb() == 0))
802802 then $Tuple2(0, 0)
803803 else if ((0 > fF))
804804 then {
805805 let fG = aR(aT(fF, bP()), aL)
806806 let fH = aR(aT(fG, ca()), cb())
807807 $Tuple2(fG, fH)
808808 }
809809 else {
810810 let fH = aR(aT(fF, bP()), aL)
811811 let fG = aR(aT(fH, cb()), ca())
812812 $Tuple2(fG, fH)
813813 }
814814 }
815815
816816
817817 func fI (fJ,fK) = {
818818 let fL = bD()
819819 let fM = aT(fL, fK)
820820 let fN = if ((fJ != ""))
821821 then {
822822 let fO = bA(av(), ai(aC, fJ))
823823 if ((fO == aD))
824824 then {
825825 let fP = bB(av(), ai(aB, fJ))
826826 let fQ = aT(fM, fP)
827827 $Tuple2(fQ, true)
828828 }
829829 else throw("Invalid attached artifact")
830830 }
831831 else $Tuple2(fM, false)
832832 let fQ = fN._1
833833 let fR = fN._2
834834 $Tuple2(fQ, fR)
835835 }
836836
837837
838838 func fS (cp,aA) = {
839839 let fT = co(cp)._1
840840 if ((fT == 0))
841841 then true
842842 else (ct(cp) == aA)
843843 }
844844
845845
846846 func fU (cp,aA) = (ct(cp) == aA)
847847
848848
849849 func fV (fW,aA,cp) = ((((((ah + "_") + fW) + "_") + aA) + "_") + cp)
850850
851851
852852 func fX (cp) = {
853853 let cv = ct(cp)
854854 if ((cv == toBase58String(ao())))
855855 then $Tuple2(0, cv)
856856 else {
857857 let fY = fV(toString(this), cv, cp)
858858 let fZ = valueOrElse(getInteger(aw(), fY), 0)
859859 $Tuple2(fZ, cv)
860860 }
861861 }
862862
863863
864864 func ga (cp,fJ) = {
865865 let gb = invoke(as(), "computeFeeDiscount", [cp], nil)
866866 if ((gb == gb))
867867 then {
868868 let gc = {
869869 let cr = gb
870870 if ($isInstanceOf(cr, "Int"))
871871 then {
872872 let gd = cr
873873 gd
874874 }
875875 else throw("Invalid computeFeeDiscount result")
876876 }
877877 let ge = fI(fJ, gc)
878878 let fQ = ge._1
879879 let fR = ge._2
880880 $Tuple2(fQ, fR)
881881 }
882882 else throw("Strict value is not equal to itself.")
883883 }
884884
885885
886886 func gf (cg) = {
887887 let gg = if ((size(cg.payments) > 1))
888888 then toBase58String(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifactId"))
889889 else ""
890890 gg
891891 }
892892
893893
894894 func gh (gi) = {
895895 let gj = aT(gi, cd())
896896 let gk = (gi - gj)
897897 $Tuple2(gj, gk)
898898 }
899899
900900
901901 func gl (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = [IntegerEntry(q, gm), IntegerEntry(r, gn), IntegerEntry(s, go), IntegerEntry(p, gp), IntegerEntry(o, gq), IntegerEntry(u, gr), IntegerEntry(v, gs), IntegerEntry(t, gt), IntegerEntry(w, gu), IntegerEntry(x, dO), IntegerEntry(y, gv), IntegerEntry(z, gv)]
902902
903903
904904 func gx (gy,gz,gA,gB,gC) = [IntegerEntry(H, gy), IntegerEntry(F, gz), IntegerEntry(G, gA), IntegerEntry(I, gB), IntegerEntry(J, gC)]
905905
906906
907907 func gD (ak,aA) = [StringEntry(ai(k, ak), aA)]
908908
909909
910910 func gE (gF,ak) = if (gF)
911911 then {
912912 let gG = cc()
913913 [IntegerEntry(ai(j, ak), (gG + 1)), IntegerEntry(e, (gG + 1))]
914914 }
915915 else nil
916916
917917
918918 func gH (ak,gI,gJ,gK,dj) = [IntegerEntry(ai(f, ak), gI), IntegerEntry(ai(g, ak), gJ), IntegerEntry(ai(h, ak), gK), IntegerEntry(ai(i, ak), dj)]
919919
920920
921921 func gL (gM) = {
922922 let eM = ((lastBlock.timestamp / 1000) / 60)
923923 let gN = valueOrElse(getInteger(this, B), 0)
924924 if ((gN > eM))
925925 then throw("TWAP out-of-order")
926926 else {
927927 let eU = if ((gN == 0))
928928 then eM
929929 else gN
930930 if ((eM > gN))
931931 then {
932932 let gO = valueOrElse(getInteger(this, ((C + "_") + toString(gN))), 0)
933933 let gP = valueOrElse(getInteger(this, ((D + "_") + toString(gN))), gM)
934934 let gQ = (gO + ((eM - eU) * gP))
935935 let eP = bt(br(valueOrElse(getString(this, A), "")), aG, toString(eM))
936936 [IntegerEntry(ai(C, toString(eM)), gQ), IntegerEntry(ai(D, toString(eM)), gM), IntegerEntry(ai(E, toString(eM)), gN), IntegerEntry(B, eM), StringEntry(A, bc(eP))]
937937 }
938938 else {
939939 let gR = valueOrElse(getInteger(this, ai(E, toString(eM))), 0)
940940 let gO = valueOrElse(getInteger(this, ai(C, toString(gR))), 0)
941941 let gP = valueOrElse(getInteger(this, ai(D, toString(gR))), gM)
942942 let gQ = (gO + ((eM - gR) * gP))
943943 [IntegerEntry(ai(C, toString(eM)), gQ), IntegerEntry(ai(D, toString(eM)), gM)]
944944 }
945945 }
946946 }
947947
948948
949949 func gS (cH,cJ) = [IntegerEntry(K, cH), IntegerEntry(L, cJ)]
950950
951951
952952 func gT (cI,cK) = [IntegerEntry(M, cI), IntegerEntry(N, cK)]
953953
954954
955955 func gU (cH,cJ,gV,gW,gX,gY,gZ,ha) = {
956956 let cI = bH()
957957 let cK = bI()
958958 if (((gX - gY) != gV))
959959 then throw(((((("Invalid AMM state data: " + toString(gX)) + " + ") + toString(gY)) + " != ") + toString(gV)))
960960 else ((gS(cH, cJ) ++ [IntegerEntry(O, gV), IntegerEntry(R, gW), IntegerEntry(P, gX), IntegerEntry(Q, gY), IntegerEntry(T, gZ), IntegerEntry(S, ha)]) ++ gL(aR(aT(cH, cI), aT(cJ, cK))))
961961 }
962962
963963
964964 func hb (ak) = [DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(i, ak)), DeleteEntry(ai(k, ak))]
965965
966966
967967 func hc (ak,hd) = {
968968 let he = assetBalance(this, ao())
969969 if ((hd > he))
970970 then throw(((("Unable to withdraw " + toString(hd)) + " from contract balance ") + toString(he)))
971971 else [ScriptTransfer(ak, hd, ao())]
972972 }
973973
974974
975975 func hf (cg) = if ((0 > cg))
976976 then throw("Balance")
977977 else [IntegerEntry(d, cg)]
978978
979979
980980 func hg (cg) = [ScriptTransfer(aq(), cg, ao())]
981981
982982
983983 func hh (hi,cg) = if (hi)
984984 then [Burn(valueOrErrorMessage(cg.payments[1].assetId, "Invalid artifact"), 1)]
985985 else nil
986986
987987
988988 @Callable(cg)
989989 func pause () = if ((cg.caller != am()))
990990 then throw("Invalid pause params")
991991 else [BooleanEntry(m, true)]
992992
993993
994994
995995 @Callable(cg)
996996 func unpause () = if ((cg.caller != am()))
997997 then throw("Invalid unpause params")
998998 else [BooleanEntry(m, false)]
999999
10001000
10011001
10021002 @Callable(cg)
10031003 func setCloseOnly () = if ((cg.caller != am()))
10041004 then throw("Invalid setCloseOnly params")
10051005 else [BooleanEntry(n, true)]
10061006
10071007
10081008
10091009 @Callable(cg)
10101010 func unsetCloseOnly () = if ((cg.caller != am()))
10111011 then throw("Invalid unsetCloseOnly params")
10121012 else [BooleanEntry(n, false)]
10131013
10141014
10151015
10161016 @Callable(cg)
10171017 func addLiquidity (cC) = if (if ((cg.caller != am()))
10181018 then true
10191019 else (0 >= cC))
10201020 then throw("Invalid addLiquidity params")
10211021 else {
10221022 let cH = bF()
10231023 let cJ = bG()
10241024 let cI = bH()
10251025 let cK = bI()
10261026 let hj = aR(aT(cH, cI), aT(cJ, cK))
10271027 let hk = aR(cC, hj)
10281028 let hl = (cH + cC)
10291029 let hm = (cJ + hk)
10301030 gS(hl, hm)
10311031 }
10321032
10331033
10341034
10351035 @Callable(cg)
10361036 func removeLiquidity (cC) = if (if ((cg.caller != am()))
10371037 then true
10381038 else (0 >= cC))
10391039 then throw("Invalid removeLiquidity params")
10401040 else {
10411041 let cH = bF()
10421042 let cJ = bG()
10431043 let cI = bH()
10441044 let cK = bI()
10451045 let hj = aR(aT(cH, cI), aT(cJ, cK))
10461046 let hn = aR(cC, hj)
10471047 let hl = (cH - cC)
10481048 let hm = (cJ - hn)
10491049 gS(hl, hm)
10501050 }
10511051
10521052
10531053
10541054 @Callable(cg)
10551055 func changeSettings (gm,gn,go,gp,gq,gr,gs,gt,gu,dO,gv,gw) = if ((cg.caller != am()))
10561056 then throw("Invalid changeSettings params")
10571057 else gl(gm, gn, go, gp, gq, gr, gs, gt, gu, dO, gv, gw)
10581058
10591059
10601060
10611061 @Callable(cg)
10621062 func initialize (cH,cJ,gp,gm,gn,go,gq,ho,hp,hq,hr,gr,gs,gt,gu,dO,gv,gw) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cH))
10631063 then true
10641064 else (0 >= cJ))
10651065 then true
10661066 else (0 >= gp))
10671067 then true
10681068 else (0 >= gm))
10691069 then true
10701070 else (0 >= gn))
10711071 then true
10721072 else (0 >= go))
10731073 then true
10741074 else (0 >= gq))
10751075 then true
10761076 else (0 >= gr))
10771077 then true
10781078 else (0 >= gs))
10791079 then true
10801080 else (0 >= gt))
10811081 then true
10821082 else (0 >= gu))
10831083 then true
10841084 else (0 >= dO))
10851085 then true
10861086 else (0 >= gv))
10871087 then true
10881088 else (gv > aK))
10891089 then true
10901090 else (0 >= gw))
10911091 then true
10921092 else cx())
10931093 then throw("Invalid initialize parameters")
10941094 else ((((gU(cH, cJ, 0, 0, 0, 0, 0, 0) ++ gl(gm, gn, go, gp, gq, gr, gs, gt, gu, dO, gv, gw)) ++ gx((lastBlock.timestamp + gp), 0, 0, 0, 0)) ++ hf(0)) ++ [BooleanEntry(l, true), StringEntry(c, ho), StringEntry(a, hp), StringEntry(b, hq), StringEntry(U, hr)])
10951095
10961096
10971097
10981098 @Callable(cg)
10991099 func decreasePosition (hd,hs,ht) = {
11001100 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
11011101 if ((hu == hu))
11021102 then {
11031103 let cp = cf(cg)
11041104 if (if (if (if (if ((0 >= hd))
11051105 then true
11061106 else !(cx()))
11071107 then true
11081108 else !(ch(aR(aK, hs), bE(), true)))
11091109 then true
11101110 else !(cw(cp)))
11111111 then true
11121112 else cy())
11131113 then throw("Invalid decreasePosition parameters")
11141114 else {
11151115 let hv = co(cp)
11161116 let fT = hv._1
11171117 let hw = hv._2
11181118 let hx = hv._3
11191119 let hy = hv._4
11201120 let hz = if ((fT > 0))
11211121 then aF
11221122 else aE
11231123 let hA = (hz == aE)
11241124 let hB = aT(hd, hs)
11251125 let hC = ef(cp, aN)
11261126 let hD = hC._1
11271127 let ee = hC._2
11281128 let hE = if ((hD > hB))
11291129 then {
11301130 let hF = cP(hA, hB)
11311131 let ez = hF._1
11321132 let cQ = hF._2
11331133 let cR = hF._3
11341134 let eH = hF._4
11351135 let hG = ba(ez)
11361136 if (if ((ht != 0))
11371137 then (ht > hG)
11381138 else false)
11391139 then throw(((("Too little base asset exchanged, got " + toString(hG)) + " expected ") + toString(ht)))
11401140 else {
11411141 let eE = aR(aT(ee, hG), ba(fT))
11421142 let hH = dd(fT, hw, hy, eE)
11431143 let dm = hH._1
11441144 let dn = hH._2
11451145 let di = hH._3
11461146 let eA = hB
11471147 let hI = (ee - eE)
11481148 let hJ = if ((fT > 0))
11491149 then ((hD - eA) - hI)
11501150 else ((hI + hD) - eA)
11511151 let hK = (fT + ez)
11521152 $Tuple12(hK, dm, ba(hJ), cm(hK), cR, cQ, eH, (bK() - hB), (cb() - (if ((hK > 0))
11531153 then ba(ez)
11541154 else 0)), (ca() - (if ((0 > hK))
11551155 then ba(ez)
11561156 else 0)), (bM() - (if ((hK > 0))
11571157 then hB
11581158 else 0)), (bL() - (if ((0 > hK))
11591159 then hB
11601160 else 0)))
11611161 }
11621162 }
11631163 else throw("Close position first")
11641164 let hK = hE._1
11651165 let hL = hE._2
11661166 let hM = hE._3
11671167 let hN = hE._4
11681168 let cR = hE._5
11691169 let cQ = hE._6
11701170 let eH = hE._7
11711171 let eK = hE._8
11721172 let eI = hE._9
11731173 let eJ = hE._10
11741174 let hO = hE._11
11751175 let hP = hE._12
11761176 let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
11771177 if ((hQ == hQ))
11781178 then (gH(cp, hK, hL, hM, hN) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP))
11791179 else throw("Strict value is not equal to itself.")
11801180 }
11811181 }
11821182 else throw("Strict value is not equal to itself.")
11831183 }
11841184
11851185
11861186
11871187 @Callable(cg)
11881188 func increasePosition (hz,hs,ht,hR) = {
11891189 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
11901190 if ((hu == hu))
11911191 then {
11921192 let cp = cf(cg)
11931193 let hS = cg.payments[0].amount
11941194 let aA = cg.payments[0].assetId
11951195 let hT = toBase58String(value(aA))
11961196 let hU = (aA == ao())
11971197 let hV = az(hT)
11981198 if (if (if (if (if (if (if (if (if ((hz != aE))
11991199 then (hz != aF)
12001200 else false)
12011201 then true
12021202 else (0 >= hS))
12031203 then true
12041204 else !(cx()))
12051205 then true
12061206 else if (!(hU))
12071207 then !(hV)
12081208 else false)
12091209 then true
12101210 else !(fS(cp, hT)))
12111211 then true
12121212 else !(ch(aR(aK, hs), bE(), true)))
12131213 then true
12141214 else cy())
12151215 then true
12161216 else cz())
12171217 then throw("Invalid increasePosition parameters")
12181218 else {
12191219 let hW = ga(cp, gf(cg))
12201220 let fQ = hW._1
12211221 let fR = hW._2
12221222 let hX = aT(hS, fQ)
12231223 let hd = (hS - hX)
12241224 let hY = if (hV)
12251225 then {
12261226 let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
12271227 if ((hZ == hZ))
12281228 then {
12291229 let ia = assetBalance(this, ao())
12301230 if ((ia == ia))
12311231 then {
12321232 let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
12331233 if ((ib == ib))
12341234 then {
12351235 let ic = assetBalance(this, ao())
12361236 if ((ic == ic))
12371237 then {
12381238 let id = (ic - ia)
12391239 if ((id == id))
12401240 then id
12411241 else throw("Strict value is not equal to itself.")
12421242 }
12431243 else throw("Strict value is not equal to itself.")
12441244 }
12451245 else throw("Strict value is not equal to itself.")
12461246 }
12471247 else throw("Strict value is not equal to itself.")
12481248 }
12491249 else throw("Strict value is not equal to itself.")
12501250 }
12511251 else hX
12521252 if ((hY == hY))
12531253 then {
12541254 let ie = invoke(au(), "acceptPaymentWithLink", [cp, hR], [AttachedPayment(ao(), hY)])
12551255 if ((ie == ie))
12561256 then {
12571257 let if = {
12581258 let cr = ie
12591259 if ($isInstanceOf(cr, "Int"))
12601260 then {
12611261 let gd = cr
12621262 gd
12631263 }
12641264 else throw("Invalid referrerFee")
12651265 }
12661266 let ig = (hY - if)
12671267 let ih = co(cp)
12681268 let fT = ih._1
12691269 let hw = ih._2
12701270 let hx = ih._3
12711271 let hy = ih._4
12721272 let gF = (fT == 0)
12731273 let ii = if ((fT > 0))
12741274 then (hz == aE)
12751275 else (hz == aF)
12761276 let ij = if (!(gF))
12771277 then ii
12781278 else false
12791279 let hA = (hz == aE)
12801280 let ik = if (if (gF)
12811281 then true
12821282 else ij)
12831283 then {
12841284 let hB = aT(hd, hs)
12851285 let il = cP(hA, hB)
12861286 let cT = il._1
12871287 let cQ = il._2
12881288 let cR = il._3
12891289 let eH = il._4
12901290 if (if ((ht != 0))
12911291 then (ht > ba(cT))
12921292 else false)
12931293 then throw(((("Limit error: " + toString(ba(cT))) + " < ") + toString(ht)))
12941294 else {
12951295 let hK = (fT + cT)
12961296 let hO = (bM() + (if ((hK > 0))
12971297 then hB
12981298 else 0))
12991299 let hP = (bL() + (if ((0 > hK))
13001300 then hB
13011301 else 0))
13021302 let im = aR(hB, hs)
13031303 let in = dd(fT, hw, hy, im)
13041304 let dm = in._1
13051305 let dZ = in._2
13061306 let ea = in._3
13071307 if (!(dG(cQ, cR)))
13081308 then throw("Over max spread limit")
13091309 else if (!(dL(hO, hP)))
13101310 then throw("Over max open notional")
13111311 else $Tuple12(hK, dm, (hx + hB), cm(hK), cR, cQ, eH, (bK() + hB), (cb() + (if ((hK > 0))
13121312 then ba(cT)
13131313 else 0)), (ca() + (if ((0 > hK))
13141314 then ba(cT)
13151315 else 0)), hO, hP)
13161316 }
13171317 }
13181318 else {
13191319 let hB = aT(hd, hs)
13201320 let io = ef(toString(cg.caller), aN)
13211321 let hD = io._1
13221322 let ee = io._2
13231323 if ((hD > hB))
13241324 then throw("Use decreasePosition to decrease position size")
13251325 else throw("Close position first")
13261326 }
13271327 let hK = ik._1
13281328 let hL = ik._2
13291329 let hM = ik._3
13301330 let hN = ik._4
13311331 let cR = ik._5
13321332 let cQ = ik._6
13331333 let eH = ik._7
13341334 let eK = ik._8
13351335 let eI = ik._9
13361336 let eJ = ik._10
13371337 let hO = ik._11
13381338 let hP = ik._12
13391339 let ip = gh(ig)
13401340 let gj = ip._1
13411341 let gk = ip._2
13421342 let iq = if (hU)
13431343 then {
13441344 let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
13451345 if ((iq == iq))
13461346 then nil
13471347 else throw("Strict value is not equal to itself.")
13481348 }
13491349 else nil
13501350 if ((iq == iq))
13511351 then {
13521352 let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
13531353 if ((ir == ir))
13541354 then {
13551355 let is = invoke(as(), "notifyFees", [cp, ig], nil)
13561356 if ((is == is))
13571357 then {
13581358 let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
13591359 if ((hQ == hQ))
13601360 then ((((((gH(cp, hK, hL, hM, hN) ++ gE(gF, cp)) ++ gD(cp, hT)) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ hg(gj)) ++ hf((bC() + hd))) ++ hh(fR, cg))
13611361 else throw("Strict value is not equal to itself.")
13621362 }
13631363 else throw("Strict value is not equal to itself.")
13641364 }
13651365 else throw("Strict value is not equal to itself.")
13661366 }
13671367 else throw("Strict value is not equal to itself.")
13681368 }
13691369 else throw("Strict value is not equal to itself.")
13701370 }
13711371 else throw("Strict value is not equal to itself.")
13721372 }
13731373 }
13741374 else throw("Strict value is not equal to itself.")
13751375 }
13761376
13771377
13781378
13791379 @Callable(cg)
13801380 func addMargin () = {
13811381 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
13821382 if ((hu == hu))
13831383 then {
13841384 let cp = toString(cg.caller)
13851385 let hS = cg.payments[0].amount
13861386 let aA = cg.payments[0].assetId
13871387 let hT = toBase58String(value(aA))
13881388 let hU = (aA == ao())
13891389 let hV = az(hT)
13901390 if (if (if (if (if (if (if (!(hU))
13911391 then !(hV)
13921392 else false)
13931393 then true
13941394 else !(cw(toString(cg.caller))))
13951395 then true
13961396 else !(fU(cp, hT)))
13971397 then true
13981398 else !(cx()))
13991399 then true
14001400 else cy())
14011401 then true
14021402 else cz())
14031403 then throw("Invalid addMargin parameters")
14041404 else {
14051405 let it = ga(cp, gf(cg))
14061406 let fQ = it._1
14071407 let fR = it._2
14081408 let hX = aT(hS, fQ)
14091409 let hd = (hS - hX)
14101410 let hY = if (hV)
14111411 then {
14121412 let hZ = invoke(aw(), "borrow", [cp], [AttachedPayment(aA, hd)])
14131413 if ((hZ == hZ))
14141414 then {
14151415 let ia = assetBalance(this, ao())
14161416 if ((ia == ia))
14171417 then {
14181418 let ib = invoke(ax(), "swap", [toBase58String(ao()), 0], [AttachedPayment(aA, hX)])
14191419 if ((ib == ib))
14201420 then {
14211421 let ic = assetBalance(this, ao())
14221422 if ((ic == ic))
14231423 then {
14241424 let id = (ic - ia)
14251425 if ((id == id))
14261426 then id
14271427 else throw("Strict value is not equal to itself.")
14281428 }
14291429 else throw("Strict value is not equal to itself.")
14301430 }
14311431 else throw("Strict value is not equal to itself.")
14321432 }
14331433 else throw("Strict value is not equal to itself.")
14341434 }
14351435 else throw("Strict value is not equal to itself.")
14361436 }
14371437 else hX
14381438 if ((hY == hY))
14391439 then {
14401440 let ie = invoke(au(), "acceptPayment", [cp], [AttachedPayment(ao(), hY)])
14411441 if ((ie == ie))
14421442 then {
14431443 let if = {
14441444 let cr = ie
14451445 if ($isInstanceOf(cr, "Int"))
14461446 then {
14471447 let gd = cr
14481448 gd
14491449 }
14501450 else throw("Invalid referrerFee")
14511451 }
14521452 let ig = (hY - if)
14531453 let iu = co(cp)
14541454 let fT = iu._1
14551455 let hw = iu._2
14561456 let hx = iu._3
14571457 let hy = iu._4
14581458 let iv = gh(ig)
14591459 let gj = iv._1
14601460 let gk = iv._2
14611461 let iq = if (hU)
14621462 then {
14631463 let iq = invoke(ar(), "addLocked", [false], [AttachedPayment(ao(), hd)])
14641464 if ((iq == iq))
14651465 then nil
14661466 else throw("Strict value is not equal to itself.")
14671467 }
14681468 else nil
14691469 if ((iq == iq))
14701470 then {
14711471 let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
14721472 if ((ir == ir))
14731473 then {
14741474 let is = invoke(as(), "notifyFees", [cp, ig], nil)
14751475 if ((is == is))
14761476 then (((gH(cp, fT, (hw + hd), hx, hy) ++ hg(gj)) ++ hf((bC() + hd))) ++ hh(fR, cg))
14771477 else throw("Strict value is not equal to itself.")
14781478 }
14791479 else throw("Strict value is not equal to itself.")
14801480 }
14811481 else throw("Strict value is not equal to itself.")
14821482 }
14831483 else throw("Strict value is not equal to itself.")
14841484 }
14851485 else throw("Strict value is not equal to itself.")
14861486 }
14871487 }
14881488 else throw("Strict value is not equal to itself.")
14891489 }
14901490
14911491
14921492
14931493 @Callable(cg)
14941494 func removeMargin (hd) = {
14951495 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
14961496 if ((hu == hu))
14971497 then {
14981498 let cp = toString(cg.caller)
14991499 if (if (if (if ((0 >= hd))
15001500 then true
15011501 else !(cw(cp)))
15021502 then true
15031503 else !(cx()))
15041504 then true
15051505 else cy())
15061506 then throw("Invalid removeMargin parameters")
15071507 else {
15081508 let iw = co(cp)
15091509 let fT = iw._1
15101510 let hw = iw._2
15111511 let hx = iw._3
15121512 let hy = iw._4
15131513 let ix = -(hd)
15141514 let iy = dd(fT, hw, hy, ix)
15151515 let dm = iy._1
15161516 let dn = iy._2
15171517 if ((dn != 0))
15181518 then throw("Invalid removed margin amount")
15191519 else {
15201520 let iz = ek(dm, dn, hx)
15211521 if (!(ch(iz, bE(), true)))
15221522 then throw(((("Too much margin removed: " + toString(iz)) + " < ") + toString(bE())))
15231523 else {
15241524 let iA = toBase58String(ao())
15251525 let iB = fX(cp)
15261526 let iC = iB._1
15271527 let iD = iB._2
15281528 let iE = if ((hd > iC))
15291529 then iC
15301530 else hd
15311531 let iF = if ((iC > hd))
15321532 then 0
15331533 else (hd - iC)
15341534 let iG = (iC - iE)
15351535 let iH = if ((iG > 0))
15361536 then nil
15371537 else gD(cp, iA)
15381538 let iI = if (((iE + iF) != hd))
15391539 then throw(((((("toRepay=" + toString(iE)) + " + toWithdraw=") + toString(iF)) + " != ") + toString(hd)))
15401540 else nil
15411541 if ((iI == iI))
15421542 then {
15431543 let iJ = if ((iF > 0))
15441544 then {
15451545 let iJ = invoke(ar(), "withdrawLocked", [iF], nil)
15461546 if ((iJ == iJ))
15471547 then nil
15481548 else throw("Strict value is not equal to itself.")
15491549 }
15501550 else nil
15511551 if ((iJ == iJ))
15521552 then {
15531553 let iK = if ((iE > 0))
15541554 then {
15551555 let iL = invoke(aw(), "repay", [cp, iE, iD], nil)
15561556 if ((iL == iL))
15571557 then [ScriptTransfer(cg.caller, iE, fromBase58String(iD))]
15581558 else throw("Strict value is not equal to itself.")
15591559 }
15601560 else nil
15611561 if ((iK == iK))
15621562 then ((((gH(cp, fT, dm, hx, cm(fT)) ++ (if ((iF > 0))
15631563 then hc(cg.caller, iF)
15641564 else nil)) ++ hf((bC() - hd))) ++ iH) ++ iK)
15651565 else throw("Strict value is not equal to itself.")
15661566 }
15671567 else throw("Strict value is not equal to itself.")
15681568 }
15691569 else throw("Strict value is not equal to itself.")
15701570 }
15711571 }
15721572 }
15731573 }
15741574 else throw("Strict value is not equal to itself.")
15751575 }
15761576
15771577
15781578
15791579 @Callable(cg)
15801580 func closePosition (gI,iM) = {
15811581 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
15821582 if ((hu == hu))
15831583 then {
15841584 let cp = cf(cg)
15851585 let iN = valueOrErrorMessage(addressFromString(cp), "Invalid caller")
15861586 if (if (if (if (if (!(cw(cp)))
15871587 then true
15881588 else !(cx()))
15891589 then true
15901590 else cy())
15911591 then true
15921592 else (0 >= gI))
15931593 then true
15941594 else (0 > iM))
15951595 then throw("Invalid closePosition parameters")
15961596 else {
15971597 let iO = co(cp)
15981598 let fT = iO._1
15991599 let hw = iO._2
16001600 let hx = iO._3
16011601 let hy = iO._4
16021602 let iP = if ((ba(fT) > gI))
16031603 then {
16041604 let hz = if ((fT > 0))
16051605 then aF
16061606 else aE
16071607 let hA = (hz == aE)
16081608 let iQ = dy((fT > 0), gI, true)
16091609 let eA = iQ._1
16101610 let cQ = iQ._2
16111611 let cR = iQ._3
16121612 let eH = iQ._4
16131613 let ez = if ((fT > 0))
16141614 then -(gI)
16151615 else gI
16161616 let iR = ef(cp, aN)
16171617 let hD = iR._1
16181618 let ee = iR._2
16191619 let iS = eo(cp, aN)
16201620 let iT = aR(ba(ez), ba(fT))
16211621 let eE = aT(ee, iT)
16221622 let iU = dd(fT, hw, hy, eE)
16231623 let dm = iU._1
16241624 let iV = iU._2
16251625 let di = iU._3
16261626 let hI = (ee - eE)
16271627 let hJ = if ((fT > 0))
16281628 then ((hD - eA) - hI)
16291629 else ((hI + hD) - eA)
16301630 let hM = ba(hJ)
16311631 let iW = aT(hM, iS)
16321632 let hK = (fT + ez)
16331633 let iX = cm(hK)
16341634 let eK = (bK() - eA)
16351635 if (if ((iM != 0))
16361636 then (iM > eA)
16371637 else false)
16381638 then throw(((("Limit error: " + toString(eA)) + " < ") + toString(iM)))
16391639 else $Tuple15(hK, iW, hM, iX, iV, eE, (ba((dm - iW)) + eE), cQ, cR, eH, eK, (cb() - (if ((hK > 0))
16401640 then ba(ez)
16411641 else 0)), (ca() - (if ((0 > hK))
16421642 then ba(ez)
16431643 else 0)), (bM() - (if ((hK > 0))
16441644 then eA
16451645 else 0)), (bL() - (if ((0 > hK))
16461646 then eA
16471647 else 0)))
16481648 }
16491649 else if ((gI > ba(fT)))
16501650 then throw("Invalid closePosition parameters")
16511651 else {
16521652 let iY = eB(cp, true)
16531653 let eA = iY._1
16541654 let iV = iY._2
16551655 let eE = iY._3
16561656 let eF = iY._4
16571657 let cQ = iY._5
16581658 let cR = iY._6
16591659 let eH = iY._7
16601660 let eK = iY._8
16611661 let ea = iY._9
16621662 let eI = iY._10
16631663 let eJ = iY._11
16641664 let hO = iY._12
16651665 let hP = iY._13
16661666 if (if ((iM != 0))
16671667 then (iM > eA)
16681668 else false)
16691669 then throw(((("Limit error: " + toString(eA)) + " < ") + toString(iM)))
16701670 else $Tuple15(0, 0, 0, 0, iV, eE, eF, cQ, cR, eH, eK, eI, eJ, hO, hP)
16711671 }
16721672 let hK = iP._1
16731673 let iW = iP._2
16741674 let hM = iP._3
16751675 let iX = iP._4
16761676 let iV = iP._5
16771677 let eE = iP._6
16781678 let eF = iP._7
16791679 let cQ = iP._8
16801680 let cR = iP._9
16811681 let eH = iP._10
16821682 let eK = iP._11
16831683 let eI = iP._12
16841684 let eJ = iP._13
16851685 let hO = iP._14
16861686 let hP = iP._15
16871687 if ((iV > 0))
16881688 then throw("Unable to close position with bad debt")
16891689 else {
16901690 let iZ = ba(eF)
16911691 let ja = (bC() - iZ)
16921692 let jb = if ((0 > ja))
16931693 then $Tuple2(0, ba(ja))
16941694 else $Tuple2(ja, 0)
16951695 let jc = jb._1
16961696 let jd = jb._2
16971697 let je = fX(cp)
16981698 let iC = je._1
16991699 let iD = je._2
17001700 let jf = if ((iC > 0))
17011701 then if ((iZ >= iC))
17021702 then {
17031703 let iL = invoke(aw(), "repay", [cp, iC, iD], nil)
17041704 if ((iL == iL))
17051705 then $Tuple2([ScriptTransfer(iN, iC, fromBase58String(iD))], (iZ - iC))
17061706 else throw("Strict value is not equal to itself.")
17071707 }
17081708 else {
17091709 let jg = invoke(aw(), "realizePartiallyAndClose", [cp, iZ, iD], nil)
17101710 if ((jg == jg))
17111711 then $Tuple2([ScriptTransfer(iN, iZ, fromBase58String(iD))], 0)
17121712 else throw("Strict value is not equal to itself.")
17131713 }
17141714 else $Tuple2(nil, iZ)
17151715 if ((jf == jf))
17161716 then {
17171717 let jh = jf._2
17181718 let ji = jf._1
17191719 let jj = if ((jh > 0))
17201720 then {
17211721 let jj = invoke(ar(), "withdrawLocked", [jh], nil)
17221722 if ((jj == jj))
17231723 then nil
17241724 else throw("Strict value is not equal to itself.")
17251725 }
17261726 else nil
17271727 if ((jj == jj))
17281728 then {
17291729 let hQ = invoke(as(), "notifyNotional", [cp, 0], nil)
17301730 if ((hQ == hQ))
17311731 then (((((if ((hK == 0))
17321732 then hb(cp)
17331733 else gH(cp, hK, iW, hM, iX)) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ (if ((jh > 0))
17341734 then hc(iN, jh)
17351735 else nil)) ++ hf(jc)) ++ ji)
17361736 else throw("Strict value is not equal to itself.")
17371737 }
17381738 else throw("Strict value is not equal to itself.")
17391739 }
17401740 else throw("Strict value is not equal to itself.")
17411741 }
17421742 }
17431743 }
17441744 else throw("Strict value is not equal to itself.")
17451745 }
17461746
17471747
17481748
17491749 @Callable(cg)
17501750 func liquidate (cp) = {
17511751 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
17521752 if ((hu == hu))
17531753 then {
17541754 let jk = eo(cp, aN)
17551755 let iz = if (dQ())
17561756 then {
17571757 let jl = eo(cp, aO)
17581758 bb(jk, jl)
17591759 }
17601760 else jk
17611761 if (if (if (if (!(ch(iz, bR(), false)))
17621762 then true
17631763 else !(cw(cp)))
17641764 then true
17651765 else !(cx()))
17661766 then true
17671767 else cy())
17681768 then throw("Unable to liquidate")
17691769 else if (if (if ((jk > bS()))
17701770 then (bT() > 0)
17711771 else false)
17721772 then (aK > bT())
17731773 else false)
17741774 then {
17751775 let jm = co(cp)
17761776 let fT = jm._1
17771777 let hw = jm._2
17781778 let hx = jm._3
17791779 let hy = jm._4
17801780 let hz = if ((fT > 0))
17811781 then aF
17821782 else aE
17831783 let hA = (hz == aE)
17841784 let eA = eu(cp, fT)
17851785 let jn = ef(cp, aN)
17861786 let hD = jn._1
17871787 let ee = jn._2
17881788 let jo = cP(hA, eA)
17891789 let ez = jo._1
17901790 let cQ = jo._2
17911791 let cR = jo._3
17921792 let eH = jo._4
17931793 let jp = aR(ba(ez), ba(fT))
17941794 let eE = aT(ee, jp)
17951795 let jq = dd(fT, hw, hy, eE)
17961796 let dm = jq._1
17971797 let dn = jq._2
17981798 let di = jq._3
17991799 let hI = (ee - eE)
18001800 let hJ = if ((fT > 0))
18011801 then ((hD - eA) - hI)
18021802 else ((hI + hD) - eA)
18031803 let jr = aT(eA, bS())
18041804 let js = (jr / 2)
18051805 let gk = (jr - js)
18061806 let iW = (dm - jr)
18071807 let hK = (fT + ez)
18081808 let hM = ba(hJ)
18091809 let iX = cm(hK)
18101810 let eK = (bK() - eA)
18111811 let ja = (bC() - jr)
18121812 let jt = if ((0 > ja))
18131813 then $Tuple2(0, ba(ja))
18141814 else $Tuple2(ja, 0)
18151815 let ju = jt._1
18161816 let jd = jt._2
18171817 let jv = fX(cp)
18181818 let iC = jv._1
18191819 let iD = jv._2
18201820 let jw = if ((iC > 0))
18211821 then {
18221822 let jx = aT(iC, jp)
18231823 let jg = invoke(aw(), "realizePartially", [cp, iD, jx], nil)
18241824 if ((jg == jg))
18251825 then nil
18261826 else throw("Strict value is not equal to itself.")
18271827 }
18281828 else nil
18291829 if ((jw == jw))
18301830 then {
18311831 let jj = invoke(ar(), "withdrawLocked", [jr], nil)
18321832 if ((jj == jj))
18331833 then {
18341834 let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
18351835 if ((ir == ir))
18361836 then {
18371837 let hQ = invoke(as(), "notifyNotional", [cp, hM], nil)
18381838 if ((hQ == hQ))
18391839 then (((gH(cp, hK, iW, hM, iX) ++ gU(cQ, cR, eH, eK, (cb() - (if ((hK > 0))
18401840 then ba(ez)
18411841 else 0)), (ca() - (if ((0 > hK))
18421842 then ba(ez)
18431843 else 0)), (bM() - (if ((hK > 0))
18441844 then eA
18451845 else 0)), (bL() - (if ((0 > hK))
18461846 then eA
18471847 else 0)))) ++ hc(cg.caller, js)) ++ hf(ju))
18481848 else throw("Strict value is not equal to itself.")
18491849 }
18501850 else throw("Strict value is not equal to itself.")
18511851 }
18521852 else throw("Strict value is not equal to itself.")
18531853 }
18541854 else throw("Strict value is not equal to itself.")
18551855 }
18561856 else {
18571857 let jy = eB(cp, false)
18581858 let dZ = jy._1
18591859 let dn = jy._2
18601860 let ea = jy._3
18611861 let eb = jy._4
18621862 let cQ = jy._5
18631863 let cR = jy._6
18641864 let eH = jy._7
18651865 let eK = jy._8
18661866 let eA = jy._9
18671867 let eI = jy._10
18681868 let eJ = jy._11
18691869 let hO = jy._12
18701870 let hP = jy._13
18711871 let jr = aT(eA, bS())
18721872 let js = (jr / 2)
18731873 let gk = (jr - js)
18741874 let ja = (bC() - jr)
18751875 let jz = if ((0 > ja))
18761876 then $Tuple2(0, ba(ja))
18771877 else $Tuple2(ja, 0)
18781878 let ju = jz._1
18791879 let jd = jz._2
18801880 let jA = fX(cp)
18811881 let iC = jA._1
18821882 let iD = jA._2
18831883 let jw = if ((iC > 0))
18841884 then {
18851885 let jg = invoke(aw(), "realizePartiallyAndClose", [cp, 0, iD], nil)
18861886 if ((jg == jg))
18871887 then nil
18881888 else throw("Strict value is not equal to itself.")
18891889 }
18901890 else nil
18911891 if ((jw == jw))
18921892 then {
18931893 let gd = if ((dn > 0))
18941894 then {
18951895 let jB = invoke(ar(), "exchangeFreeAndLocked", [dn], nil)
18961896 if ((jB == jB))
18971897 then nil
18981898 else throw("Strict value is not equal to itself.")
18991899 }
19001900 else nil
19011901 if ((gd == gd))
19021902 then {
19031903 let jj = invoke(ar(), "withdrawLocked", [jr], nil)
19041904 if ((jj == jj))
19051905 then {
19061906 let ir = invoke(ar(), "addFree", nil, [AttachedPayment(ao(), gk)])
19071907 if ((ir == ir))
19081908 then {
19091909 let hQ = invoke(as(), "notifyNotional", [cp, 0], nil)
19101910 if ((hQ == hQ))
19111911 then (((hb(cp) ++ gU(cQ, cR, eH, eK, eI, eJ, hO, hP)) ++ hc(cg.caller, js)) ++ hf(ju))
19121912 else throw("Strict value is not equal to itself.")
19131913 }
19141914 else throw("Strict value is not equal to itself.")
19151915 }
19161916 else throw("Strict value is not equal to itself.")
19171917 }
19181918 else throw("Strict value is not equal to itself.")
19191919 }
19201920 else throw("Strict value is not equal to itself.")
19211921 }
19221922 }
19231923 else throw("Strict value is not equal to itself.")
19241924 }
19251925
19261926
19271927
19281928 @Callable(cg)
19291929 func payFunding () = {
1930- let jC = bN()
1931- if (if (if ((jC > lastBlock.timestamp))
1932- then true
1933- else !(cx()))
1934- then true
1935- else cy())
1936- then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
1937- else {
1938- let fD = dz()
1939- let jD = fC()
1940- let fG = jD._1
1941- let fH = jD._2
1942- gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1943- }
1930+ let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1931+ if ((hu == hu))
1932+ then {
1933+ let jC = bN()
1934+ if (if (if ((jC > lastBlock.timestamp))
1935+ then true
1936+ else !(cx()))
1937+ then true
1938+ else cy())
1939+ then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(jC)))
1940+ else {
1941+ let fD = dz()
1942+ let jD = fC()
1943+ let fG = jD._1
1944+ let fH = jD._2
1945+ gx((jC + bQ()), (bY() + fH), (bZ() + fG), aR(fH, fD), aR(fG, fD))
1946+ }
1947+ }
1948+ else throw("Strict value is not equal to itself.")
19441949 }
19451950
19461951
19471952
19481953 @Callable(cg)
19491954 func syncTerminalPriceToOracle () = {
19501955 let jE = fy(dz())
19511956 let jF = jE._1
19521957 let jG = jE._2
19531958 let eF = jE._3
19541959 let jH = if ((eF != 0))
19551960 then {
19561961 let jH = invoke(ar(), "exchangeFreeAndLocked", [eF], nil)
19571962 if ((jH == jH))
19581963 then nil
19591964 else throw("Strict value is not equal to itself.")
19601965 }
19611966 else nil
19621967 if ((jH == jH))
1963- then gT(jF, jG)
1968+ then {
1969+ let cH = bF()
1970+ let cJ = bG()
1971+ (gT(jF, jG) ++ gL(aR(aT(cH, jF), aT(cJ, jG))))
1972+ }
19641973 else throw("Strict value is not equal to itself.")
19651974 }
19661975
19671976
19681977
19691978 @Callable(cg)
19701979 func view_calcRemainMarginWithFundingPayment (cp) = {
19711980 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
19721981 if ((hu == hu))
19731982 then {
19741983 let jI = co(cp)
19751984 let cs = jI._1
19761985 let eh = jI._2
19771986 let eq = jI._3
19781987 let ej = jI._4
19791988 let jJ = ef(cp, aN)
19801989 let dW = jJ._1
19811990 let ee = jJ._2
19821991 let jK = dd(cs, eh, ej, ee)
19831992 let dm = jK._1
19841993 let dn = jK._2
19851994 let di = jK._3
19861995 throw((((((aP(dm) + aP(di)) + aP(et(cp))) + aP(ee)) + aP(dn)) + aP(dW)))
19871996 }
19881997 else throw("Strict value is not equal to itself.")
19891998 }
19901999
19912000
19922001
19932002 @Callable(cg)
19942003 func view_getPegAdjustCost (gM) = {
19952004 let fx = fy(gM)
19962005 throw(toString(fx._3))
19972006 }
19982007
19992008
20002009
20012010 @Callable(cg)
20022011 func view_getTerminalAmmPrice () = {
20032012 let jL = fb()
20042013 let ff = jL._1
20052014 let fg = jL._2
20062015 let hj = aR(aT(ff, bH()), aT(fg, bI()))
20072016 throw(toString(hj))
20082017 }
20092018
20102019
20112020
20122021 @Callable(cg)
20132022 func view_getFunding () = {
20142023 let fD = dz()
20152024 let jM = fC()
20162025 let fG = jM._1
20172026 let fH = jM._2
20182027 let jN = aR(fH, fD)
20192028 let jO = aR(fG, fD)
20202029 throw((((aP(jN) + aP(jO)) + aP(eL())) + aP(dz())))
20212030 }
20222031
20232032
20242033
20252034 @Callable(cg)
20262035 func view_getBorrowedByTrader (cp) = {
20272036 let jP = fX(cp)
20282037 let iC = jP._1
20292038 let iD = jP._2
20302039 throw((aP(iC) + iD))
20312040 }
20322041
20332042
20342043
20352044 @Callable(cg)
20362045 func computeSpotPrice () = {
20372046 let fx = dP()
20382047 $Tuple2(nil, fx)
20392048 }
20402049
20412050
20422051
20432052 @Callable(cg)
20442053 func computeFeeForTraderWithArtifact (cp,fJ) = {
20452054 let fx = ga(cp, fJ)
20462055 $Tuple2(nil, fx)
20472056 }
20482057
20492058
20502059 @Verifier(jQ)
20512060 func jR () = sigVerify(jQ.bodyBytes, jQ.proofs[0], an())
20522061

github/deemru/w8io/169f3d6 
151.54 ms