tx · CgZ9fEfsaxJnVmCVghdFXUhFzH71f5EBNv8Ty9iJCc6K

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04300000 Waves

2023.07.05 11:14 [2652362] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "CgZ9fEfsaxJnVmCVghdFXUhFzH71f5EBNv8Ty9iJCc6K", "fee": 4300000, "feeAssetId": null, "timestamp": 1688544869617, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "2ujgPxWVULF4ieEiHYqpggsU4BtPT4hdGLjUxnc1918DpTcHA6ongQAWwSduTRWipcYRzM8f6r26PEPutSAx89EM" ], "script": "base64:BgKYAQgCEgcKBQgBCAEBEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBILCgkICAgICAgICAgSAwoBCBIDCgEIEgUKAwgIARIGCgQIAQgIEg4KDAgICAEEERgYEQEBGBIKCggICAgBBAgBGBIOCgwICAgBBBgYGBgYARgSCwoJCAgBAQEBAQEEagAHU0ZfUE9PTAICU0YAB1dYX1BPT0wCAldYAA9DQVBfRkVFX05PX0xPQU4CCWNhcE5vTG9hbgAMQ0FQX0ZFRV9MT0FOAgdjYXBMb2FuABRTVE9QTE9TU19GRUVfTk9fTE9BTgIOc3RvcExvc3NOb0xvYW4ADVNUT1BMT1NTX0xPQU4CDHN0b3BMb3NzTG9hbgAITE9BTl9GRUUCBGxvYW4AC05PX0xPQU5fRkVFAgZub0xvYW4ABk5PX0ZFRQIFbm9GZWUABlNDQUxFOACAwtcvAAdTQ0FMRTEwAIDIr6AlAAdTQ0FMRTE2CQC2AgEAgICE/qbe4REACkZFRV9TQ0FMRTYAwIQ9ABRrU0ZQb29sQUFzc2V0QmFsYW5jZQIPQV9hc3NldF9iYWxhbmNlABRrU0ZQb29sQkFzc2V0QmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAA9rU0ZQb29sQUFzc2V0SWQCCkFfYXNzZXRfaWQAD2tTRlBvb2xCQXNzZXRJZAIKQl9hc3NldF9pZAAOa1NGUG9vbFNoYXJlSWQCDnNoYXJlX2Fzc2V0X2lkABJrU0ZQb29sU2hhcmVTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAKa1NGUG9vbEZlZQIKY29tbWlzc2lvbgANa1VzZXJQb3NpdGlvbgIOX3VzZXJfcG9zaXRpb24AEWtVc2VyUG9zaXRpb25Qb29sAhNfdXNlcl9wb3NpdGlvbl9wb29sABFrVXNlckJvcnJvd0Ftb3VudAIcX3VzZXJfcG9zaXRpb25fYm9ycm93X2Ftb3VudAASa1VzZXJCb3Jyb3dBc3NldElkAh5fdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYXNzZXRfaWQAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAVa1VzZXJQb3NpdGlvbkludGVyZXN0AhdfdXNlcl9wb3NpdGlvbl9pbnRlcmVzdAAKa1Bvb2xUb3RhbAILX3Bvb2xfdG90YWwADmtQb29sVG90YWxMb2FuAhBfcG9vbF90b3RhbF9sb2FuABFrUG9vbEludGVyZXN0TG9hbgITX3Bvb2xfaW50ZXJlc3RfbG9hbgATa1Bvb2xJbnRlcmVzdE5vTG9hbgIWX3Bvb2xfaW50ZXJlc3Rfbm9fbG9hbgAOa1Bvb2xDYW5Cb3Jyb3cCEF9wb29sX2Nhbl9ib3Jyb3cAFWtBeGx5SW5GZWVXaXRob3V0TG9hbgIWX2F4bHlfZmVlX3dpdGhvdXRfbG9hbgASa0F4bHlJbkZlZVdpdGhMb2FuAhNfYXhseV9mZWVfd2l0aF9sb2FuABFrQXhseU5vTG9hbkNhcEZlZQIXX2F4bHlfZmVlX2NhcF93aXRoX2xvYW4AE2tBeGx5V2l0aExvYW5DYXBGZWUCFV9heGx5X2ZlZV9jYXBfbm9fbG9hbgAWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQIcX2F4bHlfZmVlX3N0b3Bsb3NzX3dpdGhfbG9hbgAUa0F4bHlTdG9wTG9zc0xvYW5GZWUCGl9heGx5X2ZlZV9zdG9wbG9zc19ub19sb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDl9wb29sX3NoYXJlX2lkAA5rUG9vbENhcENoYW5nZQIQX3Bvb2xfY2FwX2NoYW5nZQAPa1Rva2VuTGFzdFByaWNlAgpsYXN0X3ByaWNlAA5rUHJpY2VJbk9yYWNsZQIHX3R3YXA1QgANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QAB2tTd29wSWQCB3N3b3BfaWQABWtXeElkAgV3eF9pZAAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MACmV4Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULa0V4Q29udHJhY3QCHE5vIGV4Y2hhbmdlIGNvbnRyYWN0IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAA53eFN3YXBDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rV3hTd2FwQ29udHJhY3QCEk5vIHd4IHN3YXAgYWRkcmVzcwAGU1dPUElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQdrU3dvcElkAgpObyBzd29wIGlkAARXWElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQVrV3hJZAIITm8gd3ggaWQBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEQZ2V0QWRtaW5DYWxsQWRkcgAJAKcIAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0FkbWluQ2FsbFBLAhRDYW4ndCBnZXQgYWRtaW4gYWRkcgELaXNBZG1pbkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyCQEQZ2V0QWRtaW5DYWxsQWRkcgAFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNMYW5kQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJAQ5nZXRMZW5kU3J2QWRkcgAFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyCQCXCgUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEFBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xCQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQUFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xCQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBARiYWxBCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNhSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQRiYWxBBQRiYWxBBARiYWxCCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNiSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQRiYWxCBQRiYWxCCQCXCgUFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtnZXRQb29sRGF0YQIIcG9vbEFkZHIEdHlwZQMJAAACBQR0eXBlBQdTRl9QT09MCQENZ2V0U0ZQb29sRGF0YQEFCHBvb2xBZGRyAwkAAAIFBHR5cGUFB1dYX1BPT0wJAQ1nZXRXWFBvb2xEYXRhAQUIcG9vbEFkZHIJAAIBAg9Xcm9uZyBwb29sIHR5cGUBDmdldFNoYXJlU3VwcGx5Awhwb29sQWRkcgR0eXBlB3NoYXJlSWQDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRJrU0ZQb29sU2hhcmVTdXBwbHkCHENhbid0IGdldCBzaGFyZSBhc3NldCBzdXBwbHkDCQAAAgUEdHlwZQUHV1hfUE9PTAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFB3NoYXJlSWQCDVdyb25nIFNoYXJlSWQIcXVhbnRpdHkJAAIBAg9Xcm9uZyBwb29sIHR5cGUBEWdldFBvb2xUb3RhbFNoYXJlAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAAAARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4AAAEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAQR1c2VyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0AAAABAQpnZXRBeGx5RmVlAgRwb29sB2ZlZVR5cGUDCQAAAgUHZmVlVHlwZQUMQ0FQX0ZFRV9MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tBeGx5V2l0aExvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUPQ0FQX0ZFRV9OT19MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtBeGx5Tm9Mb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFCExPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEmtBeGx5SW5GZWVXaXRoTG9hbgMJAAACBQdmZWVUeXBlBQtOT19MT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRVrQXhseUluRmVlV2l0aG91dExvYW4DCQAAAgUHZmVlVHlwZQUGTk9fRkVFAAAJAAIBAg5Xcm9uZyBmZWUgdHlwZQEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyAhMlc19fZmFjdG9yeUNvbnRyYWN0AiJDYW4ndCBnZXQgV1ggZmFjdG9yeSBjb250cmFjdCBhZGRyBApmYWN0cm95Q2ZnCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQlmQ29udHJhY3QCESVzX19mYWN0b3J5Q29uZmlnAhhDYW4ndCBnZXQgV1ggZmFjdG9yeSBjZmcCAl9fCQEHQWRkcmVzcwEJANkEAQkAkQMCBQpmYWN0cm95Q2ZnAAEBDGFzc2V0SWRUb1N0cgEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgxOb3QgQXNzZXQgaWQBDmFzc2V0SWRGcm9tU3RyAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBEGdldEFzc2V0RGVjaW1hbHMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMACAQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIZGVjaW1hbHMJAAIBAhBDYW4ndCBmaW5kIGFzc2V0ARFnZXRBc3NldFByZWNpdGlvbgEHYXNzZXRJZAkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB2Fzc2V0SWQAAAAABQRET1dOAQ5nZXRBc3NldHNQcmljZQEIYXNzZXRJZHMKAQlnZXRQcmljZXMCAWEHYXNzZXRJZAQKYXNzZXRQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlCQDNCAIFAWEFCmFzc2V0UHJpY2UKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWdldFByaWNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAQ1nZXRTaGFyZVByaWNlAQdzaGFyZUlkBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sAiBDYW4ndCBmaW5kIHBvb2wgYWRkciBieSBzaGFyZSBpZAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQLJHQwOTIxMDkyNzUJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDYUlkCAULJHQwOTIxMDkyNzUCXzEEA2JJZAgFCyR0MDkyMTA5Mjc1Al8yBAhhQmFsYW5jZQgFCyR0MDkyMTA5Mjc1Al8zBAhiQmFsYW5jZQgFCyR0MDkyMTA5Mjc1Al80BAdkUHJpY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYUlkBQ5rUHJpY2VJbk9yYWNsZQQHZFByaWNlQgkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFA2JJZAUOa1ByaWNlSW5PcmFjbGUEC3NoYXJlU3VwcGx5CQEOZ2V0U2hhcmVTdXBwbHkDBQhwb29sQWRkcgUFcFR5cGUFB3NoYXJlSWQECkFQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBApCUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQOc2hhcmVQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQDc3VtCQBkAgkAawMFCGFCYWxhbmNlBQdkUHJpY2VBBQpBUHJlY2lzaW9uCQBrAwUIYkJhbGFuY2UFB2RQcmljZUIFCkJQcmVjaXNpb24JAGsDBQNzdW0FDnNoYXJlUHJlY2lzaW9u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MDEwNzU5MTEwMDkECmV2YWxQdXRJbkIIBQ0kdDAxMDc1OTExMDA5Al8yBApldmFsUHV0SW5BCAUNJHQwMTA3NTkxMTAwOQJfMQQFbHBJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAEEBWxwSW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgABAwkAZgIFBWxwSW5CBQVscEluQQQDcG10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQAICQCXCgUFBHBtdEEFA3BtdAkAZQIFBHBtdEIFA3BtdAUDYklkBQVscEluQgQDcG10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgAHCQCXCgUFA3BtdAUEcG10QgkAZQIFBHBtdEEFA3BtdAUDYUlkBQVscEluQQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYcmVwbGVuaXNoVHdvVG9rZW5zQnlUeXBlBghwb29sQWRkcgVwVHlwZQRwbXRBA2FJZARwbXRCA2JJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2FJZAUEcG10QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYklkBQRwbXRCBQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMBF3JlcGxlbmlzaE9uZVRva2VuQnlUeXBlBAhwb29sQWRkcgVwVHlwZQNwbXQFcG10SWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQVwbXRJZAUDcG10BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAMwIAgkAzAgCAgEwCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwEHc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCAAAFA25pbAUIcGF5bWVudHMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgVzdGFrZQUDbmlsBQhwYXltZW50cwEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAxMjQ5NDEyODUxAwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAxMjQ5NDEyODUxAl8xBAVmTmFtZQgFDSR0MDEyNDk0MTI4NTECXzIEBnBhcmFtcwgFDSR0MDEyNDk0MTI4NTECXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWNhbGNBbW91bnRUb1BheVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTMyNjQxMzU1MgMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFDGFtbnRHZXROb0ZlZQUEYmFsQgkAZQIFBGJhbEEFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUMYW1udEdldE5vRmVlBQRiYWxBCQBlAgUEYmFsQgUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxMzI2NDEzNTUyAl8xBAphc3NldFRvUGF5CAUNJHQwMTMyNjQxMzU1MgJfMgkAlAoCBQphc3NldFRvUGF5BQthbW91bnRUb1BheQERY2FsY0Ftb3VudFRvUGF5V1gHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDEzODkxMTQxOTkDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBRBhbW91bnRUb2tlblRvR2V0BQRiYWxCCQBlAgUEYmFsQQUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUQYW1vdW50VG9rZW5Ub0dldAUEYmFsQQkAZQIFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzODkxMTQxOTkCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzg5MTE0MTk5Al8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvQIECQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUFB0NFSUxJTkcJAJQKAgUKYXNzZXRUb1BheQUSYW1vdW50VG9QYXlXaXRoRmVlARBleGNoYW5nZURpcmVjdGx5CAR0eXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wEDSR0MDE0NTQ0MTQ2NjYJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0BAphc3NldFRvUGF5CAUNJHQwMTQ1NDQxNDY2NgJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxNDU0NDE0NjY2Al8yCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCDGNhbGxGdW5jdGlvbgkAzAgCAghleGNoYW5nZQkAzAgCCQDMCAIJAKQDAQUQYW1vdW50VG9rZW5Ub0dldAUDbmlsBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwEDSR0MDE0ODQxMTQ5NjMJARFjYWxjQW1vdW50VG9QYXlXWAcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0BAphc3NldFRvUGF5CAUNJHQwMTQ4NDExNDk2MwJfMQQLYW1vdW50VG9QYXkIBQ0kdDAxNDg0MTE0OTYzAl8yCQD8BwQFDnd4U3dhcENvbnRyYWN0AgRzd2FwCQDMCAIFEGFtb3VudFRva2VuVG9HZXQJAMwIAgUPYXNzZXRUb2tlblRvR2V0CQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsARNjYWxjUmVwbGVuaXNoTFBWaXJ0CAVwVHlwZQRwb29sBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wDCQAAAgUFcFR5cGUFB1NGX1BPT0wEA2ludgoAAUAJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAh9jYWxjTFBSZXBsZW5pc2hEaWZmUHJvcFJFQURPTkxZCQDMCAIJAMwIAgkApAMBBQRwbXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCAgEwBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNpbnYFA2ludgkAlAoCCgABQAkAkQMCBQNpbnYAAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFA2ludgABAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQVwVHlwZQUHV1hfUE9PTAQNJHQwMTU1NjYxNTkwNwMDCQBmAgUEcG10QQAACQBmAgUEcG10QgAABwQNJHQwMTU2NDcxNTc3MwkBGGNhbGNSZXBsZW5pc2hCeVR3b1Rva2VucwgFBXBUeXBlBQhwb29sQWRkcgUEcG10QQUDYUlkBQRwbXRCBQNiSWQFBGJhbEEFBGJhbEIEBnBtdEluQQgFDSR0MDE1NjQ3MTU3NzMCXzEEBnBtdEluQggFDSR0MDE1NjQ3MTU3NzMCXzIEBmNoYW5nZQgFDSR0MDE1NjQ3MTU3NzMCXzMECGNoYW5nZUlkCAUNJHQwMTU2NDcxNTc3MwJfNAQIbHBBbW91bnQIBQ0kdDAxNTY0NzE1NzczAl81CQCVCgMFBmNoYW5nZQUIY2hhbmdlSWQFCGxwQW1vdW50AwkAZgIFBHBtdEEAAAkAlQoDBQRwbXRBBQNhSWQAAAkAlQoDBQRwbXRCBQNiSWQAAAQGY2hhbmdlCAUNJHQwMTU1NjYxNTkwNwJfMQQIY2hhbmdlSWQIBQ0kdDAxNTU2NjE1OTA3Al8yBAVscFR3bwgFDSR0MDE1NTY2MTU5MDcCXzMEDSR0MDE1OTE0MTYxMzADCQBmAgUGY2hhbmdlAAAEA2ludgoAAUAJAPwHBAUIcG9vbEFkZHICEXB1dE9uZVRrblJFQURPTkxZCQDMCAIFCGNoYW5nZUlkCQDMCAIFBmNoYW5nZQUDbmlsBQNuaWwDCQABAgUBQAIPKEludCwgSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIkIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50LCBJbnQpAwkAAAIFA2ludgUDaW52CQCUCgIIBQNpbnYCXzEIBQNpbnYCXzMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgAAAAAEBWxwT25lCAUNJHQwMTU5MTQxNjEzMAJfMQQEbG9zcwgFDSR0MDE1OTE0MTYxMzACXzIJAJQKAgkAZAIFBWxwVHdvBQVscE9uZQUEbG9zcwkAAgECD1dyb25nIHBvb2wgdHlwZQESY2FsY1dpdGhkcmF3TFBWaXJ0CgVwVHlwZQRwb29sCGxwQW1vdW50B3NoYXJlSWQDYUlkA2JJZARiYWxBBGJhbEIMYm9ycm93QW1vdW50DWJvcnJvd0Fzc2V0SWQECHBvb2xBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBA0kdDAxNjQyNDE2OTI0AwkAAAIFBXBUeXBlBQdTRl9QT09MBANpbnYKAAFACQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIQd2l0aGRyYXdSRUFET05MWQkAzAgCCQDMCAIJAKQDAQUIbHBBbW91bnQJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgUDbmlsBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDaW52BQNpbnYJAJQKAgoAAUAJAJEDAgUDaW52AAADCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CgABQAkAkQMCBQNpbnYAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUFcFR5cGUFB1dYX1BPT0wEA2dldAkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgITZXZhbHVhdGVHZXRSRUFET05MWQkAzAgCBQdzaGFyZUlkCQDMCAIFCGxwQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fAwkAAAIFA2dldAUDZ2V0CQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNnZXQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2dldAACCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIPV3JvbmcgcG9vbCB0eXBlBApnZXRBbW91bnRBCAUNJHQwMTY0MjQxNjkyNAJfMQQKZ2V0QW1vdW50QggFDSR0MDE2NDI0MTY5MjQCXzIDCQBmAgUMYm9ycm93QW1vdW50AAAEDWFtb3VudFRvR2V0RXgDAwkAAAIFDWJvcnJvd0Fzc2V0SWQFA2FJZAkAZgIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QQcJAGUCBQxib3Jyb3dBbW91bnQFCmdldEFtb3VudEEDAwkAAAIFDWJvcnJvd0Fzc2V0SWQFA2JJZAkAZgIFDGJvcnJvd0Ftb3VudAUKZ2V0QW1vdW50QgcJAGUCBQxib3Jyb3dBbW91bnQFCmdldEFtb3VudEIAAAQNJHQwMTcyMDIxNzUwNQMJAGYCBQ1hbW91bnRUb0dldEV4AAADCQAAAgUFcFR5cGUFB1NGX1BPT0wJARFjYWxjQW1vdW50VG9QYXlTRgcFBHBvb2wFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQ1ib3Jyb3dBc3NldElkCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQNhSWQFA2JJZAUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAUNYm9ycm93QXNzZXRJZAkAlAoCAgAAAAQKYXNzZXRUb1BheQgFDSR0MDE3MjAyMTc1MDUCXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTcyMDIxNzUwNQJfMgMJAAACBQ1ib3Jyb3dBc3NldElkBQNhSWQJAJQKAgkAZQIJAGQCBQpnZXRBbW91bnRBBQ1hbW91bnRUb0dldEV4BQxib3Jyb3dBbW91bnQJAGUCBQpnZXRBbW91bnRCBQthbW91bnRUb1BheQkAlAoCCQBlAgUKZ2V0QW1vdW50QQULYW1vdW50VG9QYXkJAGUCCQBkAgUKZ2V0QW1vdW50QgUNYW1vdW50VG9HZXRFeAUMYm9ycm93QW1vdW50CQCUCgIFCmdldEFtb3VudEEFCmdldEFtb3VudEIBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBD3JlcGxlbmlzaEJ5VHlwZQoFcFR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgRMUElkBA9scEJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAMJAAACBQ9scEJhbGFuY2VCZWZvcmUFD2xwQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDE4NzAyMTkxMTgDAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcEDSR0MDE4NzY4MTg4ODQJARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBQVwVHlwZQUIcG9vbEFkZHIFBHBtdEEFA2FJZAUEcG10QgUDYklkBQRiYWxBBQRiYWxCBAZwbXRJbkEIBQ0kdDAxODc2ODE4ODg0Al8xBAZwbXRJbkIIBQ0kdDAxODc2ODE4ODg0Al8yBAZjaGFuZ2UIBQ0kdDAxODc2ODE4ODg0Al8zBAhjaGFuZ2VJZAgFDSR0MDE4NzY4MTg4ODQCXzQEA2ludgkBGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYFCHBvb2xBZGRyBQVwVHlwZQUGcG10SW5BBQNhSWQFBnBtdEluQgUDYklkAwkAAAIFA2ludgUDaW52CQCUCgIFBmNoYW5nZQUIY2hhbmdlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCUCgIFBHBtdEEFA2FJZAMJAGYCBQRwbXRCAAAJAJQKAgUEcG10QgUDYklkCQACAQIQcG10cyBtdXN0IGJlID4gMAQGY2hhbmdlCAUNJHQwMTg3MDIxOTExOAJfMQQIY2hhbmdlSWQIBQ0kdDAxODcwMjE5MTE4Al8yBANpbnYDCQBmAgUGY2hhbmdlAAAJARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQFCHBvb2xBZGRyBQVwVHlwZQUGY2hhbmdlBQhjaGFuZ2VJZAUDbmlsAwkAAAIFA2ludgUDaW52BA5scEJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkBAt0b3RhbFN0YWtlZAkAZQIFDmxwQmFsYW5jZUFmdGVyBQ9scEJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBAVpbnZMUAkBB3N0YWtlTFAEBQRwb29sBQVwVHlwZQUETFBJZAURdXNlclNoYXJlRm9yU3Rha2UDCQAAAgUFaW52TFAFBWludkxQCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARByZXBsZW5pc2hFbnRyaWVzCARwb29sBHVzZXIMc3Rha2VkQW1vdW50DWF4bHlGZWVBbW91bnQGcG9zTnVtB3NoYXJlSWQEdHlwZQh3aXRoTG9hbgQLdG90YWxBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3RvdGFsQW1vdW50TG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBA0kdDAxOTk3NjIwMjE0AwUId2l0aExvYW4JAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAZAIFD3RvdGFsQW1vdW50TG9hbgUMc3Rha2VkQW1vdW50CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUPdG90YWxBbW91bnRMb2FuBA9jdXJQb29sSW50ZXJlc3QIBQ0kdDAxOTk3NjIwMjE0Al8xBBN0b3RhbFN0YWtlZFdpdGhMb2FuCAUNJHQwMTk5NzYyMDIxNAJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBkAgULdG90YWxBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgUTdG90YWxTdGFrZWRXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMjI1NjUyMjYzMQkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAyMjU2NTIyNjMxAl8xBANCSWQIBQ0kdDAyMjU2NTIyNjMxAl8yBARiYWxBCAUNJHQwMjI1NjUyMjYzMQJfMwQEYmFsQggFDSR0MDIyNTY1MjI2MzECXzQEB3NoYXJlSWQIBQ0kdDAyMjU2NTIyNjMxAl81AwMJAQIhPQIFB3Rva2VuSWQFA0FJZAkBAiE9AgUHdG9rZW5JZAUDQklkBwkAAgECC1dyb25nIGFzc2V0BA0kdDAyMjcxNjIyNzk2AwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAyMjcxNjIyNzk2Al8xBARwbXRCCAUNJHQwMjI3MTYyMjc5NgJfMgQNJHQwMjI3OTkyMjkwMwkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAyMjc5OTIyOTAzAl8xBAJuZggFDSR0MDIyNzk5MjI5MDMCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgMJAGYCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQRbmV3SW50ZXJlc3ROb0xvYW4DCQBmAgkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEC2F4bHlGZWVMb2FuCQBrAwUKc3Rha2VkTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQxDQVBfRkVFX0xPQU4FCkZFRV9TQ0FMRTYEDWF4bHlGZWVOb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUPQ0FQX0ZFRV9OT19MT0FOBQpGRUVfU0NBTEU2BAdheGx5RmVlCQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgMJAAACBQdheGx5RmVlBQdheGx5RmVlCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4FD25ld0ludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBRFuZXdJbnRlcmVzdE5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkAZAIFEHRvdGFsU2hhcmVBbW91bnQFDHN0YWtlZEFtb3VudAUHYXhseUZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESd2l0aGRyYXdBbW91bnRDYWxjBARwb29sD3VzZXJDYW5XaXRoZHJhdwRkZWJ0C2JvcnJvd0Fzc2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAyNDY3MTI0NzQ3CQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUECGFzc2V0SWRBCAUNJHQwMjQ2NzEyNDc0NwJfMQQIYXNzZXRJZEIIBQ0kdDAyNDY3MTI0NzQ3Al8yBARiYWxBCAUNJHQwMjQ2NzEyNDc0NwJfMwQEYmFsQggFDSR0MDI0NjcxMjQ3NDcCXzQEB3NoYXJlSWQIBQ0kdDAyNDY3MTI0NzQ3Al81BAtjQmFsQUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULY0JhbEJCZWZvcmUFC2NCYWxCQmVmb3JlBANpbnYDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3AwkAAAIFA2ludgUDaW52CQD8BwQFCHBvb2xBZGRyAgNnZXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjUzMTAyNTM5OQkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDI1MzEwMjUzOTkCXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyNTMxMDI1Mzk5Al8yBA0kdDAyNTQwMjI2MjIyAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0AAADCQAAAgUFZXhJbnYFBWV4SW52BA9jQmFsQUFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBA9jQmFsQkFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQQkAlAoCCQBlAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUFBGRlYnQJAGUCBQ9jQmFsQkFmdGVyUmVwYXkFC2NCYWxCQmVmb3JlCQCUCgIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlCQBlAgkAZQIFD2NCYWxCQWZ0ZXJSZXBheQULY0JhbEJCZWZvcmUFBGRlYnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgUNdG9rZW5zQW1vdW50QQUNdG9rZW5zQW1vdW50QgQHdG9Vc2VyQQgFDSR0MDI1NDAyMjYyMjICXzEEB3RvVXNlckIIBQ0kdDAyNTQwMjI2MjIyAl8yCQCZCgcFB3RvVXNlckEFCGFzc2V0SWRBBQd0b1VzZXJCBQhhc3NldElkQgUKY0JhbEFBZnRlcgUKY0JhbEJBZnRlcgUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAR1c2VyBHBvb2wFcG9zSWQIYm9ycm93ZWQEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDHVzZXJJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QEDHBvb2xJbnRlcmVzdAMFCGJvcnJvd2VkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4JAGQCBQdwQW1vdW50CQBrAwUHcEFtb3VudAkAZQIFDHBvb2xJbnRlcmVzdAUMdXNlckludGVyZXN0BQdTQ0FMRTEwAQ53aXRoZHJhd1RvVXNlcgQEdXNlcgRwb29sBXBvc0lkCHN0b3BMb3NzBAdwQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAAABA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAABA5wb29sVG90YWxTaGFyZQkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQIdXNlckFkZHIJAQdBZGRyZXNzAQkA2QQBBQR1c2VyBAtib3Jyb3dBc3NldAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEmtVc2VyQm9ycm93QXNzZXRJZAIABARkZWJ0AwkAZgIFDGJvcnJvd0Ftb3VudAAACgABQAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAgxnZXRBc3NldERlYnQJAMwIAgcJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkCQDMCAIFC2JvcnJvd0Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAAQNJHQwMjc2MTAyNzc2MwkBEndpdGhkcmF3QW1vdW50Q2FsYwQFBHBvb2wFD3VzZXJDYW5XaXRoZHJhdwUEZGVidAULYm9ycm93QXNzZXQDCQAAAgUNJHQwMjc2MTAyNzc2MwUNJHQwMjc2MTAyNzc2MwQHc2hhcmVJZAgFDSR0MDI3NjEwMjc3NjMCXzcECmNCYWxCQWZ0ZXIIBQ0kdDAyNzYxMDI3NzYzAl82BApjQmFsQUFmdGVyCAUNJHQwMjc2MTAyNzc2MwJfNQQIYXNzZXRJZEIIBQ0kdDAyNzYxMDI3NzYzAl80BA10b1VzZXJBbW91bnRCCAUNJHQwMjc2MTAyNzc2MwJfMwQIYXNzZXRJZEEIBQ0kdDAyNzYxMDI3NzYzAl8yBA10b1VzZXJBbW91bnRBCAUNJHQwMjc2MTAyNzc2MwJfMQQLY2xvc2VEYnRJbnYDCQBmAgUEZGVidAAACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACCHJlcGF5Rm9yCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfBQVwb3NJZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQtib3Jyb3dBc3NldAUEZGVidAUDbmlsAAADCQAAAgULY2xvc2VEYnRJbnYFC2Nsb3NlRGJ0SW52CQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCBQ5wb29sVG90YWxTaGFyZQUPdXNlckNhbldpdGhkcmF3CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9Vc2VyQW1vdW50QgkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIFA25pbAkBDmdldEN1cnNFbnRyaWVzAwUIYXNzZXRJZEEFCGFzc2V0SWRCBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxwYXJzZVJlcXVlc3QBCXJlcXVlc3RJZAQHcmVxdWVzdAkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQJAKwCAgITTm8gcmVxdWVzdCB3aXRoIGlkIAUJcmVxdWVzdElkAgEsBAR1c2VyCQCRAwIFB3JlcXVlc3QAAAQEcG9vbAkAkQMCBQdyZXF1ZXN0AAEEBHBtdEEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAIEA0FJZAkAkQMCBQdyZXF1ZXN0AAMEBHBtdEIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAQEA0JJZAkAkQMCBQdyZXF1ZXN0AAUEBGJhbEEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAYEBGJhbEIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAcEB3NoYXJlSWQJAJEDAgUHcmVxdWVzdAAIBAdid0Fzc2V0CQCRAwIFB3JlcXVlc3QACQQIYndBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAoJAJ0KCwUEdXNlcgUEcG9vbAUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQFB2J3QXNzZXQFCGJ3QW1vdW50ARBjYWxjQm9ycm93QW1vdW50BgRwbXRBBHBtdEIDYUlkA2JJZAhsZXZlcmFnZQhib3Jyb3dJZAQHZFByaWNlQQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFA2FJZAUOa1ByaWNlSW5PcmFjbGUEB2RQcmljZUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNiSWQFDmtQcmljZUluT3JhY2xlBAZkZWNQckEJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBAZkZWNQckIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNiSWQAAAAABQRET1dOBAxwYXlkSW5Eb2xsYXIJAGQCCQBrAwUHZFByaWNlQQUEcG10QQUGZGVjUHJBCQBrAwUHZFByaWNlQgUEcG10QgUGZGVjUHJCBA0kdDAyOTQwMzI5NTAwAwkAAAIFCGJvcnJvd0lkBQNhSWQJAJQKAgUHZFByaWNlQQUGZGVjUHJBCQCUCgIFB2RQcmljZUIFBmRlY1ByQgQLYm9ycm93UHJpY2UIBQ0kdDAyOTQwMzI5NTAwAl8xBAtib3Jyb3dEZWNQcggFDSR0MDI5NDAzMjk1MDACXzIJAGsDCQBrAwUMcGF5ZEluRG9sbGFyCQBlAgUIbGV2ZXJhZ2UAZABkBQtib3Jyb3dEZWNQcgULYm9ycm93UHJpY2URAWkBF2NhbGNQcmljZUltcGFjdEVWQUxPTkxZBQRwb29sCGxldmVyYWdlCGJvcnJvd0lkBHBtdEEEcG10QgMDCQBmAgBkBQhsZXZlcmFnZQYJAGYCBQhsZXZlcmFnZQCsAgkAAgECH0xldmVyYWdlIGNhbid0IGJlIDwxMDAgYW5kID4zMDAEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAyOTkxODMwMDA4CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDI5OTE4MzAwMDgCXzEEA0JJZAgFDSR0MDI5OTE4MzAwMDgCXzIEBGJhbEEIBQ0kdDAyOTkxODMwMDA4Al8zBARiYWxCCAUNJHQwMjk5MTgzMDAwOAJfNAQHc2hhcmVJZAgFDSR0MDI5OTE4MzAwMDgCXzUEDGJvcnJvd0Ftb3VudAMJAGYCBQhsZXZlcmFnZQBkCQEQY2FsY0JvcnJvd0Ftb3VudAYFBHBtdEEFBHBtdEIFA0FJZAUDQklkBQhsZXZlcmFnZQUIYm9ycm93SWQAAAQNJHQwMzAxNDMzMDI1MAMJAAACBQhib3Jyb3dJZAUDQUlkCQCUCgIJAGQCBQRwbXRBBQxib3Jyb3dBbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIFDGJvcnJvd0Ftb3VudAQGcGF5SW5BCAUNJHQwMzAxNDMzMDI1MAJfMQQGcGF5SW5CCAUNJHQwMzAxNDMzMDI1MAJfMgQNJHQwMzAyNTMzMDM0NgkBE2NhbGNSZXBsZW5pc2hMUFZpcnQIBQVwVHlwZQUEcG9vbAUGcGF5SW5BBQNBSWQFBnBheUluQgUDQklkBQRiYWxBBQRiYWxCBAhscEFtb3VudAgFDSR0MDMwMjUzMzAzNDYCXzEEBGxvc3MIBQ0kdDAzMDI1MzMwMzQ2Al8yBAlpbXBhY3RNb2QDCQBmAgAABQRsb3NzCQBoAgUEbG9zcwD///////////8BBQRsb3NzCQCUCgIFA25pbAkAzAgCBQlpbXBhY3RNb2QFA25pbAFpARpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQEHc2hhcmVJZAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAkAlAoCBQNuaWwFC3NoYXJlUHJpY2VzAWkBImdldFVzZXJQb3NpdGlvblNoYXJlQW1vdW50UkVBRE9OTFkCBHVzZXIGcG9zTnVtBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUGcG9zTnVtBRFrVXNlclBvc2l0aW9uUG9vbAIQVW5rbm93biBwb3NpdGlvbgQMYm9ycm93QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUGcG9zTnVtCQBmAgUMYm9ycm93QW1vdW50AAAJAJQKAgUDbmlsBQ91c2VyQ2FuV2l0aGRyYXcBaQEgZ2V0VXNlclBvc2l0aW9uSW5Eb2xsYXJzUkVBRE9OTFkDBHVzZXIFcG9vbHMGcG9zTnVtCgEHdXNlclBvcwIBYQRwb29sBA0kdDAzMTE1OTMxMTkzBQFhBAh0b3RhbFBvcwgFDSR0MDMxMTU5MzExOTMCXzEEB3Bvc0RlYnQIBQ0kdDAzMTE1OTMxMTkzAl8yBAVpbmRleAgFDSR0MDMxMTU5MzExOTMCXzMEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzMTI4NTMxMzc1CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDMxMjg1MzEzNzUCXzEEA0JJZAgFDSR0MDMxMjg1MzEzNzUCXzIEBGJhbEEIBQ0kdDAzMTI4NTMxMzc1Al8zBARiYWxCCAUNJHQwMzEyODUzMTM3NQJfNAQHc2hhcmVJZAgFDSR0MDMxMjg1MzEzNzUCXzUEDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4BRFrVXNlckJvcnJvd0Ftb3VudAAABA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sCQCRAwIFBnBvc051bQUFaW5kZXgJAGYCBQxib3Jyb3dBbW91bnQAAAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAQKZGVjUHJTaGFyZQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB3NoYXJlSWQAAAAABQRET1dOBAZzaGFyZUQJAGsDBQ91c2VyQ2FuV2l0aGRyYXcFC3NoYXJlUHJpY2VzBQpkZWNQclNoYXJlAwkAAAIFDGJvcnJvd0Ftb3VudAAACQCVCgMJAM0IAgUIdG90YWxQb3MFBnNoYXJlRAkAzQgCBQdwb3NE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cGF5bWVudHMAAAZhbW91bnQFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA0JJZAkAAgECDVdyb25nIHBheW1lbnQJAAIBAhxPbmUgb3IgdHdvIHBheW1lbnRzIGV4cGVjdGVkBARwbXRBCAUNJHQwMzI5ODMzMzYyMAJfMQQJcG10QXNzZXRBCAUNJHQwMzI5ODMzMzYyMAJfMgQEcG10QggFDSR0MDMyOTgzMzM2MjACXzMECXBtdEFzc2V0QggFDSR0MDMyOTgzMzM2MjACXzQECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEJAKUIAQgFAWkGY2FsbGVyAwkAZgIFCGxldmVyYWdlAGQEDGJvcnJvd0Ftb3VudAkBEGNhbGNCb3Jyb3dBbW91bnQGBQRwbXRBBQRwbXRCBQlwbXRBc3NldEEFCXBtdEFzc2V0QgUIbGV2ZXJhZ2UFCGJvcnJvd0lkBAdyZXF1ZXN0CQC5CQIJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUEcG9vbAkAzAgCCQCkAwEFBHBtdEEJAMwIAgUJcG10QXNzZXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCBQlwbXRBc3NldEIJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50BQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIRcmVwbGVuaXNoRnJvbUxhbmQJAMwIAgkApAMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDG5ld1JlcXVlc3RJZAIYQ2FuJ3QgY3JlYXRlIG5ldyByZXF1ZXN0BQNuaWwEA2ludgkA/QcECQEOZ2V0TGVuZFNydkFkZHIAAg1mbGFzaFBvc2l0aW9uBQRhcmdzBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMzQ1NDgzNDY2MAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzNDU0ODM0NjYwAl8xBAdheGx5RmVlCAUNJHQwMzQ1NDgzNDY2MAJfMgkAzggCCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wJAKUIAQgFAWkGY2FsbGVyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzAwUDQUlkBQNCSWQFB3NoYXJlSWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBwFpARRjcmVhdGVVcGRhdGVTdG9wTG9zcwQFcG9zSWQGcG9vbElkB2Fzc2V0SWQFcHJpY2UEEHRva2VuT3JhY2xlUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQdhc3NldElkBQ5rUHJpY2VJbk9yYWNsZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBnBvb2xJZAIBXwkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAAIBAhpUaGVyZSBhcmUgbm8gdXNlciBwb3NpdGlvbgMJAGcCAAAFBXByaWNlCQACAQIcUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCBQVwcmljZQUQdG9rZW5PcmFjbGVQcmljZQkAAgECK1ByaWNlIG11c3QgYmUgbGVzcyB0aGFuIGN1cnJlbnQgdG9rZW4gcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUFcHJpY2UFA25pbAFpAQ5kZWxldGVTdG9wTG9zcwMFcG9zSWQGcG9vbElkB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUFcG9zSWQCAV8FBnBvb2xJZAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwUDbmlsAWkBBGluaXQJDG1vbmV5Qm94QWRkcg1zZkZhcm1pbmdBZGRyCGxlbmRBZGRyD3ByaWNlT3JhY2xlQWRkchBrZWVwZXJFeENvbnRyYWN0Dnd4U3dhcENvbnRyYWN0C3N3b3BBc3NldElkCXd4QXNzZXRJZAthZG1pblB1YktleQMJAQlpc0RlZmluZWQBCQCiCAEFCWtNb25leUJveAkAAgECDkFscmVhZHkgaW5pdGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtNb25leUJveAUMbW9uZXlCb3hBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDmtTRkZhcm1pbmdBZGRyBQ1zZkZhcm1pbmdBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtMZW5kU2VydmljZQUIbGVuZEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa1ByaWNlT3JhY2xlBQ9wcmljZU9yYWNsZUFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgULa0V4Q29udHJhY3QFEGtlZXBlckV4Q29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa1d4U3dhcENvbnRyYWN0BQ53eFN3YXBDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBQdrU3dvcElkBQtzd29wQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQVrV3hJZAUJd3hBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtBZG1pbkNhbGxQSwULYWRtaW5QdWJLZXkFA25pbAFpARBjcmVhdGVOZXdSZXF1ZXN0AQZwYXJhbXMJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQMbmV3UmVxdWVzdElkCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrUmVxdWVzdEl0ZXIAAAABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCkAwEFDG5ld1JlcXVlc3RJZAUKa1JlcXVlc3RJZAUGcGFyYW1zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrUmVxdWVzdEl0ZXIFDG5ld1JlcXVlc3RJZAUDbmlsBQxuZXdSZXF1ZXN0SWQBaQERcmVwbGVuaXNoRnJvbUxhbmQBCXJlcXVlc3RJZAkBC3ZhbHVlT3JFbHNlAgkBCmlzTGFuZENhbGwBBQFpBA0kdDAzNzExNzM3MjIxCQEMcGFyc2VSZXF1ZXN0AQUJcmVxdWVzdElkBAR1c2VyCAUNJHQwMzcxMTczNzIyMQJfMQQEcG9vbAgFDSR0MDM3MTE3MzcyMjECXzIEBHBtdEEIBQ0kdDAzNzExNzM3MjIxAl8zBANBSWQIBQ0kdDAzNzExNzM3MjIxAl80BARwbXRCCAUNJHQwMzcxMTczNzIyMQJfNQQDQklkCAUNJHQwMzcxMTczNzIyMQJfNgQEYmFsQQgFDSR0MDM3MTE3MzcyMjECXzcEBGJhbEIIBQ0kdDAzNzExNzM3MjIxAl84BAdzaGFyZUlkCAUNJHQwMzcxMTczNzIyMQJfOQQHYndBc3NldAgFDSR0MDM3MTE3MzcyMjEDXzEwBAhid0Ftb3VudAgFDSR0MDM3MTE3MzcyMjEDXzExAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFB2J3QXNzZXQGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYndBbW91bnQJAAIBAg1Xcm9uZyBwYXltZW50BA0kdDAzNzQxMTM3NTM1AwkAAAIFA0FJZAUHYndBc3NldAkAlAoCCQBkAgUEcG10QQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBHBtdEIJAJQKAgUEcG10QQkAZAIFBHBtdEIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdwbXRBbGxBCAUNJHQwMzc0MTEzNzUzNQJfMQQHcG10QWxsQggFDSR0MDM3NDExMzc1MzUCXzIEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAzNzYxNzM3NzMyCQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFCExPQU5fRkVFBQdwbXRBbGxBBQNBSWQFB3BtdEFsbEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDM3NjE3Mzc3MzICXzEEB2F4bHlGZWUIBQ0kdDAzNzYxNzM3NzMyAl8yBAZwb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBQR1c2VyBA1ib3Jyb3dFbnRyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BQhid0Ftb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEmtVc2VyQm9ycm93QXNzZXRJZAUHYndBc3NldAUDbmlsBAdlbnRyaWVzCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wFBHVzZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFBnBvc051bQUHc2hhcmVJZAUFcFR5cGUGCQCUCgIJAM0IAgkAzggCCQDOCAIFB2VudHJpZXMJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkBQ1ib3Jyb3dFbnRyaWVzCQELRGVsZXRlRW50cnkBCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAUKdXNlclN0YWtlZAFpAQlsaXF1aWRhdGUDBHVzZXIFcG9zSWQPbGlxdWlkYXRlQW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJQb3NpdGlvblBvb2wCC25vIHBvc2l0aW9uBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMzg1MTEzODYwMQkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAzODUxMTM4NjAxAl8xBANCSWQIBQ0kdDAzODUxMTM4NjAxAl8yBARiYWxBCAUNJHQwMzg1MTEzODYwMQJfMwQEYmFsQggFDSR0MDM4NTExMzg2MDECXzQEB3NoYXJlSWQIBQ0kdDAzODUxMTM4NjAxAl81BAZhbW91bnQJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPbGlxdWlkYXRlQW1vdW50BAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJCb3Jyb3dBbW91bnQEC2JvcnJvd0Fzc2V0CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEmtVc2VyQm9ycm93QXNzZXRJZAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAMJAAACBQxib3Jyb3dBbW91bnQAAAkAAgECK1lvdSBjYW4ndCBsaXF1aWRhdGUgcG9zaXRpb24gd2l0aG91dCBib3Jyb3cJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBlAgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uCQBlAgUPdXNlckNhbldpdGhkcmF3BQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAWkBCHN0b3BMb3NzBAR1c2VyBXBvc0lkBHBvb2wHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQQdG9rZW5PcmFjbGVQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MJAAIBAghObyBlbnRyeQkAzQgCCQEOd2l0aGRyYXdUb1VzZXIECQClCAEIBQFpBmNhbGxlcgUEcG9vbAkApAMBBQVwb3NJZAYJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwFpARJjYXBpdGFsaXplRXhLZWVwZXIMBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBA0kdDA0MDM2NDQwNTU4AwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwNDAzNjQ0MDU1OAJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwNDAzNjQ0MDU1OAJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VLZWVwZXIKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJYW1vdW50c0luBQlhZGRyZXNzZXMFD2Fzc2V0c1RvUmVjZWl2ZQULZXN0UmVjZWl2ZWQFEXNsaXBwYWdlVG9sZXJhbmNlBQttaW5SZWNlaXZlZAUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhQdXp6bGUIBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQxMjQzNDE0MzcDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MTI0MzQxNDM3Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MTI0MzQxNDM3Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVB1enpsZQYFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhTd29wRmkMBHBvb2wEdHlwZQl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQpleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBA0kdDA0MjE4ODQyMzgyAwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwNDIxODg0MjM4MgJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwNDIxODg0MjM4MgJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VTd29wRmkKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUKZXhjaGFuZ2VycwUOZXhjaGFuZ2Vyc1R5cGUFBWFyZ3MxBQVhcmdzMgURcm91dGluZ0Fzc2V0c0tleXMFEm1pbkFtb3VudFRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpAQtpbml0TmV3UG9vbAkEdHlwZQhwb29sQWRkcgtpbkZlZU5vTG9hbglpbkZlZUxvYW4MY2FwRmVlTm9Mb2FuDmNhcEZlZVdpdGhMb2FuEXN0b3Bsb3NzRmVlTm9Mb2FuE3N0b3Bsb3NzRmVlV2l0aExvYW4JY2FuQm9ycm93CQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwMJAQIhPQIFBHR5cGUFB1NGX1BPT0wJAQIhPQIFBHR5cGUFB1dYX1BPT0wHCQACAQIKV3JvbmcgdHlwZQQNJHQwNDMxMjM0MzIxNwkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFCHBvb2xBZGRyBQR0eXBlBANhSWQIBQ0kdDA0MzEyMzQzMjE3Al8xBANiSWQIBQ0kdDA0MzEyMzQzMjE3Al8yBARhQmFsCAUNJHQwNDMxMjM0MzIxNwJfMwQEYkJhbAgFDSR0MDQzMTIzNDMyMTcCXzQEB3NoYXJlSWQIBQ0kdDA0MzEyMzQzMjE3Al81CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRVrQXhseUluRmVlV2l0aG91dExvYW4FC2luRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRJrQXhseUluRmVlV2l0aExvYW4FCWluRmVlTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgURa0F4bHlOb0xvYW5DYXBGZWUFDGNhcEZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUTa0F4bHlXaXRoTG9hbkNhcEZlZQUOY2FwRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUFEXN0b3Bsb3NzRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRRrQXhseVN0b3BMb3NzTG9hbkZlZQUTc3RvcGxvc3NGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgURa1Bvb2xJbnRlcmVzdExvYW4AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUTa1Bvb2xJbnRlcmVzdE5vTG9hbgAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUFa1Bvb2wFCHBvb2xBZGRyBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2hhcmVJZAUKa1NoYXJlUG9vbAUIcG9vbEFkZHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgUIcG9vbEFkZHIFDmtQb29sQ2FuQm9ycm93BQljYW5Cb3Jyb3cFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXl79Zlo", "height": 2652362, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G7rzmQHAtsfUpwa9mB74gfth6zoUZETuovY4X2y2dZXb Next: BtYQJkRwc9kjrptGXP8ME5zufX8vGongHKvMV4rq7ebF Diff:
OldNewDifferences
418418 $Tuple5(bB, bJ, (bC - bJ), az, bI)
419419 }
420420 else {
421- let bJ = parseIntValue(bG[7])
421+ let bJ = parseIntValue(bF[7])
422422 $Tuple5(bJ, bC, (bB - bJ), ay, bH)
423423 }
424424 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = toBigInt(10000000000000000)
2727
2828 let m = 1000000
2929
3030 let n = "A_asset_balance"
3131
3232 let o = "B_asset_balance"
3333
3434 let p = "A_asset_id"
3535
3636 let q = "B_asset_id"
3737
3838 let r = "share_asset_id"
3939
4040 let s = "share_asset_supply"
4141
4242 let t = "commission"
4343
4444 let u = "_user_position"
4545
4646 let v = "_user_position_pool"
4747
4848 let w = "_user_position_borrow_amount"
4949
5050 let x = "_user_position_borrow_asset_id"
5151
5252 let y = "_user_position_number"
5353
5454 let z = "_user_position_interest"
5555
5656 let A = "_pool_total"
5757
5858 let B = "_pool_total_loan"
5959
6060 let C = "_pool_interest_loan"
6161
6262 let D = "_pool_interest_no_loan"
6363
6464 let E = "_pool_can_borrow"
6565
6666 let F = "_axly_fee_without_loan"
6767
6868 let G = "_axly_fee_with_loan"
6969
7070 let H = "_axly_fee_cap_with_loan"
7171
7272 let I = "_axly_fee_cap_no_loan"
7373
7474 let J = "_axly_fee_stoploss_with_loan"
7575
7676 let K = "_axly_fee_stoploss_no_loan"
7777
7878 let L = "_request_id"
7979
8080 let M = "requests_iter"
8181
8282 let N = "pool_"
8383
8484 let O = "_pool_share_id"
8585
8686 let P = "_pool_cap_change"
8787
8888 let Q = "last_price"
8989
9090 let R = "_twap5B"
9191
9292 let S = "_stop_loss"
9393
9494 let T = "axly_money_box"
9595
9696 let U = "swopfi_farming_addr"
9797
9898 let V = "lend_service_addr"
9999
100100 let W = "admin_call_pub_key"
101101
102102 let X = "price_oracle"
103103
104104 let Y = "exchange_contract"
105105
106106 let Z = "wx_swap_contract"
107107
108108 let aa = "swop_id"
109109
110110 let ab = "wx_id"
111111
112112 let ac = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No axly moneyBox address")))
113113
114114 let ad = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "No exchange contract address")))
115115
116116 let ae = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No price oracle address")))
117117
118118 let af = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "No wx swap address")))
119119
120120 let ag = fromBase58String(valueOrErrorMessage(getString(this, aa), "No swop id"))
121121
122122 let ah = fromBase58String(valueOrErrorMessage(getString(this, ab), "No wx id"))
123123
124124 func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "Can't get lend service addr")))
125125
126126
127127 func aj () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, W), "Can't get admin addr")))
128128
129129
130130 func ak (al) = if ((al.caller == aj()))
131131 then unit
132132 else throw("Only admin can call this function")
133133
134134
135135 func am (al) = if ((al.caller == this))
136136 then unit
137137 else throw("Only contract itself can call this function")
138138
139139
140140 func an (al) = if ((al.caller == ai()))
141141 then unit
142142 else throw("Only land contract can call this function")
143143
144144
145145 func ao (ap) = {
146146 let aq = ap
147147 if ($isInstanceOf(aq, "ByteVector"))
148148 then {
149149 let ar = aq
150150 assetBalance(this, ar)
151151 }
152152 else if ($isInstanceOf(aq, "Unit"))
153153 then {
154154 let as = aq
155155 wavesBalance(this).available
156156 }
157157 else throw("Match error")
158158 }
159159
160160
161161 func at (au) = $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"), valueOrErrorMessage(getString(au, r), "Can't get share asset id"))
162162
163163
164164 func av (au) = {
165165 let aw = {
166166 let ax = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil)
167167 if ($isInstanceOf(ax, "List[Any]"))
168168 then ax
169169 else throw(($getType(ax) + " couldn't be cast to List[Any]"))
170170 }
171171 if ((aw == aw))
172172 then {
173173 let ay = valueOrErrorMessage({
174174 let ax = aw[4]
175175 if ($isInstanceOf(ax, "String"))
176176 then ax
177177 else unit
178178 }, "Can't get pool A asset id")
179179 let az = valueOrErrorMessage({
180180 let ax = aw[5]
181181 if ($isInstanceOf(ax, "String"))
182182 then ax
183183 else unit
184184 }, "Can't get pool B asset id")
185185 let aA = valueOrErrorMessage({
186186 let ax = aw[3]
187187 if ($isInstanceOf(ax, "String"))
188188 then ax
189189 else unit
190190 }, "Can't get pool LP asset id")
191191 let aB = {
192192 let ax = invoke(au, "getAccBalanceWrapperREADONLY", [ay], nil)
193193 if ($isInstanceOf(ax, "Int"))
194194 then ax
195195 else throw(($getType(ax) + " couldn't be cast to Int"))
196196 }
197197 if ((aB == aB))
198198 then {
199199 let aC = {
200200 let ax = invoke(au, "getAccBalanceWrapperREADONLY", [az], nil)
201201 if ($isInstanceOf(ax, "Int"))
202202 then ax
203203 else throw(($getType(ax) + " couldn't be cast to Int"))
204204 }
205205 if ((aC == aC))
206206 then $Tuple5(ay, az, aB, aC, aA)
207207 else throw("Strict value is not equal to itself.")
208208 }
209209 else throw("Strict value is not equal to itself.")
210210 }
211211 else throw("Strict value is not equal to itself.")
212212 }
213213
214214
215215 func aD (au,aE) = if ((aE == a))
216216 then at(au)
217217 else if ((aE == b))
218218 then av(au)
219219 else throw("Wrong pool type")
220220
221221
222222 func aF (au,aE,aA) = if ((aE == a))
223223 then valueOrErrorMessage(getInteger(au, s), "Can't get share asset supply")
224224 else if ((aE == b))
225225 then valueOrErrorMessage(assetInfo(fromBase58String(aA)), "Wrong ShareId").quantity
226226 else throw("Wrong pool type")
227227
228228
229229 func aG (aH) = valueOrElse(getInteger(this, (aH + A)), 0)
230230
231231
232232 func aI (aH) = valueOrElse(getInteger(this, (aH + B)), 0)
233233
234234
235235 func aJ (aK) = (valueOrElse(getInteger(this, (aK + y)), 0) + 1)
236236
237237
238238 func aL (aH,aM) = if ((aM == d))
239239 then getIntegerValue(this, (aH + I))
240240 else if ((aM == c))
241241 then getIntegerValue(this, (aH + H))
242242 else if ((aM == g))
243243 then getIntegerValue(this, (aH + G))
244244 else if ((aM == h))
245245 then getIntegerValue(this, (aH + F))
246246 else if ((aM == i))
247247 then 0
248248 else throw("Wrong fee type")
249249
250250
251251 func aN () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr")))
252252
253253
254254 func aO (au) = {
255255 let aP = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr")))
256256 let aQ = split(valueOrErrorMessage(getString(aP, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
257257 Address(fromBase58String(aQ[1]))
258258 }
259259
260260
261261 func aR (ap) = {
262262 let aq = ap
263263 if ($isInstanceOf(aq, "ByteVector"))
264264 then {
265265 let ar = aq
266266 toBase58String(ar)
267267 }
268268 else if ($isInstanceOf(aq, "Unit"))
269269 then {
270270 let as = aq
271271 "WAVES"
272272 }
273273 else throw("Not Asset id")
274274 }
275275
276276
277277 func aS (ap) = if ((ap == "WAVES"))
278278 then unit
279279 else fromBase58String(ap)
280280
281281
282282 func aT (ap) = if ((ap == "WAVES"))
283283 then 8
284284 else {
285285 let aq = assetInfo(fromBase58String(ap))
286286 if ($isInstanceOf(aq, "Asset"))
287287 then {
288288 let aU = aq
289289 aU.decimals
290290 }
291291 else throw("Can't find asset")
292292 }
293293
294294
295295 func aV (ap) = pow(10, 0, aT(ap), 0, 0, DOWN)
296296
297297
298298 func aW (aX) = {
299299 func aY (aZ,ap) = {
300300 let ba = getIntegerValue(ae, (ap + R))
301301 (aZ :+ ba)
302302 }
303303
304304 let bb = aX
305305 let bc = size(bb)
306306 let bd = nil
307307 func be (bf,bg) = if ((bg >= bc))
308308 then bf
309309 else aY(bf, bb[bg])
310310
311311 func bh (bf,bg) = if ((bg >= bc))
312312 then bf
313313 else throw("List size exceeds 50")
314314
315315 bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
316316 }
317317
318318
319319 func bi (aA) = {
320320 let aH = valueOrErrorMessage(getString(this, (aA + O)), "Can't find pool addr by share id")
321321 let au = Address(fromBase58String(aH))
322322 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
323323 let bk = aD(au, bj)
324324 let ay = bk._1
325325 let az = bk._2
326326 let bl = bk._3
327327 let bm = bk._4
328328 let bn = getIntegerValue(ae, (ay + R))
329329 let bo = getIntegerValue(ae, (az + R))
330330 let bp = aF(au, bj, aA)
331331 let bq = pow(10, 0, aT(ay), 0, 0, DOWN)
332332 let br = pow(10, 0, aT(az), 0, 0, DOWN)
333333 let bs = pow(10, 0, aT(aA), 0, 0, DOWN)
334334 let bt = (fraction(bl, bn, bq) + fraction(bm, bo, br))
335335 fraction(bt, bs, bp)
336336 }
337337
338338
339339 func bu (bv) = {
340340 func aY (aZ,aA) = (aZ :+ bi(aA))
341341
342342 let bb = bv
343343 let bc = size(bb)
344344 let bd = nil
345345 func be (bf,bg) = if ((bg >= bc))
346346 then bf
347347 else aY(bf, bb[bg])
348348
349349 func bh (bf,bg) = if ((bg >= bc))
350350 then bf
351351 else throw("List size exceeds 20")
352352
353353 bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
354354 }
355355
356356
357357 func bw (ay,az,aA) = {
358358 let bx = aW([ay, az])
359359 let by = bi(aA)
360360 let bz = [toString(bx[0]), toString(bx[1]), toString(by)]
361361 [StringEntry(Q, makeString(bz, ","))]
362362 }
363363
364364
365365 func bA (bj,au,bB,ay,bC,az,aB,aC) = if ((bj == a))
366366 then {
367367 let bD = {
368368 let ax = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bB), toString(bC)]], nil)
369369 if ($isInstanceOf(ax, "List[Any]"))
370370 then ax
371371 else throw(($getType(ax) + " couldn't be cast to List[Any]"))
372372 }
373373 if ((bD == bD))
374374 then $Tuple5({
375375 let ax = bD[3]
376376 if ($isInstanceOf(ax, "Int"))
377377 then ax
378378 else throw(($getType(ax) + " couldn't be cast to Int"))
379379 }, {
380380 let ax = bD[4]
381381 if ($isInstanceOf(ax, "Int"))
382382 then ax
383383 else throw(($getType(ax) + " couldn't be cast to Int"))
384384 }, {
385385 let ax = bD[1]
386386 if ($isInstanceOf(ax, "Int"))
387387 then ax
388388 else throw(($getType(ax) + " couldn't be cast to Int"))
389389 }, aR(bD[2]), {
390390 let ax = bD[0]
391391 if ($isInstanceOf(ax, "Int"))
392392 then ax
393393 else throw(($getType(ax) + " couldn't be cast to Int"))
394394 })
395395 else throw("Strict value is not equal to itself.")
396396 }
397397 else {
398398 let bE = $Tuple2(split({
399399 let ax = invoke(au, "evaluatePutByAmountAssetREADONLY", [bB], nil)
400400 if ($isInstanceOf(ax, "String"))
401401 then ax
402402 else throw(($getType(ax) + " couldn't be cast to String"))
403403 }, "__"), split({
404404 let ax = invoke(au, "evaluatePutByPriceAssetREADONLY", [bC], nil)
405405 if ($isInstanceOf(ax, "String"))
406406 then ax
407407 else throw(($getType(ax) + " couldn't be cast to String"))
408408 }, "__"))
409409 if ((bE == bE))
410410 then {
411411 let bF = bE._2
412412 let bG = bE._1
413413 let bH = parseIntValue(bG[1])
414414 let bI = parseIntValue(bF[1])
415415 if ((bI > bH))
416416 then {
417417 let bJ = parseIntValue(bG[8])
418418 $Tuple5(bB, bJ, (bC - bJ), az, bI)
419419 }
420420 else {
421- let bJ = parseIntValue(bG[7])
421+ let bJ = parseIntValue(bF[7])
422422 $Tuple5(bJ, bC, (bB - bJ), ay, bH)
423423 }
424424 }
425425 else throw("Strict value is not equal to itself.")
426426 }
427427
428428
429429 func bK (au,bj,bB,ay,bC,az) = {
430430 let bL = [AttachedPayment(aS(ay), bB), AttachedPayment(aS(az), bC)]
431431 if ((bj == a))
432432 then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bL)
433433 else invoke(au, "put", [1000000, false], bL)
434434 }
435435
436436
437437 func bM (au,bj,bJ,bN) = {
438438 let bL = [AttachedPayment(aS(bN), bJ)]
439439 if ((bj == a))
440440 then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bL)
441441 else invoke(au, "putOneTkn", [0, false], bL)
442442 }
443443
444444
445445 func bO (aH,bj,aA,bP) = {
446446 let bL = [AttachedPayment(fromBase58String(aA), bP)]
447447 if ((bj == a))
448448 then invoke(aN(), "lockShareTokens", [aH, 0], bL)
449449 else invoke(aO(addressFromStringValue(aH)), "stake", nil, bL)
450450 }
451451
452452
453453 func bQ (aH,bj,aA,bP) = {
454454 let bR = if ((bj == a))
455455 then $Tuple3(aN(), "withdrawShareTokens", [aH, bP])
456456 else if ((bj == b))
457457 then $Tuple3(aO(Address(fromBase58String(aH))), "unstake", [aA, bP])
458458 else throw("Wrong pool type")
459459 let bS = bR._1
460460 let bT = bR._2
461461 let bU = bR._3
462462 let bV = invoke(bS, bT, bU, nil)
463463 if ((bV == bV))
464464 then bP
465465 else throw("Strict value is not equal to itself.")
466466 }
467467
468468
469469 func bW (aH,bX,bY,aB,aC,bZ,ca) = {
470470 let au = Address(fromBase58String(aH))
471471 let cb = 1000000
472472 let cc = getIntegerValue(au, t)
473473 let cd = fraction(bZ, cb, (cb - cc))
474474 let ce = if ((ca == bX))
475475 then {
476476 let cf = fraction(cd, aC, (aB - cd))
477477 $Tuple2(cf, bY)
478478 }
479479 else {
480480 let cf = fraction(cd, aB, (aC - cd))
481481 $Tuple2(cf, bX)
482482 }
483483 let cf = ce._1
484484 let cg = ce._2
485485 $Tuple2(cg, cf)
486486 }
487487
488488
489489 func ch (aH,bX,bY,aB,aC,bZ,ca) = {
490490 let ci = getIntegerValue(af, "%s__protocolFee")
491491 let cj = getIntegerValue(af, "%s__poolFee")
492492 let ck = toBigInt(100000000)
493493 let cl = if ((ca == bX))
494494 then {
495495 let cf = fraction(bZ, aC, (aB - bZ))
496496 $Tuple2(cf, bY)
497497 }
498498 else {
499499 let cf = fraction(bZ, aB, (aC - bZ))
500500 $Tuple2(cf, bX)
501501 }
502502 let cf = cl._1
503503 let cg = cl._2
504504 let cm = toInt(fraction(toBigInt(cf), ck, (ck - toBigInt((ci + cj))), CEILING))
505505 $Tuple2(cg, cm)
506506 }
507507
508508
509509 func cn (aE,aH,bX,bY,aB,aC,bZ,ca) = if ((aE == a))
510510 then {
511511 let co = bW(aH, bX, bY, aB, aC, bZ, ca)
512512 let cg = co._1
513513 let cf = co._2
514514 invoke(addressFromStringValue(aH), "callFunction", ["exchange", [toString(bZ)]], [AttachedPayment(aS(cg), cf)])
515515 }
516516 else {
517517 let cp = ch(aH, bX, bY, aB, aC, bZ, ca)
518518 let cg = cp._1
519519 let cf = cp._2
520520 invoke(af, "swap", [bZ, ca, toString(this)], [AttachedPayment(aS(cg), cf)])
521521 }
522522
523523
524524 func cq (bj,aH,bB,ay,bC,az,aB,aC) = {
525525 let au = addressFromStringValue(aH)
526526 if ((bj == a))
527527 then {
528528 let bV = {
529529 let ax = invoke(au, "callFunction", ["calcLPReplenishDiffPropREADONLY", [toString(bB), toString(bC), "0"]], nil)
530530 if ($isInstanceOf(ax, "List[Any]"))
531531 then ax
532532 else throw(($getType(ax) + " couldn't be cast to List[Any]"))
533533 }
534534 if ((bV == bV))
535535 then $Tuple2({
536536 let ax = bV[0]
537537 if ($isInstanceOf(ax, "Int"))
538538 then ax
539539 else throw(($getType(ax) + " couldn't be cast to Int"))
540540 }, {
541541 let ax = bV[1]
542542 if ($isInstanceOf(ax, "Int"))
543543 then ax
544544 else throw(($getType(ax) + " couldn't be cast to Int"))
545545 })
546546 else throw("Strict value is not equal to itself.")
547547 }
548548 else if ((bj == b))
549549 then {
550550 let cr = if (if ((bB > 0))
551551 then (bC > 0)
552552 else false)
553553 then {
554554 let cs = bA(bj, au, bB, ay, bC, az, aB, aC)
555555 let ct = cs._1
556556 let cu = cs._2
557557 let cv = cs._3
558558 let cw = cs._4
559559 let cx = cs._5
560560 $Tuple3(cv, cw, cx)
561561 }
562562 else if ((bB > 0))
563563 then $Tuple3(bB, ay, 0)
564564 else $Tuple3(bC, az, 0)
565565 let cv = cr._1
566566 let cw = cr._2
567567 let cy = cr._3
568568 let cz = if ((cv > 0))
569569 then {
570570 let bV = {
571571 let ax = invoke(au, "putOneTknREADONLY", [cw, cv], nil)
572572 if ($isInstanceOf(ax, "(Int, Int, Int)"))
573573 then ax
574574 else throw(($getType(ax) + " couldn't be cast to (Int, Int, Int)"))
575575 }
576576 if ((bV == bV))
577577 then $Tuple2(bV._1, bV._3)
578578 else throw("Strict value is not equal to itself.")
579579 }
580580 else $Tuple2(0, 0)
581581 let cA = cz._1
582582 let cB = cz._2
583583 $Tuple2((cy + cA), cB)
584584 }
585585 else throw("Wrong pool type")
586586 }
587587
588588
589589 func cC (bj,aH,cx,aA,ay,az,aB,aC,cD,cE) = {
590590 let au = addressFromStringValue(aH)
591591 let cF = if ((bj == a))
592592 then {
593593 let bV = {
594594 let ax = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cx), toString(aB), toString(aC)]], nil)
595595 if ($isInstanceOf(ax, "List[Any]"))
596596 then ax
597597 else throw(($getType(ax) + " couldn't be cast to List[Any]"))
598598 }
599599 if ((bV == bV))
600600 then $Tuple2({
601601 let ax = bV[0]
602602 if ($isInstanceOf(ax, "Int"))
603603 then ax
604604 else throw(($getType(ax) + " couldn't be cast to Int"))
605605 }, {
606606 let ax = bV[1]
607607 if ($isInstanceOf(ax, "Int"))
608608 then ax
609609 else throw(($getType(ax) + " couldn't be cast to Int"))
610610 })
611611 else throw("Strict value is not equal to itself.")
612612 }
613613 else if ((bj == b))
614614 then {
615615 let cG = split({
616616 let ax = invoke(au, "evaluateGetREADONLY", [aA, cx], nil)
617617 if ($isInstanceOf(ax, "String"))
618618 then ax
619619 else throw(($getType(ax) + " couldn't be cast to String"))
620620 }, "__")
621621 if ((cG == cG))
622622 then $Tuple2(parseIntValue(cG[1]), parseIntValue(cG[2]))
623623 else throw("Strict value is not equal to itself.")
624624 }
625625 else throw("Wrong pool type")
626626 let cH = cF._1
627627 let cI = cF._2
628628 if ((cD > 0))
629629 then {
630630 let cJ = if (if ((cE == ay))
631631 then (cD > cH)
632632 else false)
633633 then (cD - cH)
634634 else if (if ((cE == az))
635635 then (cD > cI)
636636 else false)
637637 then (cD - cI)
638638 else 0
639639 let cK = if ((cJ > 0))
640640 then if ((bj == a))
641641 then bW(aH, ay, az, aB, aC, cJ, cE)
642642 else ch(aH, ay, az, aB, aC, cJ, cE)
643643 else $Tuple2("", 0)
644644 let cg = cK._1
645645 let cf = cK._2
646646 if ((cE == ay))
647647 then $Tuple2(((cH + cJ) - cD), (cI - cf))
648648 else $Tuple2((cH - cf), ((cI + cJ) - cD))
649649 }
650650 else $Tuple2(cH, cI)
651651 }
652652
653653
654654 func cL (aE,aH) = if ((aE == a))
655655 then {
656656 let cM = ao(ag)
657657 if ((cM == cM))
658658 then {
659659 let bV = invoke(aN(), "claim", [aH], nil)
660660 if ((bV == bV))
661661 then {
662662 let cN = ao(ag)
663663 $Tuple2((cN - cM), ag)
664664 }
665665 else throw("Strict value is not equal to itself.")
666666 }
667667 else throw("Strict value is not equal to itself.")
668668 }
669669 else if ((aE == b))
670670 then {
671671 let cM = ao(ah)
672672 if ((cM == cM))
673673 then {
674674 let bV = invoke(aO(Address(fromBase58String(aH))), "claimWX", [aH], nil)
675675 if ((bV == bV))
676676 then {
677677 let cN = ao(ah)
678678 $Tuple2((cN - cM), ah)
679679 }
680680 else throw("Strict value is not equal to itself.")
681681 }
682682 else throw("Strict value is not equal to itself.")
683683 }
684684 else throw("Wrong pool type")
685685
686686
687687 func cO (bj,aH,aM,bB,ay,bC,az,aB,aC,cP) = {
688688 let cQ = ao(fromBase58String(cP))
689689 if ((cQ == cQ))
690690 then {
691691 let au = addressFromStringValue(aH)
692692 let cR = if (if ((bB > 0))
693693 then (bC > 0)
694694 else false)
695695 then {
696696 let cS = bA(bj, au, bB, ay, bC, az, aB, aC)
697697 let ct = cS._1
698698 let cu = cS._2
699699 let cv = cS._3
700700 let cw = cS._4
701701 let bV = bK(au, bj, ct, ay, cu, az)
702702 if ((bV == bV))
703703 then $Tuple2(cv, cw)
704704 else throw("Strict value is not equal to itself.")
705705 }
706706 else if ((bB > 0))
707707 then $Tuple2(bB, ay)
708708 else if ((bC > 0))
709709 then $Tuple2(bC, az)
710710 else throw("pmts must be > 0")
711711 let cv = cR._1
712712 let cw = cR._2
713713 let bV = if ((cv > 0))
714714 then bM(au, bj, cv, cw)
715715 else nil
716716 if ((bV == bV))
717717 then {
718718 let cT = ao(fromBase58String(cP))
719719 let cU = (cT - cQ)
720720 let cV = fraction(cU, aL(aH, aM), m)
721721 let cW = (cU - cV)
722722 if ((0 >= cW))
723723 then throw("amount of staked sharetokens must be > 0")
724724 else {
725725 let cX = bO(aH, bj, cP, cW)
726726 if ((cX == cX))
727727 then $Tuple2(cW, cV)
728728 else throw("Strict value is not equal to itself.")
729729 }
730730 }
731731 else throw("Strict value is not equal to itself.")
732732 }
733733 else throw("Strict value is not equal to itself.")
734734 }
735735
736736
737737 func cY (aH,aK,cZ,cV,da,aA,aE,db) = {
738738 let dc = aG(aH)
739739 let dd = aI(aH)
740740 let de = if (db)
741741 then $Tuple2(getIntegerValue(this, (aH + C)), (dd + cZ))
742742 else $Tuple2(getIntegerValue(this, (aH + D)), dd)
743743 let df = de._1
744744 let dg = de._2
745745 [IntegerEntry((aH + A), (dc + cZ)), IntegerEntry((aH + B), dg), IntegerEntry((((((aH + "_") + aK) + "_") + toString(da)) + u), cZ), IntegerEntry((((((aH + "_") + aK) + "_") + toString(da)) + z), df), StringEntry((((aK + "_") + toString(da)) + v), aH), IntegerEntry((aK + y), da), ScriptTransfer(ac, cV, fromBase58String(aA))]
746746 }
747747
748748
749749 func dh (di,dj,dk,dl,dm,dn,do,dp,dq,dr) = {
750750 let ds = ao(aS(di))
751751 if ((ds == ds))
752752 then {
753753 let bV = invoke(ad, "swap", [dl, dm, dn, do, dp, dq, dr], [AttachedPayment(dk, dj)])
754754 if ((bV == bV))
755755 then (ao(aS(di)) - ds)
756756 else throw("Strict value is not equal to itself.")
757757 }
758758 else throw("Strict value is not equal to itself.")
759759 }
760760
761761
762762 func dt (di,dj,dk,du,dv,dr) = {
763763 let ds = ao(aS(di))
764764 if ((ds == ds))
765765 then {
766766 let bV = invoke(ad, "puzzleSwap", [du, dv, dr], [AttachedPayment(dk, dj)])
767767 if ((bV == bV))
768768 then (ao(aS(di)) - ds)
769769 else throw("Strict value is not equal to itself.")
770770 }
771771 else throw("Strict value is not equal to itself.")
772772 }
773773
774774
775775 func dw (di,dj,dk,dx,dy,dz,dA,dB,dC,dr) = {
776776 let ds = ao(aS(di))
777777 if ((ds == ds))
778778 then {
779779 let bV = invoke(ad, "swopfiSwap", [dx, dy, dz, dA, dB, dC, dr], [AttachedPayment(dk, dj)])
780780 if ((bV == bV))
781781 then (ao(aS(di)) - ds)
782782 else throw("Strict value is not equal to itself.")
783783 }
784784 else throw("Strict value is not equal to itself.")
785785 }
786786
787787
788788 func dD (aH,bj,dE,dF) = {
789789 let au = Address(fromBase58String(aH))
790790 let dG = aD(au, bj)
791791 let dH = dG._1
792792 let dI = dG._2
793793 let aB = dG._3
794794 let aC = dG._4
795795 let aA = dG._5
796796 if (if ((dE != dH))
797797 then (dE != dI)
798798 else false)
799799 then throw("Wrong asset")
800800 else {
801801 let dJ = if ((dE == dH))
802802 then $Tuple2(dF, 0)
803803 else $Tuple2(0, dF)
804804 let bB = dJ._1
805805 let bC = dJ._2
806806 let dK = cO(bj, aH, i, bB, dH, bC, dI, aB, aC, aA)
807807 let cZ = dK._1
808808 let dL = dK._2
809809 let dM = valueOrElse(getInteger(this, (aH + C)), 0)
810810 let dN = valueOrElse(getInteger(this, (aH + D)), 0)
811811 let dO = aG(aH)
812812 let dP = aI(aH)
813813 let dQ = fraction(dP, j, dO)
814814 let dR = fraction(cZ, dQ, j)
815815 let dS = (cZ - dR)
816816 let dT = if ((dP > 0))
817817 then (dM + fraction(dR, k, dP))
818818 else 0
819819 let dU = if (((dO - dP) > 0))
820820 then (dN + fraction(dS, k, (dO - dP)))
821821 else 0
822822 let dV = fraction(dR, aL(aH, d), m)
823823 let dW = fraction(dS, aL(aH, c), m)
824824 let dX = bQ(aH, bj, aA, (dV + dW))
825825 if ((dX == dX))
826826 then ([IntegerEntry((aH + C), dT), IntegerEntry((aH + D), dU), IntegerEntry((aH + A), ((dO + cZ) - dX)), IntegerEntry((aH + B), ((dP + dR) - dV)), ScriptTransfer(ac, (dV + dW), fromBase58String(aA))] ++ bw(dH, dI, aA))
827827 else throw("Strict value is not equal to itself.")
828828 }
829829 }
830830
831831
832832 func dY (aH,dZ,ea,eb) = {
833833 let au = Address(fromBase58String(aH))
834834 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
835835 let ec = aD(au, bj)
836836 let bX = ec._1
837837 let bY = ec._2
838838 let aB = ec._3
839839 let aC = ec._4
840840 let aA = ec._5
841841 let ed = ao(aS(bX))
842842 if ((ed == ed))
843843 then {
844844 let ee = ao(aS(bY))
845845 if ((ee == ee))
846846 then {
847847 let bV = if ((bj == a))
848848 then invoke(au, "callFunction", ["withdraw", [toString(dZ)]], nil)
849849 else {
850850 let bV = bQ(aH, bj, aA, dZ)
851851 if ((bV == bV))
852852 then invoke(au, "get", nil, [AttachedPayment(aS(aA), dZ)])
853853 else throw("Strict value is not equal to itself.")
854854 }
855855 if ((bV == bV))
856856 then {
857857 let ef = ao(aS(bX))
858858 let eg = ao(aS(bY))
859859 let eh = $Tuple2((ef - ed), (eg - ee))
860860 let ei = eh._1
861861 let ej = eh._2
862862 let ek = if ((ea > 0))
863863 then {
864864 let cJ = if (if ((eb == bX))
865865 then (ea > ei)
866866 else false)
867867 then (ea - ei)
868868 else if (if ((eb == bY))
869869 then (ea > ej)
870870 else false)
871871 then (ea - ej)
872872 else 0
873873 let el = if ((cJ > 0))
874874 then cn(bj, aH, bX, bY, aB, aC, cJ, eb)
875875 else 0
876876 if ((el == el))
877877 then {
878878 let em = ao(aS(bX))
879879 let en = ao(aS(bY))
880880 if ((eb == bX))
881881 then $Tuple2(((em - ed) - ea), (en - ee))
882882 else $Tuple2((em - ed), ((en - ee) - ea))
883883 }
884884 else throw("Strict value is not equal to itself.")
885885 }
886886 else $Tuple2(ei, ej)
887887 let eo = ek._1
888888 let ep = ek._2
889889 $Tuple7(eo, bX, ep, bY, ef, eg, aA)
890890 }
891891 else throw("Strict value is not equal to itself.")
892892 }
893893 else throw("Strict value is not equal to itself.")
894894 }
895895 else throw("Strict value is not equal to itself.")
896896 }
897897
898898
899899 func eq (aK,aH,er,es) = {
900900 let et = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + er) + u)), "Unknown position")
901901 let eu = getIntegerValue(this, (((((aH + "_") + aK) + "_") + er) + z))
902902 let ev = if (es)
903903 then getIntegerValue(this, (aH + C))
904904 else getIntegerValue(this, (aH + D))
905905 (et + fraction(et, (ev - eu), k))
906906 }
907907
908908
909909 func ew (aK,aH,er,ex) = {
910910 let et = valueOrErrorMessage(getInteger(this, (((((aH + "_") + aK) + "_") + er) + u)), "Unknown position")
911911 let cD = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + er) + w)), 0)
912912 let dZ = eq(aK, aH, er, (cD > 0))
913913 let ey = aG(aH)
914914 let ez = Address(fromBase58String(aK))
915915 let eb = valueOrElse(getString(this, (((((aH + "_") + aK) + "_") + er) + x)), "")
916916 let ea = if ((cD > 0))
917917 then {
918918 let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + er), eb], nil)
919919 if ($isInstanceOf(ax, "Int"))
920920 then ax
921921 else throw(($getType(ax) + " couldn't be cast to Int"))
922922 }
923923 else 0
924924 let eA = dY(aH, dZ, ea, eb)
925925 if ((eA == eA))
926926 then {
927927 let aA = eA._7
928928 let eg = eA._6
929929 let ef = eA._5
930930 let bY = eA._4
931931 let eB = eA._3
932932 let bX = eA._2
933933 let eC = eA._1
934934 let eD = if ((ea > 0))
935935 then invoke(ai(), "repayFor", [((aK + "_") + er)], [AttachedPayment(aS(eb), ea)])
936936 else 0
937937 if ((eD == eD))
938938 then ([DeleteEntry((((((aH + "_") + aK) + "_") + er) + u)), DeleteEntry((((((aH + "_") + aK) + "_") + er) + z)), IntegerEntry((aH + A), (ey - dZ)), ScriptTransfer(ez, eC, aS(bX)), ScriptTransfer(ez, eB, aS(bY))] ++ bw(bX, bY, aA))
939939 else throw("Strict value is not equal to itself.")
940940 }
941941 else throw("Strict value is not equal to itself.")
942942 }
943943
944944
945945 func eE (eF) = {
946946 let eG = split(valueOrErrorMessage(getString(this, (eF + L)), ("No request with id " + eF)), ",")
947947 let aK = eG[0]
948948 let aH = eG[1]
949949 let bB = parseIntValue(eG[2])
950950 let dH = eG[3]
951951 let bC = parseIntValue(eG[4])
952952 let dI = eG[5]
953953 let aB = parseIntValue(eG[6])
954954 let aC = parseIntValue(eG[7])
955955 let aA = eG[8]
956956 let eH = eG[9]
957957 let eI = parseIntValue(eG[10])
958958 $Tuple11(aK, aH, bB, dH, bC, dI, aB, aC, aA, eH, eI)
959959 }
960960
961961
962962 func eJ (bB,bC,ay,az,eK,eL) = {
963963 let bn = getIntegerValue(ae, (ay + R))
964964 let bo = getIntegerValue(ae, (az + R))
965965 let eM = pow(10, 0, aT(ay), 0, 0, DOWN)
966966 let eN = pow(10, 0, aT(az), 0, 0, DOWN)
967967 let eO = (fraction(bn, bB, eM) + fraction(bo, bC, eN))
968968 let eP = if ((eL == ay))
969969 then $Tuple2(bn, eM)
970970 else $Tuple2(bo, eN)
971971 let eQ = eP._1
972972 let eR = eP._2
973973 fraction(fraction(eO, (eK - 100), 100), eR, eQ)
974974 }
975975
976976
977977 @Callable(al)
978978 func calcPriceImpactEVALONLY (aH,eK,eL,bB,bC) = if (if ((100 > eK))
979979 then true
980980 else (eK > 300))
981981 then throw("Leverage can't be <100 and >300")
982982 else {
983983 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
984984 let eS = aD(Address(fromBase58String(aH)), bj)
985985 let dH = eS._1
986986 let dI = eS._2
987987 let aB = eS._3
988988 let aC = eS._4
989989 let aA = eS._5
990990 let cD = if ((eK > 100))
991991 then eJ(bB, bC, dH, dI, eK, eL)
992992 else 0
993993 let eT = if ((eL == dH))
994994 then $Tuple2((bB + cD), bC)
995995 else $Tuple2(bB, (bC + cD))
996996 let eU = eT._1
997997 let eV = eT._2
998998 let eW = cq(bj, aH, eU, dH, eV, dI, aB, aC)
999999 let cx = eW._1
10001000 let cB = eW._2
10011001 let eX = if ((0 > cB))
10021002 then (cB * -1)
10031003 else cB
10041004 $Tuple2(nil, [eX])
10051005 }
10061006
10071007
10081008
10091009 @Callable(al)
10101010 func getShareAssetPriceREADONLY (aA) = {
10111011 let eY = bi(aA)
10121012 $Tuple2(nil, eY)
10131013 }
10141014
10151015
10161016
10171017 @Callable(al)
10181018 func getUserPositionShareAmountREADONLY (aK,da) = {
10191019 let aH = valueOrErrorMessage(getString(this, (((aK + "_") + da) + v)), "Unknown position")
10201020 let cD = getIntegerValue(this, (((((aH + "_") + aK) + "_") + da) + w))
10211021 let dZ = eq(aK, aH, da, (cD > 0))
10221022 $Tuple2(nil, dZ)
10231023 }
10241024
10251025
10261026
10271027 @Callable(al)
10281028 func getUserPositionInDollarsREADONLY (aK,eZ,da) = {
10291029 func fa (aZ,aH) = {
10301030 let fb = aZ
10311031 let fc = fb._1
10321032 let fd = fb._2
10331033 let fe = fb._3
10341034 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
10351035 let ff = aD(Address(fromBase58String(aH)), bj)
10361036 let dH = ff._1
10371037 let dI = ff._2
10381038 let aB = ff._3
10391039 let aC = ff._4
10401040 let aA = ff._5
10411041 let cD = valueOrElse(getInteger(this, (((((aH + "_") + aK) + "_") + da[fe]) + w)), 0)
10421042 let dZ = eq(aK, aH, da[fe], (cD > 0))
10431043 let eY = bi(aA)
10441044 let fg = pow(10, 0, aT(aA), 0, 0, DOWN)
10451045 let fh = fraction(dZ, eY, fg)
10461046 if ((cD == 0))
10471047 then $Tuple3((fc :+ fh), (fd :+ 0), (fe + 1))
10481048 else {
10491049 let eb = getStringValue(this, (((((aH + "_") + aK) + "_") + da[fe]) + x))
10501050 let ea = {
10511051 let ax = invoke(ai(), "getAssetDebt", [false, ((aK + "_") + da[fe]), eb], nil)
10521052 if ($isInstanceOf(ax, "Int"))
10531053 then ax
10541054 else throw(($getType(ax) + " couldn't be cast to Int"))
10551055 }
10561056 let fi = getIntegerValue(ae, (eb + R))
10571057 let fj = pow(10, 0, aT(eb), 0, 0, DOWN)
10581058 let fk = fraction(ea, fi, fj)
10591059 $Tuple3((fc :+ fh), (fd :+ fk), (fe + 1))
10601060 }
10611061 }
10621062
10631063 let fl = {
10641064 let bb = eZ
10651065 let bc = size(bb)
10661066 let bd = $Tuple3(nil, nil, 0)
10671067 func be (bf,bg) = if ((bg >= bc))
10681068 then bf
10691069 else fa(bf, bb[bg])
10701070
10711071 func bh (bf,bg) = if ((bg >= bc))
10721072 then bf
10731073 else throw("List size exceeds 20")
10741074
10751075 bh(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(be(bd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
10761076 }
10771077 let fm = fl._1
10781078 let ea = fl._2
10791079 $Tuple2(nil, $Tuple2(fm, ea))
10801080 }
10811081
10821082
10831083
10841084 @Callable(al)
10851085 func replenish (aH,eK,eL) = if (if ((100 > eK))
10861086 then true
10871087 else (eK > 300))
10881088 then throw("Leverage can't be <100 and >300")
10891089 else if (if (!(getBooleanValue(this, (aH + E))))
10901090 then (eK > 100)
10911091 else false)
10921092 then throw("You can't borrow in this pool")
10931093 else {
10941094 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
10951095 let fn = aD(Address(fromBase58String(aH)), bj)
10961096 let dH = fn._1
10971097 let dI = fn._2
10981098 let aB = fn._3
10991099 let aC = fn._4
11001100 let aA = fn._5
11011101 let fo = if ((size(al.payments) == 2))
11021102 then if ((aR(al.payments[0].assetId) != dH))
11031103 then throw("Wrong payment asset A")
11041104 else if ((aR(al.payments[1].assetId) != dI))
11051105 then throw("Wrong payment asset B")
11061106 else $Tuple4(al.payments[0].amount, dH, al.payments[1].amount, dI)
11071107 else if ((size(al.payments) == 1))
11081108 then if ((aR(al.payments[0].assetId) == dH))
11091109 then $Tuple4(al.payments[0].amount, dH, 0, dI)
11101110 else if ((aR(al.payments[0].assetId) == dI))
11111111 then $Tuple4(0, dH, al.payments[0].amount, dI)
11121112 else throw("Wrong payment")
11131113 else throw("One or two payments expected")
11141114 let bB = fo._1
11151115 let fp = fo._2
11161116 let bC = fo._3
11171117 let fq = fo._4
11181118 let fr = aJ(toString(al.caller))
11191119 if ((eK > 100))
11201120 then {
11211121 let cD = eJ(bB, bC, fp, fq, eK, eL)
11221122 let eG = makeString([toString(al.caller), aH, toString(bB), fp, toString(bC), fq, toString(aB), toString(aC), aA, eL, toString(cD)], ",")
11231123 let fs = {
11241124 let ax = invoke(this, "createNewRequest", [eG], nil)
11251125 if ($isInstanceOf(ax, "Int"))
11261126 then ax
11271127 else throw(($getType(ax) + " couldn't be cast to Int"))
11281128 }
11291129 if ((fs == fs))
11301130 then {
11311131 let ft = [((toString(al.caller) + "_") + toString(fr)), aA, eL, cD, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fs, "Can't create new request"))]
11321132 let bV = reentrantInvoke(ai(), "flashPosition", ft, nil)
11331133 if ((bV == bV))
11341134 then nil
11351135 else throw("Strict value is not equal to itself.")
11361136 }
11371137 else throw("Strict value is not equal to itself.")
11381138 }
11391139 else {
11401140 let fu = cO(bj, aH, h, bB, dH, bC, dI, aB, aC, aA)
11411141 let fv = fu._1
11421142 let dX = fu._2
11431143 (cY(aH, toString(al.caller), fv, dX, fr, aA, bj, false) ++ bw(dH, dI, aA))
11441144 }
11451145 }
11461146
11471147
11481148
11491149 @Callable(al)
11501150 func withdraw (aH,er) = ew(toString(al.caller), aH, toString(er), false)
11511151
11521152
11531153
11541154 @Callable(al)
11551155 func createUpdateStopLoss (er,fw,ap,fx) = {
11561156 let fy = getIntegerValue(ae, (ap + R))
11571157 if (!(isDefined(getInteger(this, (((((fw + "_") + toString(al.caller)) + "_") + toString(er)) + u)))))
11581158 then throw("There are no user position")
11591159 else if ((0 >= fx))
11601160 then throw("Price must be greater than 0")
11611161 else if ((fx > fy))
11621162 then throw("Price must be less than current token price")
11631163 else [IntegerEntry((((((((toString(al.caller) + "_") + toString(er)) + "_") + fw) + "_") + ap) + S), fx)]
11641164 }
11651165
11661166
11671167
11681168 @Callable(al)
11691169 func deleteStopLoss (er,fw,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(er)) + "_") + fw) + "_") + ap) + S)))))
11701170 then throw("No entry")
11711171 else [DeleteEntry((((((((toString(al.caller) + "_") + toString(er)) + "_") + fw) + "_") + ap) + S))]
11721172
11731173
11741174
11751175 @Callable(al)
11761176 func init (fz,fA,fB,ae,fC,af,fD,fE,fF) = if (isDefined(getString(T)))
11771177 then throw("Already inited")
11781178 else [StringEntry(T, fz), StringEntry(U, fA), StringEntry(V, fB), StringEntry(X, ae), StringEntry(Y, fC), StringEntry(Z, af), StringEntry(aa, fD), StringEntry(ab, fE), StringEntry(W, fF)]
11791179
11801180
11811181
11821182 @Callable(al)
11831183 func createNewRequest (bU) = valueOrElse(am(al), {
11841184 let fs = (valueOrElse(getInteger(this, M), 0) + 1)
11851185 $Tuple2([StringEntry((toString(fs) + L), bU), IntegerEntry(M, fs)], fs)
11861186 })
11871187
11881188
11891189
11901190 @Callable(al)
11911191 func replenishFromLand (eF) = valueOrElse(an(al), {
11921192 let fG = eE(eF)
11931193 let aK = fG._1
11941194 let aH = fG._2
11951195 let bB = fG._3
11961196 let dH = fG._4
11971197 let bC = fG._5
11981198 let dI = fG._6
11991199 let aB = fG._7
12001200 let aC = fG._8
12011201 let aA = fG._9
12021202 let eH = fG._10
12031203 let eI = fG._11
12041204 if ((size(al.payments) != 1))
12051205 then throw("Wrong payment size")
12061206 else if (if ((aR(al.payments[0].assetId) != eH))
12071207 then true
12081208 else (al.payments[0].amount != eI))
12091209 then throw("Wrong payment")
12101210 else {
12111211 let fH = if ((dH == eH))
12121212 then $Tuple2((bB + al.payments[0].amount), bC)
12131213 else $Tuple2(bB, (bC + al.payments[0].amount))
12141214 let fI = fH._1
12151215 let fJ = fH._2
12161216 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Unknown pool")
12171217 let fK = cO(bj, aH, g, fI, dH, fJ, dI, aB, aC, aA)
12181218 let fv = fK._1
12191219 let dX = fK._2
12201220 let da = aJ(aK)
12211221 let fL = [IntegerEntry((((((aH + "_") + aK) + "_") + toString(da)) + w), eI), StringEntry((((((aH + "_") + aK) + "_") + toString(da)) + x), eH)]
12221222 let fM = cY(aH, aK, fv, dX, da, aA, bj, true)
12231223 $Tuple2((((fM ++ bw(dH, dI, aA)) ++ fL) :+ DeleteEntry((eF + L))), fv)
12241224 }
12251225 })
12261226
12271227
12281228
12291229 @Callable(al)
12301230 func liquidate (aK,er,fN) = valueOrElse(an(al), {
12311231 let aH = valueOrErrorMessage(getString(this, (((aK + "_") + er) + v)), "no position")
12321232 let bj = valueOrErrorMessage(getString(this, (N + aH)), "Pool is not inited")
12331233 let fO = aD(Address(fromBase58String(aH)), bj)
12341234 let dH = fO._1
12351235 let dI = fO._2
12361236 let aB = fO._3
12371237 let aC = fO._4
12381238 let aA = fO._5
12391239 let bP = bQ(aH, bj, aA, fN)
12401240 let cD = getIntegerValue(this, (((((aH + "_") + aK) + "_") + er) + w))
12411241 let eb = getStringValue(this, (((((aH + "_") + aK) + "_") + er) + x))
12421242 let dZ = eq(aK, aH, er, (cD > 0))
12431243 if ((cD == 0))
12441244 then throw("You can't liquidate position without borrow")
12451245 else [IntegerEntry((((((aH + "_") + aK) + "_") + er) + z), getIntegerValue(this, (aH + C))), IntegerEntry((aH + B), (aI(aH) - fN)), IntegerEntry((aH + A), (aG(aH) - fN)), IntegerEntry((((((aH + "_") + aK) + "_") + er) + u), (dZ - fN)), ScriptTransfer(al.caller, bP, fromBase58String(aA))]
12461246 })
12471247
12481248
12491249
12501250 @Callable(al)
12511251 func stopLoss (aK,er,aH,ap) = valueOrElse(ak(al), {
12521252 let fy = getIntegerValue(ae, (ap + R))
12531253 if (!(isDefined(getInteger(this, (((((((aK + "_") + toString(er)) + "_") + aH) + "_") + ap) + S)))))
12541254 then throw("No entry")
12551255 else (ew(toString(al.caller), aH, toString(er), true) :+ DeleteEntry((((((((aK + "_") + toString(er)) + "_") + aH) + "_") + ap) + S)))
12561256 })
12571257
12581258
12591259
12601260 @Callable(al)
12611261 func capitalizeExKeeper (aH,aE,fP,fQ,fR,dl,dm,dn,do,dp,dq,dr) = valueOrElse(ak(al), {
12621262 let fS = if (fR)
12631263 then cL(aE, aH)
12641264 else {
12651265 let fT = if ((aE == a))
12661266 then ag
12671267 else ah
12681268 $Tuple2(fQ, fT)
12691269 }
12701270 let fU = fS._1
12711271 let fT = fS._2
12721272 let fV = dh(fP, fQ, fT, dl, dm, dn, do, dp, dq, dr)
12731273 let cv = (fU - fQ)
12741274 let fW = if ((cv > 0))
12751275 then [IntegerEntry((aH + P), (cv + valueOrElse(getInteger(this, (aH + P)), 0)))]
12761276 else nil
12771277 (dD(aH, aE, fP, fV) ++ fW)
12781278 })
12791279
12801280
12811281
12821282 @Callable(al)
12831283 func capitalizeExPuzzle (aH,aE,fP,fQ,fR,du,dv,dr) = valueOrElse(ak(al), {
12841284 let fX = if (fR)
12851285 then cL(aE, aH)
12861286 else {
12871287 let fT = if ((aE == a))
12881288 then ag
12891289 else ah
12901290 $Tuple2(fQ, fT)
12911291 }
12921292 let fU = fX._1
12931293 let fT = fX._2
12941294 let fV = dt(fP, fQ, fT, du, dv, dr)
12951295 let cv = (fU - fQ)
12961296 let fW = if ((cv > 0))
12971297 then [IntegerEntry((aH + P), (cv + valueOrElse(getInteger(this, (aH + P)), 0)))]
12981298 else nil
12991299 (dD(aH, aE, fP, fV) ++ fW)
13001300 })
13011301
13021302
13031303
13041304 @Callable(al)
13051305 func capitalizeExSwopFi (aH,aE,fP,fQ,fR,dx,dy,dz,dA,dB,dC,dr) = valueOrElse(ak(al), {
13061306 let fY = if (fR)
13071307 then cL(aE, aH)
13081308 else {
13091309 let fT = if ((aE == a))
13101310 then ag
13111311 else ah
13121312 $Tuple2(fQ, fT)
13131313 }
13141314 let fU = fY._1
13151315 let fT = fY._2
13161316 let fV = dw(fP, fQ, fT, dx, dy, dz, dA, dB, dC, dr)
13171317 let cv = (fU - fQ)
13181318 let fW = if ((cv > 0))
13191319 then [IntegerEntry((aH + P), (cv + valueOrElse(getInteger(this, (aH + P)), 0)))]
13201320 else nil
13211321 (dD(aH, aE, fP, fV) ++ fW)
13221322 })
13231323
13241324
13251325
13261326 @Callable(al)
13271327 func initNewPool (aE,au,fZ,ga,gb,gc,gd,ge,gf) = valueOrElse(ak(al), if (if ((aE != a))
13281328 then (aE != b)
13291329 else false)
13301330 then throw("Wrong type")
13311331 else {
13321332 let gg = aD(Address(fromBase58String(au)), aE)
13331333 let ay = gg._1
13341334 let az = gg._2
13351335 let gh = gg._3
13361336 let gi = gg._4
13371337 let aA = gg._5
13381338 [IntegerEntry((au + F), fZ), IntegerEntry((au + G), ga), IntegerEntry((au + H), gb), IntegerEntry((au + I), gc), IntegerEntry((au + J), gd), IntegerEntry((au + K), ge), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aE), StringEntry((aA + O), au), BooleanEntry((au + E), gf)]
13391339 })
13401340
13411341
13421342 @Verifier(gj)
13431343 func gk () = sigVerify(gj.bodyBytes, gj.proofs[0], gj.senderPublicKey)
13441344

github/deemru/w8io/026f985 
121.63 ms