tx · 6YCdYbGdTan5YoirmjDwySn5wfo6DtobSST6HQWrd3E8

3N9be2mwrA52WJho6DiesZkk4351GvpnWuj:  -0.04300000 Waves

2023.02.13 10:42 [2447548] smart account 3N9be2mwrA52WJho6DiesZkk4351GvpnWuj > SELF 0.00000000 Waves

{ "type": 13, "id": "6YCdYbGdTan5YoirmjDwySn5wfo6DtobSST6HQWrd3E8", "fee": 4300000, "feeAssetId": null, "timestamp": 1676274255148, "version": 2, "chainId": 84, "sender": "3N9be2mwrA52WJho6DiesZkk4351GvpnWuj", "senderPublicKey": "6mzmbCza9iqbzxMEELcEA4Xc9NeF4CYpbTtz1zMK3C7x", "proofs": [ "2hdLU3QKNyzjqwSk6sCVn6qgVfaqG2ycUQ9BdLcGBv2TjrNwxzU2xB7ja8TXULDJto9icvjZYNqTgwcrHng21atk", "444xnf3MH6C7TBapz1cwWqc6YF9EUGxTX1jxafjWNdrDvMsqELykAtr21Jx9ZyMr8aQqCGERX4uYKmX8SRUpvxSE", "Sdh7piSkKzNVpN3xZ2mgAoFX6XxwvcM84mNphwnHnHUHDaC4ghXgHUYJKNJm6Gs5h9R2ArGKQfHpj7bBmrdah9L" ], "script": "base64:BgJhCAISDgoMCAgICAgIAQEBAQEBEgUKAwgIARIHCgUYAQEBARIAEgASBQoDCAEIEgMKAQESBAoCAQgSABIFCgMIAQESBAoCAQESBAoCCAESBgoECAEBCBIGCgQICAEBEgASALABAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEFbGNhbGMBAWwJALkIAQUBbAEOZ2V0TnVtYmVyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAEMZ2V0Qm9vbEJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkAAAEYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQNrZXkCAAEWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQIHYWRkcmVzcwNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUHYWRkcmVzcwUDa2V5BwEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBB2FzQnl0ZXMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB3ZhbEJ5dGUFByRtYXRjaDAFB3ZhbEJ5dGUJAAIBAhxmYWlsIHRvIGNhc3QgaW50byBCeXRlVmVjdG9yAQlhc1BheW1lbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIPQXR0YWNoZWRQYXltZW50BAFwBQckbWF0Y2gwBQFwCQACAQIhZmFpbCB0byBjYXN0IGludG8gQXR0YWNoZWRQYXltZW50ARJhc1N3YXBQYXJhbXNTVFJVQ1QBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIjKEludCwgSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEludCkEBnN0cnVjdAUHJG1hdGNoMAUGc3RydWN0CQACAQIdZmFpbCB0byBjYXN0IGludG8gVHVwbGU1IGludHMAA1NFUAICX18AB0xJU1RTRVACAToABU1VTFQ4AIDC1y8ABU1VTFQ2AMCEPQAOREVGQVVMVFNXQVBGRUUAoJwBAAtCUlBST1RFQ1RFRACgjQYAB1dBVkVTSUQBBBOr2TMAD25NZXRyaWNJZHhQcmljZQAAABtuTWV0cmljSWR4VXNkbkxvY2tlZEJhbGFuY2UAAQAcbk1ldHJpY0lkeFdhdmVzTG9ja2VkQmFsYW5jZQACABFuTWV0cmljSWR4UmVzZXJ2ZQADABduTWV0cmljSWR4UmVzZXJ2ZUluVXNkbgAEABRuTWV0cmljSWR4VXNkblN1cHBseQAFABFuTWV0cmljSWR4U3VycGx1cwAGABhuTWV0cmljSWR4U3VycGx1c1BlcmNlbnQABwAMbk1ldHJpY0lkeEJSAAgAFG5NZXRyaWNJZHhOc2J0U3VwcGx5AAkAF25NZXRyaWNJZHhNYXhOc2J0U3VwcGx5AAoAFG5NZXRyaWNJZHhTdXJmU3VwcGx5AAsAEm5NZXRyaWNVc2RuVXNkdFBlZwAMABZuTWV0cmljQ3VycmVudFByaWNlQWRqAA0AEW5NZXRyaWNCYXNrZXRJbmZvAA4AFG5NZXRyaWNXZWlnaHRlZFByaWNlAA8AF25NZXRyaWNUb3RhbFJlc2VydmVzVXNkABAAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAQAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAIAFElkeENvbnRyb2xDZmdScGREYXBwAAMAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAEABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAUAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAGAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAHABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAgAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAACQAcSWR4Q29udHJvbENmZ1N1cmZTdGFraW5nRGFwcAAKACBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAALABdJZHhDb250cm9sQ2ZnUmVzdFYyRGFwcAAMABtJZHhDb250cm9sQ2ZnR292ZXJuYW5jZURhcHAADQERa2V5Q29udHJvbEFkZHJlc3MAAhwlcyVzX19jb25maWdfX2NvbnRyb2xBZGRyZXNzAQ1rZXlDb250cm9sQ2ZnAAIRJXNfX2NvbnRyb2xDb25maWcBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQdjb250cm9sCQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQdjb250cm9sCQENa2V5Q29udHJvbENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgpjb250cm9sQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKY29udHJvbENmZwUDaWR4CQCsAgICLUNvbnRyb2wgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgAD2NvbnRyb2xDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQERa2V5Q29udHJvbEFkZHJlc3MAAiMzTjROUzdkNEpvOWE2RjE0TGlGVUtLWVZkVWtrZjJlUDRaeAAKY29udHJvbENmZwkBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQUPY29udHJvbENvbnRyYWN0AAxtYXRoQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRVJZHhDb250cm9sQ2ZnTWF0aERhcHAAE25zYnRTdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwABNzdXJmU3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUcSWR4Q29udHJvbENmZ1N1cmZTdGFraW5nRGFwcAAXZ25zYnRDb250cm9sbGVyQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBSBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAAPYXVjdGlvbkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwABRub2RlUmVnaXN0cnlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFHUlkeENvbnRyb2xDZmdOb2RlUmVnaXN0cnlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAASTmV1dHJpbm9Bc3NldElkS2V5AhFuZXV0cmlub19hc3NldF9pZAAOQm9uZEFzc2V0SWRLZXkCDWJvbmRfYXNzZXRfaWQAEkF1Y3Rpb25Db250cmFjdEtleQIQYXVjdGlvbl9jb250cmFjdAAWTnNidFN0YWtpbmdDb250cmFjdEtleQITbnNidFN0YWtpbmdDb250cmFjdAAWTGlxdWlkYXRpb25Db250cmFjdEtleQIUbGlxdWlkYXRpb25fY29udHJhY3QADlJQRENvbnRyYWN0S2V5AgxycGRfY29udHJhY3QAEUNvbnRvbENvbnRyYWN0S2V5AhBjb250cm9sX2NvbnRyYWN0AA9NYXRoQ29udHJhY3RLZXkCDW1hdGhfY29udHJhY3QAG0JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbEtleQIbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAB5CYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxLZXkCHmJhbGFuY2VfbmV1dHJpbm9fbG9ja19pbnRlcnZhbAEVTWluVG9rZW5Td2FwQW1vdW50S2V5AQdhc3NldElkCQCsAgICHG1pbl9vdXROZXV0cmlub19zd2FwX2Ftb3VudF8FB2Fzc2V0SWQAGE1pbk5ldXRyaW5vU3dhcEFtb3VudEtleQIYbWluX291dE11bHRpX3N3YXBfYW1vdW50ABtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkCFG5vZGVfb3JhY2xlX3Byb3ZpZGVyABVOZXV0cmlub091dEZlZVBhcnRLZXkCGG5ldXRyaW5vT3V0X3N3YXBfZmVlUGFydAASV2F2ZXNPdXRGZWVQYXJ0S2V5AhV3YXZlc091dF9zd2FwX2ZlZVBhcnQBD2tleU5vZGVSZWdpc3RyeQEHYWRkcmVzcwkArAICAgQlc19fBQdhZGRyZXNzAAhQcmljZUtleQIFcHJpY2UADVByaWNlSW5kZXhLZXkCC3ByaWNlX2luZGV4AAxJc0Jsb2NrZWRLZXkCCmlzX2Jsb2NrZWQBEmdldFByaWNlSGlzdG9yeUtleQEFYmxvY2sJAKwCAgkArAICBQhQcmljZUtleQIBXwkApAMBBQVibG9jawEYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AQVpbmRleAkArAICCQCsAgIFDVByaWNlSW5kZXhLZXkCAV8JAKQDAQUFaW5kZXgBFWdldFN0YWtpbmdOb2RlQnlJbmRleAEDaWR4CQEOZ2V0U3RyaW5nQnlLZXkBCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICBWxlYXNlCQDMCAIJAKQDAQUDaWR4CQDMCAICC25vZGVBZGRyZXNzBQNuaWwFA1NFUAEcZ2V0U3Rha2luZ05vZGVBZGRyZXNzQnlJbmRleAEDaWR4CQERQGV4dHJOYXRpdmUoMTA2MikBCQEVZ2V0U3Rha2luZ05vZGVCeUluZGV4AQUDaWR4AR9nZXRSZXNlcnZlZEFtb3VudEZvclNwb25zb3JzaGlwAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgVsZWFzZQkAzAgCAhdzcG9uc29yc2hpcFdhdmVzUmVzZXJ2ZQUDbmlsBQNTRVAJAGgCAOgHBQVNVUxUOAEYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AQVvd25lcgkArAICAhViYWxhbmNlX3VubG9ja19ibG9ja18FBW93bmVyAQ1nZXRMZWFzZUlkS2V5AQlub2RlSW5kZXgJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgIFbGVhc2UJAMwIAgkApAMBBQlub2RlSW5kZXgJAMwIAgICaWQFA25pbAUDU0VQARZnZXRMZWFzZUlkQnlBZGRyZXNzS2V5AQtub2RlQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAg5sZWFzZUJ5QWRkcmVzcwkAzAgCBQtub2RlQWRkcmVzcwkAzAgCAgJpZAUDbmlsBQNTRVABEWdldExlYXNlQW1vdW50S2V5AQlub2RlSW5kZXgJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgIFbGVhc2UJAMwIAgkApAMBBQlub2RlSW5kZXgJAMwIAgIGYW1vdW50BQNuaWwFA1NFUAEaZ2V0TGVhc2VBbW91bnRCeUFkZHJlc3NLZXkBC25vZGVBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDmxlYXNlQnlBZGRyZXNzCQDMCAIFC25vZGVBZGRyZXNzCQDMCAICBmFtb3VudAUDbmlsBQNTRVABGGdldExlYXNlR3JvdXBOb2RlTGlzdEtleQEIZ3JvdXBOdW0JALkJAgkAzAgCAgYlcyVkJXMJAMwIAgIKbGVhc2VHcm91cAkAzAgCCQCkAwEFCGdyb3VwTnVtCQDMCAICCG5vZGVMaXN0BQNuaWwFA1NFUAEQbWluU3dhcEFtb3VudEtFWQEIc3dhcFR5cGUJAKwCAgkArAICAgRtaW5fBQhzd2FwVHlwZQIMX3N3YXBfYW1vdW50AQ50b3RhbExvY2tlZEtFWQIIc3dhcFR5cGUHYXNzZXRJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtiYWxhbmNlTG9jawkAzAgCBQhzd2FwVHlwZQkAzAgCBQdhc3NldElkBQNuaWwFA1NFUAEUdG90YWxMb2NrZWRCeVVzZXJLRVkDCHN3YXBUeXBlBW93bmVyB2Fzc2V0SWQJALkJAgkAzAgCAgglcyVzJXMlcwkAzAgCAgtiYWxhbmNlTG9jawkAzAgCBQhzd2FwVHlwZQkAzAgCBQVvd25lcgkAzAgCBQdhc3NldElkBQNuaWwCAV8BFmJhbGFuY2VMb2NrSW50ZXJ2YWxLRVkBCHN3YXBUeXBlAwkAAAIFCHN3YXBUeXBlAghvdXRNdWx0aQUeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5BRtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkBGm5vZGVCYWxhbmNlTG9ja0ludGVydmFsS0VZAAIaYmFsYW5jZV9ub2RlX2xvY2tfaW50ZXJ2YWwBEXN3YXBzVGltZWZyYW1lS0VZAAIPc3dhcHNfdGltZWZyYW1lAQ5iclByb3RlY3RlZEtFWQACF21pbl9CUl9wcm90ZWN0aW9uX2xldmVsAQ9iYXNrZXRBc3NldHNLZXkAAholcyVzX19jb21tb25fX2Jhc2tldEFzc2V0cwEKYmFza2V0REtleQACFSVzJXNfX2NvbW1vbl9fYmFza2V0RAEKYmFza2V0S0tleQACFSVzJXNfX2NvbW1vbl9fYmFza2V0SwEKYmFza2V0QktleQACFSVzJXNfX2NvbW1vbl9fYmFza2V0QgESYmFza2V0TG9nYkRlbHRhS2V5AAIdJXMlc19fY29tbW9uX19iYXNrZXRMb2diRGVsdGEBFmJhc2tldFdlaWdodEJ5QXNzZXRLZXkBB2Fzc2V0SWQJAKwCAgIfJXMlcyVzX19jb21tb25fX3dlaWdodEJ5QXNzZXRfXwUHYXNzZXRJZAERbWluU3dhcEFtb3VudFJFQUQCCHN3YXBUeXBlB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIDCQAAAgUIc3dhcFR5cGUCCG91dE11bHRpCQCfCAEFGE1pbk5ldXRyaW5vU3dhcEFtb3VudEtleQkAnwgBCQEVTWluVG9rZW5Td2FwQW1vdW50S2V5AQUHYXNzZXRJZAAAARJzd2Fwc1RpbWVmcmFtZVJFQUQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARFzd2Fwc1RpbWVmcmFtZUtFWQAAoAsBD3RvdGFsTG9ja2VkUkVBRAIIc3dhcFR5cGUHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG90YWxMb2NrZWRLRVkCBQhzd2FwVHlwZQUHYXNzZXRJZAAAARV0b3RhbExvY2tlZEJ5VXNlclJFQUQDCHN3YXBUeXBlBW93bmVyB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFHRvdGFsTG9ja2VkQnlVc2VyS0VZAwUIc3dhcFR5cGUFBW93bmVyBQdhc3NldElkAAABF2JhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAQhzd2FwVHlwZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWYmFsYW5jZUxvY2tJbnRlcnZhbEtFWQEFCHN3YXBUeXBlAKALARtub2RlQmFsYW5jZUxvY2tJbnRlcnZhbFJFQUQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARpub2RlQmFsYW5jZUxvY2tJbnRlcnZhbEtFWQAAAQEYa2V5U3dhcFVzZXJTcGVudEluUGVyaW9kAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIVc3dhcFVzZXJTcGVudEluUGVyaW9kCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEVa2V5VXNlckxhc3RTd2FwSGVpZ2h0AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgISdXNlckxhc3RTd2FwSGVpZ2h0CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEWY29udmVydE5ldXRyaW5vVG9XYXZlcwIGYW1vdW50BXByaWNlCQBrAwUGYW1vdW50BQVNVUxUOAUFcHJpY2UBFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CBmFtb3VudAVwcmljZQkAawMFBmFtb3VudAUFcHJpY2UFBU1VTFQ4ARJjb252ZXJ0V2F2ZXNUb0JvbmQCBmFtb3VudAVwcmljZQkBFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CBQZhbW91bnQFBXByaWNlARZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AQlqc29uQXJyYXkJALUJAgUJanNvbkFycmF5AgEsARtjb252ZXJ0QmFza2V0SXRlbVRvTmV1dHJpbm8ECGluQW1vdW50B2luQXNzZXQNYmFza2V0SW5mb1N0cg1uZXV0cmlub1ByaWNlBApiYXNrZXRJbmZvCQC1CQIFDWJhc2tldEluZm9TdHICAV8KAQhmaW5kSXRlbQIDYWNjBGl0ZW0EBWJJdGVtCQC1CQIFBGl0ZW0FB0xJU1RTRVADCQAAAgkAkQMCBQViSXRlbQAABQdpbkFzc2V0BQViSXRlbQUDYWNjBAJpdAoAAiRsBQpiYXNrZXRJbmZvCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmaW5kSXRlbQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQFZGxvZzYJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmJhc2tldExvZ2JEZWx0YUtleQAA3qOD9///////AQQCZDYJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBCmJhc2tldERLZXkAANCGAwQCYjYJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBCmJhc2tldEJLZXkAANClTAQCdzYJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmJhc2tldFdlaWdodEJ5QXNzZXRLZXkBBQdpbkFzc2V0AIqWCgQCcDYJAGQCCQBlAgUFZGxvZzYFAnc2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaXQAAQQDcHA2CQBsBgUCYjYABgUCcDYABgAGBQZIQUxGVVAEDm91dEFtb3VudEdyb3NzCQBrAwUIaW5BbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJpdAACAwkAAAIFDW5ldXRyaW5vUHJpY2UAAAUFTVVMVDgJAGgCBQ1uZXV0cmlub1ByaWNlAGQECm11bHRpcGxpZXIJAGUCCQBkAgUFTVVMVDYFAmQ2BQNwcDYECW5ldEFtb3VudAkAawMFDm91dEFtb3VudEdyb3NzBQptdWx0aXBsaWVyBQVNVUxUNgQJZmVlQW1vdW50AwkAZwIFCW5ldEFtb3VudAUOb3V0QW1vdW50R3Jvc3MAAAkAZQIFDm91dEFtb3VudEdyb3NzBQluZXRBbW91bnQJAMwIAgUOb3V0QW1vdW50R3Jvc3MJAMwIAgUJbmV0QW1vdW50CQDMCAIFCWZlZUFtb3VudAUDbmlsARdjb252ZXJ0TmV1dHJpbm9Ub0Jhc2tldAMGYW1vdW50DWJhc2tldEluZm9TdHIObmV1dHJpbm9TdXBwbHkECmJhc2tldEluZm8JALUJAgUNYmFza2V0SW5mb1N0cgIBXwoBBGNvbnYCA2FjYwRpdGVtBAVwYXJ0cwkAtQkCBQRpdGVtBQdMSVNUU0VQBAdhc3NldElkCQCRAwIFBXBhcnRzAAAEBXNoYXJlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQFcHJpY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwACBAZyZXNlcnYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwADAwkAAAIFDm5ldXRyaW5vU3VwcGx5AAAJAAIBAidBdHRlbXB0IHRvIGJ1cm4gbmV1dHJpbm8gYXQgemVybyBzdXBwbHkECW91dEFtb3VudAkAawMFBmFtb3VudAUGcmVzZXJ2BQ5uZXV0cmlub1N1cHBseQQKd2F2ZXNUdXBsZQMJAAACBQdhc3NldElkAgVXQVZFUwkAlAoCBQlvdXRBbW91bnQFBXByaWNlCQCUCgIIBQNhY2MCXzIIBQNhY2MCXzMJAJUKAwkAzQgCCAUDYWNjAl8xCQCWCgQFB2Fzc2V0SWQFCW91dEFtb3VudAUFcHJpY2UFBXNoYXJlCAUKd2F2ZXNUdXBsZQJfMQgFCndhdmVzVHVwbGUCXzIKAAIkbAUKYmFza2V0SW5mbwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEY29udgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgERbWluU3dhcEFtb3VudEZBSUwCCHN3YXBUeXBlDW1pblN3YXBBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAhhUaGUgc3BlY2lmaWVkIGFtb3VudCBpbiAFCHN3YXBUeXBlAisgc3dhcCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVpcmVkIG1pbmltdW0gb2YgCQCkAwEFDW1pblN3YXBBbW91bnQBFWVtZXJnZW5jeVNodXRkb3duRkFJTAAJAAIBAlpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMBDnByaWNlSW5kZXhGQUlMBQVpbmRleApwcmljZUluZGV4C2luZGV4SGVpZ2h0DHVubG9ja0hlaWdodA9wcmV2SW5kZXhIZWlnaHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiNpbnZhbGlkIHByaWNlIGhpc3RvcnkgaW5kZXg6IGluZGV4PQkApAMBBQVpbmRleAIMIHByaWNlSW5kZXg9CQCkAwEFCnByaWNlSW5kZXgCDSBpbmRleEhlaWdodD0JAKQDAQULaW5kZXhIZWlnaHQCDiB1bmxvY2tIZWlnaHQ9CQCkAwEFDHVubG9ja0hlaWdodAIRIHByZXZJbmRleEhlaWdodD0JAKQDAQUPcHJldkluZGV4SGVpZ2h0AA9uZXV0cmlub0Fzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQUSTmV1dHJpbm9Bc3NldElkS2V5AApwcmljZUluZGV4CQEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgUPY29udHJvbENvbnRyYWN0BQ1QcmljZUluZGV4S2V5AAlpc0Jsb2NrZWQJARZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AgUPY29udHJvbENvbnRyYWN0BQxJc0Jsb2NrZWRLZXkAGG5vZGVPcmFjbGVQcm92aWRlclB1YktleQkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBBRtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkAC2JvbmRBc3NldElkCQDZBAECLEYzaWF4enJ1RmVLdWpmVmZZU1pFa2VqcGpoNjd3bVJmUENSSGlObVdLcDNaABVkZXByZWNhdGVkQm9uZEFzc2V0SWQJANkEAQIsOTc1YWtaQmZuTWo1MTNVN01aYUhLelFybXNFeDVhRTN3ZFdLVHJIQmhiakYAEG5ldXRyaW5vQ29udHJhY3QFBHRoaXMADGN1cnJlbnRQcmljZQkBGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQIFD2NvbnRyb2xDb250cmFjdAUIUHJpY2VLZXkBG2NoZWNrSXNWYWxpZE1pblNwb25zb3JlZEZlZQECdHgEDk1JTlRSQU5TRkVSRkVFAKCNBgQWU3BvbnNvcmVkRmVlVXBwZXJCb3VuZADoBwQPcmVhbE5ldXRyaW5vRmVlCQEWY29udmVydFdhdmVzVG9OZXV0cmlubwIFDk1JTlRSQU5TRkVSRkVFBQxjdXJyZW50UHJpY2UEDm1pbk5ldXRyaW5vRmVlCQBoAgUPcmVhbE5ldXRyaW5vRmVlAAIEDm1heE5ldXRyaW5vRmVlCQBrAwUPcmVhbE5ldXRyaW5vRmVlBRZTcG9uc29yZWRGZWVVcHBlckJvdW5kAGQECGlucHV0RmVlCQEFdmFsdWUBCAUCdHgUbWluU3BvbnNvcmVkQXNzZXRGZWUDAwkAZwIFCGlucHV0RmVlBQ5taW5OZXV0cmlub0ZlZQkAZwIFDm1heE5ldXRyaW5vRmVlBQhpbnB1dEZlZQcJAAACCAUCdHgHYXNzZXRJZAUPbmV1dHJpbm9Bc3NldElkBwEPZ2V0UHJpY2VIaXN0b3J5AQVibG9jawkBGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQIFD2NvbnRyb2xDb250cmFjdAkBEmdldFByaWNlSGlzdG9yeUtleQEFBWJsb2NrARVnZXRIZWlnaHRQcmljZUJ5SW5kZXgBBWluZGV4CQEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgUPY29udHJvbENvbnRyYWN0CQEYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AQUFaW5kZXgBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICC3BhcmFtQnlVc2VyCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAICBmFtb3VudAUDbmlsBQNTRVAADHNJZHhTd2FwVHlwZQABAApzSWR4U3RhdHVzAAIADHNJZHhJbkFtb3VudAADAA9zSWR4U3RhcnRIZWlnaHQABwASc0lkeFN0YXJ0VGltZXN0YW1wAAgAFHNJZHhTZWxmVW5sb2NrSGVpZ2h0AAsAC3NJZHhNaW5SYW5kAA8AC3NJZHhNYXhSYW5kABAAC3NJZHhJbkFzc2V0ABQBB3N3YXBLRVkCC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgQlcyVzCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFBHR4SWQFA25pbAUDU0VQAQtzdHJTd2FwREFUQRQIc3dhcFR5cGUGc3RhdHVzCGluQW1vdW50BXByaWNlDG91dE5ldEFtb3VudAxvdXRGZWVBbW91bnQLc3RhcnRIZWlnaHQOc3RhcnRUaW1lc3RhbXAJZW5kSGVpZ2h0DGVuZFRpbWVzdGFtcBBzZWxmVW5sb2NrSGVpZ2h0EHJhbmRVbmxvY2tIZWlnaHQFaW5kZXgMd2l0aGRyYXdUeElkB3JhbmRNaW4HcmFuZE1heApvdXRTdXJmQW10AmJyCmJhc2tldERhdGEHaW5Bc3NldAkAuQkCCQDMCAICKCVzJXMlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJXMlZCVkJWQlZCVzJXMJAMwIAgUIc3dhcFR5cGUJAMwIAgUGc3RhdHVzCQDMCAIFCGluQW1vdW50CQDMCAIFBXByaWNlCQDMCAIFDG91dE5ldEFtb3VudAkAzAgCBQxvdXRGZWVBbW91bnQJAMwIAgULc3RhcnRIZWlnaHQJAMwIAgUOc3RhcnRUaW1lc3RhbXAJAMwIAgUJZW5kSGVpZ2h0CQDMCAIFDGVuZFRpbWVzdGFtcAkAzAgCBRBzZWxmVW5sb2NrSGVpZ2h0CQDMCAIFEHJhbmRVbmxvY2tIZWlnaHQJAMwIAgUFaW5kZXgJAMwIAgUMd2l0aGRyYXdUeElkCQDMCAIFB3JhbmRNaW4JAMwIAgUHcmFuZE1heAkAzAgCBQpvdXRTdXJmQW10CQDMCAIFAmJyCQDMCAIFCmJhc2tldERhdGEJAMwIAgUHaW5Bc3NldAUDbmlsBQNTRVABD3BlbmRpbmdTd2FwREFUQQQIc3dhcFR5cGUNaW5Bc3NldEFtb3VudBBzZWxmVW5sb2NrSGVpZ2h0B2luQXNzZXQJAQtzdHJTd2FwREFUQRQFCHN3YXBUeXBlAgdQRU5ESU5HCQCkAwEFDWluQXNzZXRBbW91bnQCATACATACATAJAKQDAQUGaGVpZ2h0CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgEwAgEwCQCkAwEFEHNlbGZVbmxvY2tIZWlnaHQCATACATACBE5VTEwCATACATACATACATACAAUHaW5Bc3NldAEOZmluaXNoU3dhcERBVEELCWRhdGFBcnJheQVwcmljZQxvdXROZXRBbW91bnQMb3V0RmVlQW1vdW50EHJhbmRVbmxvY2tIZWlnaHQFaW5kZXgMd2l0aGRyYXdUeElkCm91dFN1cmZBbXQCYnIKYmFza2V0RGF0YQdpbkFzc2V0CQELc3RyU3dhcERBVEEUCQCRAwIFCWRhdGFBcnJheQUMc0lkeFN3YXBUeXBlAghGSU5JU0hFRAkAkQMCBQlkYXRhQXJyYXkFDHNJZHhJbkFtb3VudAkApAMBBQVwcmljZQkApAMBBQxvdXROZXRBbW91bnQJAKQDAQUMb3V0RmVlQW1vdW50CQCRAwIFCWRhdGFBcnJheQUPc0lkeFN0YXJ0SGVpZ2h0CQCRAwIFCWRhdGFBcnJheQUSc0lkeFN0YXJ0VGltZXN0YW1wCQCkAwEFBmhlaWdodAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAkQMCBQlkYXRhQXJyYXkFFHNJZHhTZWxmVW5sb2NrSGVpZ2h0CQCkAwEFEHJhbmRVbmxvY2tIZWlnaHQJAKQDAQUFaW5kZXgFDHdpdGhkcmF3VHhJZAkAkQMCBQlkYXRhQXJyYXkFC3NJZHhNaW5SYW5kCQCRAwIFCWRhdGFBcnJheQULc0lkeE1heFJhbmQJAKQDAQUKb3V0U3VyZkFtdAkApAMBBQJicgUKYmFza2V0RGF0YQUHaW5Bc3NldAESc3dhcERhdGFGYWlsT3JSRUFEAgt1c2VyQWRkcmVzcwhzd2FwVHhJZAQHc3dhcEtleQkBB3N3YXBLRVkCBQt1c2VyQWRkcmVzcwUIc3dhcFR4SWQJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEFB3N3YXBLZXkJAKwCAgIRbm8gc3dhcCBkYXRhIGZvciAFB3N3YXBLZXkFA1NFUAEJYXBwbHlGZWVzAw5hbW91bnRPdXRHcm9zcwtpbkFtdFRvU1VSRgdmZWVQYXJ0BAlmZWVBbW91bnQJAGsDBQ5hbW91bnRPdXRHcm9zcwUHZmVlUGFydAUFTVVMVDYJAMwIAgkAZQIFDmFtb3VudE91dEdyb3NzBQlmZWVBbW91bnQJAMwIAgUJZmVlQW1vdW50BQNuaWwBD2FwcGx5RmVlc0Jhc2tldAEJYmFza2V0T3V0BAJrNgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEKYmFza2V0S0tleQAFBU1VTFQ2BAJkNgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEKYmFza2V0REtleQAA0IYDBAdmZWVQYXJ0CQBrAwUCazYFAmQ2BQVNVUxUNgoBCmZlZUFwcGxpZXICA2FjYwRpdGVtBAlmZWVBbW91bnQJAGsDCAUEaXRlbQJfMgUHZmVlUGFydAUFTVVMVDYJAM0IAgUDYWNjCQC5CQIJAMwIAggFBGl0ZW0CXzEJAMwIAgkApAMBCAUEaXRlbQJfMwkAzAgCCQCkAwEJAGUCCAUEaXRlbQJfMgUJZmVlQW1vdW50CQDMCAIJAKQDAQUJZmVlQW1vdW50CQDMCAIJAKQDAQgFBGl0ZW0CXzQFA25pbAUHTElTVFNFUAQBYQoAAiRsBQliYXNrZXRPdXQKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmZlZUFwcGxpZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJALkJAgUBYQUDU0VQAQNhYnMBAXgDCQBmAgAABQF4CQEBLQEFAXgFAXgBCnNlbGVjdE5vZGUBDXVubGVhc2VBbW91bnQEDWFtb3VudFRvTGVhc2UJAGUCCQBlAggJAO8HAQUQbmV1dHJpbm9Db250cmFjdAlhdmFpbGFibGUFDXVubGVhc2VBbW91bnQJAR9nZXRSZXNlcnZlZEFtb3VudEZvclNwb25zb3JzaGlwAAQKb2xkTGVhc2VkMAkBDmdldE51bWJlckJ5S2V5AQkBEWdldExlYXNlQW1vdW50S2V5AQAABApvbGRMZWFzZWQxCQEOZ2V0TnVtYmVyQnlLZXkBCQERZ2V0TGVhc2VBbW91bnRLZXkBAAEECm5ld0xlYXNlZDAJAGQCBQ1hbW91bnRUb0xlYXNlBQpvbGRMZWFzZWQwBApuZXdMZWFzZWQxCQBkAgUNYW1vdW50VG9MZWFzZQUKb2xkTGVhc2VkMQMDCQBmAgUKbmV3TGVhc2VkMAAABgkAZgIFCm5ld0xlYXNlZDEAAAQGZGVsdGEwCQEDYWJzAQkAZQIFCm5ld0xlYXNlZDAFCm9sZExlYXNlZDEEBmRlbHRhMQkBA2FicwEJAGUCBQpuZXdMZWFzZWQxBQpvbGRMZWFzZWQwAwkAZwIFBmRlbHRhMQUGZGVsdGEwCQCUCgIAAAUKbmV3TGVhc2VkMAkAlAoCAAEFCm5ld0xlYXNlZDEJAJQKAgD///////////8BAAABCHRoaXNPbmx5AQFpAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQItUGVybWlzc2lvbiBkZW5pZWQ6IHRoaXMgY29udHJhY3Qgb25seSBhbGxvd2VkBgEWcHJlcGFyZVVubGVhc2VBbmRMZWFzZQENdW5sZWFzZUFtb3VudAQJbm9kZVR1cGxlCQEKc2VsZWN0Tm9kZQEFDXVubGVhc2VBbW91bnQECW5vZGVJbmRleAgFCW5vZGVUdXBsZQJfMQQObmV3TGVhc2VBbW91bnQIBQlub2RlVHVwbGUCXzIDCQBmAgUObmV3TGVhc2VBbW91bnQAAAQKbGVhc2VJZEtleQkBDWdldExlYXNlSWRLZXkBBQlub2RlSW5kZXgECG9sZExlYXNlCQCcCAIFBHRoaXMFCmxlYXNlSWRLZXkEDnVubGVhc2VPckVtcHR5AwkBCWlzRGVmaW5lZAEFCG9sZExlYXNlCQDMCAIJAQtMZWFzZUNhbmNlbAEJAQV2YWx1ZQEFCG9sZExlYXNlBQNuaWwFA25pbAQObGVhc2VBbW91bnRLZXkJARFnZXRMZWFzZUFtb3VudEtleQEFCW5vZGVJbmRleAQFbGVhc2UJAMQIAgkBHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBBQlub2RlSW5kZXgFDm5ld0xlYXNlQW1vdW50CQDOCAIFDnVubGVhc2VPckVtcHR5CQDMCAIFBWxlYXNlCQDMCAIJAQtCaW5hcnlFbnRyeQIFCmxlYXNlSWRLZXkJAQVsY2FsYwEFBWxlYXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERZ2V0TGVhc2VBbW91bnRLZXkBBQlub2RlSW5kZXgFDm5ld0xlYXNlQW1vdW50BQNuaWwFA25pbAEMcmVhZE5vZGVJbmZvAQdub2RlSWR4BAtub2RlQWRkcmVzcwkBHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBBQdub2RlSWR4BAxsZWFzZWRBbXRLRVkJARFnZXRMZWFzZUFtb3VudEtleQEFB25vZGVJZHgECWxlYXNlZEFtdAkBDmdldE51bWJlckJ5S2V5AQUMbGVhc2VkQW10S0VZBApsZWFzZUlkS0VZCQENZ2V0TGVhc2VJZEtleQEFB25vZGVJZHgEB2xlYXNlSWQJAQV2YWx1ZQEJAJwIAgUEdGhpcwUKbGVhc2VJZEtFWQkAlwoFBQtub2RlQWRkcmVzcwUMbGVhc2VkQW10S0VZBQlsZWFzZWRBbXQFCmxlYXNlSWRLRVkFB2xlYXNlSWQBCmNvbW1vblN3YXAFCHN3YXBUeXBlCXBtdEFtb3VudAdpbkFzc2V0DnVzZXJBZGRyZXNzU3RyBnR4SWQ1OAQQc3dhcFBhcmFtc1NUUlVDVAkBEmFzU3dhcFBhcmFtc1NUUlVDVAEJAPwHBAUEdGhpcwIbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIAAAUDbmlsBQNuaWwEDnN3YXBMaW1pdFNwZW50CAUQc3dhcFBhcmFtc1NUUlVDVAJfMgQOYmxja3MyTG10UmVzZXQIBRBzd2FwUGFyYW1zU1RSVUNUAl8zBBF3YXZlc1N3YXBMaW1pdE1heAgFEHN3YXBQYXJhbXNTVFJVQ1QCXzYEEHVzZG5Td2FwTGltaXRNYXgIBRBzd2FwUGFyYW1zU1RSVUNUAl83BA1taW5Td2FwQW1vdW50CQERbWluU3dhcEFtb3VudFJFQUQCBQhzd2FwVHlwZQUHaW5Bc3NldAQLdG90YWxMb2NrZWQJAQ90b3RhbExvY2tlZFJFQUQCBQhzd2FwVHlwZQUHaW5Bc3NldAQRdG90YWxMb2NrZWRCeVVzZXIJARV0b3RhbExvY2tlZEJ5VXNlclJFQUQDBQhzd2FwVHlwZQUOdXNlckFkZHJlc3NTdHIFB2luQXNzZXQEC25vZGVBZGRyZXNzCQEVZ2V0U3Rha2luZ05vZGVCeUluZGV4AQAABAxwcmljZUJ5SW5kZXgJAQ9nZXRQcmljZUhpc3RvcnkBCQEVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AQUKcHJpY2VJbmRleAQMaXNTd2FwQnlOb2RlCQAAAgULbm9kZUFkZHJlc3MFDnVzZXJBZGRyZXNzU3RyBBZiYWxhbmNlTG9ja01heEludGVydmFsAwUMaXNTd2FwQnlOb2RlCQEbbm9kZUJhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAAkBF2JhbGFuY2VMb2NrSW50ZXJ2YWxSRUFEAQUIc3dhcFR5cGUEEHNlbGZVbmxvY2tIZWlnaHQJAGQCBQZoZWlnaHQFFmJhbGFuY2VMb2NrTWF4SW50ZXJ2YWwEDnN3YXBVc2RuVm9sdW1lAwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwkBFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CBQlwbXRBbW91bnQFDHByaWNlQnlJbmRleAUJcG10QW1vdW50BAxzd2FwTGltaXRNYXgDCQAAAgUIc3dhcFR5cGUCC291dE5ldXRyaW5vCQEWY29udmVydFdhdmVzVG9OZXV0cmlubwIFEXdhdmVzU3dhcExpbWl0TWF4BQxwcmljZUJ5SW5kZXgFEHVzZG5Td2FwTGltaXRNYXgDCQBmAgUNbWluU3dhcEFtb3VudAUJcG10QW1vdW50CQERbWluU3dhcEFtb3VudEZBSUwCBQhzd2FwVHlwZQUNbWluU3dhcEFtb3VudAMDCQEBIQEFDGlzU3dhcEJ5Tm9kZQkAZgIFDnN3YXBMaW1pdFNwZW50AAAHCQACAQkArAICAjpZb3UgaGF2ZSBleGNlZWRlZCBzd2FwIGxpbWl0ISBOZXh0IGFsbG93ZWQgc3dhcCBoZWlnaHQgaXMgCQCkAwEJAGQCBQZoZWlnaHQFDmJsY2tzMkxtdFJlc2V0AwMJAQEhAQUMaXNTd2FwQnlOb2RlCQBmAgUOc3dhcFVzZG5Wb2x1bWUFDHN3YXBMaW1pdE1heAcJAAIBCQCsAgIJAKwCAgkArAICAi5Zb3UgaGF2ZSBleGNlZWRlZCB5b3VyIHN3YXAgbGltaXQhIFJlcXVlc3RlZDogCQCkAwEFDnN3YXBVc2RuVm9sdW1lAg0sIGF2YWlsYWJsZTogCQCkAwEFDHN3YXBMaW1pdE1heAMFCWlzQmxvY2tlZAkBFWVtZXJnZW5jeVNodXRkb3duRkFJTAAED25ldXRyaW5vTWV0cmljcwkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwECmJhc2tldEluZm8JAQhhc1N0cmluZwEJAJEDAgUPbmV1dHJpbm9NZXRyaWNzBRFuTWV0cmljQmFza2V0SW5mbwQNd2VpZ2h0ZWRQcmljZQkBBWFzSW50AQkAkQMCBQ9uZXV0cmlub01ldHJpY3MFFG5NZXRyaWNXZWlnaHRlZFByaWNlBANvdXQJARtjb252ZXJ0QmFza2V0SXRlbVRvTmV1dHJpbm8EBQlwbXRBbW91bnQFB2luQXNzZXQFCmJhc2tldEluZm8FDXdlaWdodGVkUHJpY2UDAwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwkAZwIAAAkAkQMCBQNvdXQAAQcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAj5OZXQgYW1vdW50IGlzIG5vbi1wb3NpdGl2ZSwgY2Fubm90IHN3YXAuIChncm9zcywgbmV0LCBmZWUpID0gKAkApAMBCQCRAwIFA291dAAAAgIsIAkApAMBCQCRAwIFA291dAABAgIsIAkApAMBCQCRAwIFA291dAACAgEpBAlsZWFzZVBhcnQDAwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwkAAAIFB2luQXNzZXQCBVdBVkVTBwkBFnByZXBhcmVVbmxlYXNlQW5kTGVhc2UBAAAFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QBBQ51c2VyQWRkcmVzc1N0cgUOc3dhcFVzZG5Wb2x1bWUJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlVc2VyTGFzdFN3YXBIZWlnaHQBBQ51c2VyQWRkcmVzc1N0cgUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUdG90YWxMb2NrZWRCeVVzZXJLRVkDBQhzd2FwVHlwZQUOdXNlckFkZHJlc3NTdHIFB2luQXNzZXQJAGQCBRF0b3RhbExvY2tlZEJ5VXNlcgUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AQUOdXNlckFkZHJlc3NTdHIFEHNlbGZVbmxvY2tIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b3RhbExvY2tlZEtFWQIFCHN3YXBUeXBlBQdpbkFzc2V0CQBkAgULdG90YWxMb2NrZWQFCXBtdEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEHc3dhcEtFWQIFDnVzZXJBZGRyZXNzU3RyBQZ0eElkNTgJAQ9wZW5kaW5nU3dhcERBVEEEBQhzd2FwVHlwZQUJcG10QW1vdW50BRBzZWxmVW5sb2NrSGVpZ2h0BQdpbkFzc2V0BQNuaWwFCWxlYXNlUGFydAUEdW5pdAAMYkZ1bmNJZHhTdXJmAAAADWJGdW5jSWR4V2F2ZXMAAQAMYkZ1bmNJZHhVc2RuAAIAFGJGdW5jSWR4UmVzZXJ2ZVN0YXJ0AAMAE2JGdW5jSWR4U3VwcGx5U3RhcnQABAAPYkZ1bmNJZHhCUlN0YXJ0AAUAEmJGdW5jSWR4UmVzZXJ2ZUVuZAAGABFiRnVuY0lkeFN1cHBseUVuZAAHAA1iRnVuY0lkeEJSRW5kAAgADGJGdW5jSWR4UmVzdAAJABJiRnVuY0lkeFdhdmVzUHJpY2UACgEPY2FsY1dpdGhkcmF3VDJVBAhpbkFtb3VudAdpbkFzc2V0CmJhc2tldEluZm8Nd2VpZ2h0ZWRQcmljZQQGb3V0QW10CQEbY29udmVydEJhc2tldEl0ZW1Ub05ldXRyaW5vBAUIaW5BbW91bnQFB2luQXNzZXQFCmJhc2tldEluZm8FDXdlaWdodGVkUHJpY2UJAJ4KDAkAkQMCBQZvdXRBbXQAAAUPbmV1dHJpbm9Bc3NldElkAAAFB2luQXNzZXQAAAUNd2VpZ2h0ZWRQcmljZQUIaW5BbW91bnQAAAAAAAAFA25pbAkAzAgCCQCRAwIFBm91dEFtdAABCQDMCAIJAJEDAgUGb3V0QW10AAIFA25pbAEUY2FsY1dpdGhkcmF3VTJCYXNrZXQFBnVzZG5JbgpiYXNrZXRJbmZvAmJyDnJlc2VydmVzSW5Vc2RuDm5ldXRyaW5vU3VwcGx5BAticlByb3RlY3RlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOYnJQcm90ZWN0ZWRLRVkABQtCUlBST1RFQ1RFRAQZbWF4QWxsb3dlZFVzZG5CZWZvcmVNaW5CcgMJAGcCBQticlByb3RlY3RlZAUCYnIAAAkAawMJAGUCBQ5yZXNlcnZlc0luVXNkbgkAawMFC2JyUHJvdGVjdGVkBQ5uZXV0cmlub1N1cHBseQUFTVVMVDYFBU1VTFQ2CQBlAgUFTVVMVDYFC2JyUHJvdGVjdGVkBBZhbGxvd2VkVXNkbkJlZm9yZU1pbkJyAwkAZgIFBnVzZG5JbgUZbWF4QWxsb3dlZFVzZG5CZWZvcmVNaW5CcgUZbWF4QWxsb3dlZFVzZG5CZWZvcmVNaW5CcgUGdXNkbkluBBVhbGxvd2VkVXNkbkFmdGVyTWluQnIDCQBmAgUGdXNkbkluBRltYXhBbGxvd2VkVXNkbkJlZm9yZU1pbkJyCQBrAwkAZQIFBnVzZG5JbgUZbWF4QWxsb3dlZFVzZG5CZWZvcmVNaW5CcgUCYnIFBU1VTFQ2AAAEC2FsbG93ZWRVc2RuCQBkAgUWYWxsb3dlZFVzZG5CZWZvcmVNaW5CcgUVYWxsb3dlZFVzZG5BZnRlck1pbkJyBAl1c2RuMlNVUkYJAGUCBQZ1c2RuSW4FC2FsbG93ZWRVc2RuBAtvdXRBbXRHcm9zcwkBF2NvbnZlcnROZXV0cmlub1RvQmFza2V0AwULYWxsb3dlZFVzZG4FCmJhc2tldEluZm8FDm5ldXRyaW5vU3VwcGx5CQCeCgwIBQtvdXRBbXRHcm9zcwJfMgUEdW5pdAUJdXNkbjJTVVJGBQ9uZXV0cmlub0Fzc2V0SWQIBQtvdXRBbXRHcm9zcwJfMggFC291dEFtdEdyb3NzAl8zBQthbGxvd2VkVXNkbgUZbWF4QWxsb3dlZFVzZG5CZWZvcmVNaW5CcgUWYWxsb3dlZFVzZG5CZWZvcmVNaW5CcgUVYWxsb3dlZFVzZG5BZnRlck1pbkJyCAULb3V0QW10R3Jvc3MCXzEFA25pbAEMY2FsY1dpdGhkcmF3BQhzd2FwVHlwZQhpbkFtb3VudAVwcmljZQ9uZXV0cmlub01ldHJpY3MHaW5Bc3NldAQLYnJQcm90ZWN0ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDmJyUHJvdGVjdGVkS0VZAAULQlJQUk9URUNURUQEAkJSCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUMbk1ldHJpY0lkeEJSBA1yZXNlcnZlc0luVXNkCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUXbk1ldHJpY1RvdGFsUmVzZXJ2ZXNVc2QEDm5ldXRyaW5vU3VwcGx5CQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUUbk1ldHJpY0lkeFVzZG5TdXBwbHkECmJhc2tldEluZm8JAQhhc1N0cmluZwEJAJEDAgUPbmV1dHJpbm9NZXRyaWNzBRFuTWV0cmljQmFza2V0SW5mbwQNd2VpZ2h0ZWRQcmljZQkBBWFzSW50AQkAkQMCBQ9uZXV0cmlub01ldHJpY3MFFG5NZXRyaWNXZWlnaHRlZFByaWNlBAxvdXREYXRhVHVwbGUDCQAAAgUIc3dhcFR5cGUCC291dE5ldXRyaW5vCQEPY2FsY1dpdGhkcmF3VDJVBAUIaW5BbW91bnQFB2luQXNzZXQFCmJhc2tldEluZm8FDXdlaWdodGVkUHJpY2UDCQAAAgUIc3dhcFR5cGUCCG91dE11bHRpCQEUY2FsY1dpdGhkcmF3VTJCYXNrZXQFBQhpbkFtb3VudAUKYmFza2V0SW5mbwUCQlIFDXJlc2VydmVzSW5Vc2QFDm5ldXRyaW5vU3VwcGx5CQACAQkArAICAhZVbnN1cHBvcnRlZCBzd2FwIHR5cGUgBQhzd2FwVHlwZQQLb3V0QW10R3Jvc3MIBQxvdXREYXRhVHVwbGUCXzEECm91dEFzc2V0SWQIBQxvdXREYXRhVHVwbGUCXzIED2luQW10VG9TdXJmUGFydAgFDG91dERhdGFUdXBsZQJfMwQJaW5Bc3NldElkCAUMb3V0RGF0YVR1cGxlAl80BAp1bmxlYXNlQW10CAUMb3V0RGF0YVR1cGxlAl81BA13aXRoZHJhd1ByaWNlCAUMb3V0RGF0YVR1cGxlAl82BApiYXNrZXREYXRhCAUMb3V0RGF0YVR1cGxlA18xMQQKbmV0RmVlRGF0YQgFDG91dERhdGFUdXBsZQNfMTIECW91dE5ldEFtdAMJAAACBQhzd2FwVHlwZQILb3V0TmV1dHJpbm8JAJEDAgUKbmV0RmVlRGF0YQAAAAAECW91dEZlZUFtdAMJAAACBQhzd2FwVHlwZQILb3V0TmV1dHJpbm8JAJEDAgUKbmV0RmVlRGF0YQABAAAECm91dFN1cmZBbXQDCQBnAgAABQ9pbkFtdFRvU3VyZlBhcnQAAAkBBWFzSW50AQkAkQMCCQEJYXNBbnlMaXN0AQkA/AcEBQxtYXRoQ29udHJhY3QCFHN1cmZGdW5jdGlvblJFQURPTkxZCQDMCAIFD2luQW10VG9TdXJmUGFydAkAzAgCBQlpbkFzc2V0SWQFA25pbAUDbmlsBQxiRnVuY0lkeFN1cmYEDndpdGhkcmF3QmFza2V0AwkAAAIFCHN3YXBUeXBlAghvdXRNdWx0aQkBD2FwcGx5RmVlc0Jhc2tldAEFCmJhc2tldERhdGECAAkAmwoJBQlvdXROZXRBbXQFCm91dEFzc2V0SWQFCm91dFN1cmZBbXQFD2luQW10VG9TdXJmUGFydAUKdW5sZWFzZUFtdAUJb3V0RmVlQW10BQtvdXRBbXRHcm9zcwUNd2l0aGRyYXdQcmljZQUOd2l0aGRyYXdCYXNrZXQBEmtleUFwcGx5SW5Qcm9ncmVzcwACEyVzX19hcHBseUluUHJvZ3Jlc3MBE2tleVByb3Bvc2FsRGF0YUJ5SWQBCnByb3Bvc2FsSWQJAKwCAgIUJXMlZF9fcHJvcG9zYWxEYXRhX18JAKQDAQUKcHJvcG9zYWxJZAALZ292SWR4VHhJZHMACQEOdmFsaWRhdGVVcGRhdGUBAnR4BAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAgVPcmRlcgQBbwUHJG1hdGNoMAkAAgECFU9yZGVycyBhcmVuJ3QgYWxsb3dlZAMDCQABAgUHJG1hdGNoMAIPRGF0YVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhVTcG9uc29yRmVlVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhZDcmVhdGVBbGlhc1RyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhZMZWFzZUNhbmNlbFRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhBMZWFzZVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhBJc3N1ZVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhtJbnZva2VFeHByZXNzaW9uVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACGlVwZGF0ZUFzc2V0SW5mb1RyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAIZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAITVHJhbnNmZXJUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAITRXhjaGFuZ2VUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAIXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACD0J1cm5UcmFuc2FjdGlvbgYJAAECBQckbWF0Y2gwAhJSZWlzc3VlVHJhbnNhY3Rpb24EAXQFByRtYXRjaDAEBHR4SWQJANgEAQgFAXQCaWQECnByb3Bvc2FsSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQtnb3ZDb250cmFjdAkBEmtleUFwcGx5SW5Qcm9ncmVzcwACFkFwcGx5IGlzIG5vdCBoYXBwZW5pbmcEBnR4TGlzdAkAtQkCCQCRAwIJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFC2dvdkNvbnRyYWN0CQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAULZ292SWR4VHhJZHMFB0xJU1RTRVADCQEBIQEJAQlpc0RlZmluZWQBCQDPCAIFBnR4TGlzdAUEdHhJZAkAAgEJAKwCAgkArAICCQCsAgICDlVua25vd24gdHhJZDogBQR0eElkAhAgZm9yIHByb3Bvc2FsSWQ9CQCkAwEFCnByb3Bvc2FsSWQGCQACAQILTWF0Y2ggZXJyb3IQAWkBDWNvbnN0cnVjdG9yVjEMEm5ldXRyaW5vQXNzZXRJZFBybQ5ib25kQXNzZXRJZFBybRJhdWN0aW9uQ29udHJhY3RQcm0WbGlxdWlkYXRpb25Db250cmFjdFBybQ5ycGRDb250cmFjdFBybRtub2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlQcm0bYmFsYW5jZVdhdmVzTG9ja0ludGVydmFsUHJtHmJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbFBybRVtaW5XYXZlc1N3YXBBbW91bnRQcm0YbWluTmV1dHJpbm9Td2FwQW1vdW50UHJtFW5ldXRyaW5vT3V0RmVlUGFydFBybRJ3YXZlc091dEZlZVBhcnRQcm0EC2NoZWNrQ2FsbGVyCQEIdGhpc09ubHkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUSTmV1dHJpbm9Bc3NldElkS2V5BRJuZXV0cmlub0Fzc2V0SWRQcm0JAMwIAgkBC1N0cmluZ0VudHJ5AgUOQm9uZEFzc2V0SWRLZXkFDmJvbmRBc3NldElkUHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFEkF1Y3Rpb25Db250cmFjdEtleQUSYXVjdGlvbkNvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkFFmxpcXVpZGF0aW9uQ29udHJhY3RQcm0JAMwIAgkBC1N0cmluZ0VudHJ5AgUOUlBEQ29udHJhY3RLZXkFDnJwZENvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFG05vZGVPcmFjbGVQcm92aWRlclB1YktleUtleQUbbm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkFG2JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbFBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5BR5iYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIJARVNaW5Ub2tlblN3YXBBbW91bnRLZXkBAgVXQVZFUwUVbWluV2F2ZXNTd2FwQW1vdW50UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkFGG1pbk5ldXRyaW5vU3dhcEFtb3VudFBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUVTmV1dHJpbm9PdXRGZWVQYXJ0S2V5BRVuZXV0cmlub091dEZlZVBhcnRQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFEldhdmVzT3V0RmVlUGFydEtleQUSd2F2ZXNPdXRGZWVQYXJ0UHJtBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY29uc3RydWN0b3JWMgMMbWF0aENvbnRyYWN0E25zYnRTdGFraW5nQ29udHJhY3QUc3dhcHNUaW1lZnJhbWVCbG9ja3MEC2NoZWNrQ2FsbGVyCQEIdGhpc09ubHkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPTWF0aENvbnRyYWN0S2V5BQxtYXRoQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUWTnNidFN0YWtpbmdDb250cmFjdEtleQUTbnNidFN0YWtpbmdDb250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEXN3YXBzVGltZWZyYW1lS0VZAAUUc3dhcHNUaW1lZnJhbWVCbG9ja3MFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jb25zdHJ1Y3RvclYzBRFhc3NldHNXZWlnaHRzTWlucwZkUGFyYW0Ga1BhcmFtBmJQYXJhbQpkZWx0YVBhcmFtBAtjaGVja0NhbGxlcgkBCHRoaXNPbmx5AQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNubyBwYXltZW50cyBhbGxvd2VkCgEHcHJlcGFyZQIDYWNjBGl0ZW0EBXBhcnRzCQC1CQIFBGl0ZW0CAV8EB2Fzc2V0SWQJAJEDAgUFcGFydHMAAAQGd2VpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQGbWluVmFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAgkAlAoCCQDNCAIIBQNhY2MCXzEFB2Fzc2V0SWQJAM0IAgkAzQgCCAUDYWNjAl8yCQEMSW50ZWdlckVudHJ5AgkBFmJhc2tldFdlaWdodEJ5QXNzZXRLZXkBBQdhc3NldElkBQZ3ZWlnaHQJAQxJbnRlZ2VyRW50cnkCCQEVTWluVG9rZW5Td2FwQW1vdW50S2V5AQUHYXNzZXRJZAUGbWluVmFsBAFyCgACJGwFEWFzc2V0c1dlaWdodHNNaW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHcHJlcGFyZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBCmJhc2tldERLZXkABQZkUGFyYW0JAQxJbnRlZ2VyRW50cnkCCQEKYmFza2V0S0tleQAFBmtQYXJhbQkBDEludGVnZXJFbnRyeQIJAQpiYXNrZXRCS2V5AAUGYlBhcmFtCQEMSW50ZWdlckVudHJ5AgkBEmJhc2tldExvZ2JEZWx0YUtleQAJAG0GBQpkZWx0YVBhcmFtAAYFBmJQYXJhbQAGAAYFBkhBTEZVUAkBC1N0cmluZ0VudHJ5AgkBD2Jhc2tldEFzc2V0c0tleQAJALkJAggFAXICXzEFA1NFUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNzd2FwVG9rZW5Ub05ldXRyaW5vAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECLHN3YXBUb2tlblRvTmV1dHJpbm8gcmVxdWlyZSBvbmx5IG9uZSBwYXltZW50BANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQMYmFza2V0QXNzZXRzCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9iYXNrZXRBc3NldHNLZXkAAgVXQVZFUwQNcG10QXNzZXRJZFN0cgkA2AQBCQELdmFsdWVPckVsc2UCCAUDcG10B2Fzc2V0SWQFB1dBVkVTSUQDCQEBIQEJAQhjb250YWlucwIFDGJhc2tldEFzc2V0cwUNcG10QXNzZXRJZFN0cgkAAgEJAKwCAgkArAICBQ1wbXRBc3NldElkU3RyAh0gaXMgbm90IG9uZSBvZiBiYXNrZXQgdG9rZW5zOgUMYmFza2V0QXNzZXRzBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBnR4SWQ1OAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQEKY29tbW9uU3dhcAUCC291dE5ldXRyaW5vCAUDcG10BmFtb3VudAUNcG10QXNzZXRJZFN0cgULdXNlckFkZHJlc3MFBnR4SWQ1OAFpARRzd2FwTmV1dHJpbm9Ub0Jhc2tldAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAi1zd2FwTmV1dHJpbm9Ub0Jhc2tldCByZXF1aXJlIG9ubHkgb25lIHBheW1lbnQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQ9uZXV0cmlub0Fzc2V0SWQJAAIBAjpPbmx5IGFwcHJvcHJpYXRlIE5ldXRyaW5vIHRva2VucyBhcmUgYWxsb3dlZCBmb3Igc3dhcHBpbmcuBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBnR4SWQ1OAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQEKY29tbW9uU3dhcAUCCG91dE11bHRpCAUDcG10BmFtb3VudAkA2AQBBQ9uZXV0cmlub0Fzc2V0SWQFC3VzZXJBZGRyZXNzBQZ0eElkNTgBaQEId2l0aGRyYXcDB2FjY291bnQFaW5kZXgIc3dhcFR4SWQEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQED25ldXRyaW5vTWV0cmljcwkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwEAkJSCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUMbk1ldHJpY0lkeEJSBAt1c2VyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWNjb3VudAQJZGF0YUFycmF5CQESc3dhcERhdGFGYWlsT3JSRUFEAgUHYWNjb3VudAUIc3dhcFR4SWQEEHNlbGZVbmxvY2tIZWlnaHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkYXRhQXJyYXkFFHNJZHhTZWxmVW5sb2NrSGVpZ2h0BAhzd2FwVHlwZQkAkQMCBQlkYXRhQXJyYXkFDHNJZHhTd2FwVHlwZQQIaW5BbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkYXRhQXJyYXkFDHNJZHhJbkFtb3VudAQKc3dhcFN0YXR1cwkAkQMCBQlkYXRhQXJyYXkFCnNJZHhTdGF0dXMEC3N0YXJ0SGVpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGF0YUFycmF5BQ9zSWR4U3RhcnRIZWlnaHQEB2luQXNzZXQJAJEDAgUJZGF0YUFycmF5BQtzSWR4SW5Bc3NldAQLdG90YWxMb2NrZWQJAQ90b3RhbExvY2tlZFJFQUQCBQhzd2FwVHlwZQUHaW5Bc3NldAQRdG90YWxMb2NrZWRCeVVzZXIJARV0b3RhbExvY2tlZEJ5VXNlclJFQUQDBQhzd2FwVHlwZQUHYWNjb3VudAUHaW5Bc3NldAQMdW5sb2NrSGVpZ2h0BRBzZWxmVW5sb2NrSGVpZ2h0BAtpbmRleEhlaWdodAkBFWdldEhlaWdodFByaWNlQnlJbmRleAEFBWluZGV4BA9wcmV2SW5kZXhIZWlnaHQJARVnZXRIZWlnaHRQcmljZUJ5SW5kZXgBCQBlAgUFaW5kZXgAAQQMcHJpY2VCeUluZGV4CQEPZ2V0UHJpY2VIaXN0b3J5AQULaW5kZXhIZWlnaHQDBQlpc0Jsb2NrZWQJARVlbWVyZ2VuY3lTaHV0ZG93bkZBSUwAAwkBAiE9AgUKc3dhcFN0YXR1cwIHUEVORElORwkAAgECH3N3YXAgaGFzIGJlZW4gYWxyZWFkeSBwcm9jZXNzZWQDCQBmAgUMdW5sb2NrSGVpZ2h0BQZoZWlnaHQJAAIBCQCsAgIJAKwCAgIRcGxlYXNlIHdhaXQgZm9yOiAJAKQDAQUMdW5sb2NrSGVpZ2h0Ah8gYmxvY2sgaGVpZ2h0IHRvIHdpdGhkcmF3IGZ1bmRzAwMDCQBmAgUFaW5kZXgFCnByaWNlSW5kZXgGCQBmAgUMdW5sb2NrSGVpZ2h0BQtpbmRleEhlaWdodAYDCQECIT0CBQ9wcmV2SW5kZXhIZWlnaHQAAAkAZwIFD3ByZXZJbmRleEhlaWdodAUMdW5sb2NrSGVpZ2h0BwkBDnByaWNlSW5kZXhGQUlMBQUFaW5kZXgFCnByaWNlSW5kZXgFC2luZGV4SGVpZ2h0BQx1bmxvY2tIZWlnaHQFD3ByZXZJbmRleEhlaWdodAQNd2l0aGRyYXdUdXBsZQkBDGNhbGNXaXRoZHJhdwUFCHN3YXBUeXBlBQhpbkFtb3VudAUMcHJpY2VCeUluZGV4BQ9uZXV0cmlub01ldHJpY3MFB2luQXNzZXQEDG91dE5ldEFtb3VudAgFDXdpdGhkcmF3VHVwbGUCXzEECm91dEFzc2V0SWQIBQ13aXRoZHJhd1R1cGxlAl8yBApvdXRTdXJmQW10CAUNd2l0aGRyYXdUdXBsZQJfMwQKdW5sZWFzZUFtdAgFDXdpdGhkcmF3VHVwbGUCXzUEDG91dEZlZUFtb3VudAgFDXdpdGhkcmF3VHVwbGUCXzYEC291dEFtdEdyb3NzCAUNd2l0aGRyYXdUdXBsZQJfNwQNd2l0aGRyYXdQcmljZQgFDXdpdGhkcmF3VHVwbGUCXzgEDndpdGhkcmF3QmFza2V0CAUNd2l0aGRyYXdUdXBsZQJfOQMJAGcCAAAFC291dEFtdEdyb3NzCQACAQITYmFsYW5jZSBlcXVhbHMgemVybwQNc3VyZkNvbmRpdGlvbgMJAGYCBQpvdXRTdXJmQW10AAAEC2lzc3VlUmVzdWx0CQD8BwQFD2F1Y3Rpb25Db250cmFjdAIJaXNzdWVTdXJmCQDMCAIFCm91dFN1cmZBbXQJAMwIAgUHYWNjb3VudAUDbmlsBQNuaWwDCQAAAgULaXNzdWVSZXN1bHQFC2lzc3VlUmVzdWx0AAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAMJAAACBQ1zdXJmQ29uZGl0aW9uBQ1zdXJmQ29uZGl0aW9uBBF1bmxlYXNlSW52T3JFbXB0eQkA/AcEBQR0aGlzAhdpbnRlcm5hbFVubGVhc2VBbmRMZWFzZQkAzAgCBQp1bmxlYXNlQW10BQNuaWwFA25pbAMJAAACBRF1bmxlYXNlSW52T3JFbXB0eQURdW5sZWFzZUludk9yRW1wdHkECWduc2J0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUXZ25zYnRDb250cm9sbGVyQ29udHJhY3QCFGduc2J0SW5mb1NZU1JFQURPTkxZCQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAQNZ25zYnRBbXRUb3RhbAkBBWFzSW50AQkAkQMCBQlnbnNidERhdGEAAQQVZ25zYnRBbXRGcm9tU3VyZlRvdGFsCQEFYXNJbnQBCQCRAwIJAQlhc0FueUxpc3QBCQCRAwIFCWduc2J0RGF0YQADAAMEDWNvbW1vbkFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIJARR0b3RhbExvY2tlZEJ5VXNlcktFWQMFCHN3YXBUeXBlBQdhY2NvdW50BQdpbkFzc2V0CQBlAgURdG90YWxMb2NrZWRCeVVzZXIFCGluQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG90YWxMb2NrZWRLRVkCBQhzd2FwVHlwZQUHaW5Bc3NldAkAZQIFC3RvdGFsTG9ja2VkBQhpbkFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEHc3dhcEtFWQIFB2FjY291bnQFCHN3YXBUeElkCQEOZmluaXNoU3dhcERBVEELBQlkYXRhQXJyYXkFDXdpdGhkcmF3UHJpY2UFDG91dE5ldEFtb3VudAUMb3V0RmVlQW1vdW50BQx1bmxvY2tIZWlnaHQFBWluZGV4BQR0eElkBQpvdXRTdXJmQW10BQJCUgUOd2l0aGRyYXdCYXNrZXQFB2luQXNzZXQFA25pbAMJAAACBQhzd2FwVHlwZQIIb3V0TXVsdGkEBmJhc2tldAkAtQkCBQ53aXRoZHJhd0Jhc2tldAIBXwoBBmxvb3BlcgIDYWNjBGl0ZW0EAml0CQC1CQIFBGl0ZW0FB0xJU1RTRVAEC3RlbXBBc3NldElkCQDZBAEJAJEDAgUCaXQAAAQHYXNzZXRJZAMJAAACBQt0ZW1wQXNzZXRJZAUHV0FWRVNJRAUEdW5pdAULdGVtcEFzc2V0SWQECW5ldEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAml0AAIECWZlZUFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAml0AAMECHN1cmZBbXQxAwkBAiE9AgUNZ25zYnRBbXRUb3RhbAAACQBrAwUJZmVlQW1vdW50BRVnbnNidEFtdEZyb21TdXJmVG90YWwFDWduc2J0QW10VG90YWwAAAQIc3VyZkFtdDIDCQECIT0CBQ1nbnNidEFtdFRvdGFsAAAJAGsDBQlmZWVBbW91bnQJAGUCBQVNVUxUNgUCQlIFBU1VTFQ2AAAEB3N1cmZBbXQJAJYDAQkAzAgCBQhzdXJmQW10MQkAzAgCBQhzdXJmQW10MgUDbmlsBAduc2J0QW10CQBlAgUJZmVlQW1vdW50BQdzdXJmQW10CQCXCgUJAM0IAggFA2FjYwJfMQkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFCW5ldEFtb3VudAUHYXNzZXRJZAkAzQgCCAUDYWNjAl8yCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUHc3VyZkFtdAkAzQgCCAUDYWNjAl8zCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUHbnNidEFtdAkAZAIIBQNhY2MCXzQFB3N1cmZBbXQJAGQCCAUDYWNjAl81BQduc2J0QW10BAFyCgACJGwFBmJhc2tldAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJcKBQUDbmlsBQNuaWwFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmxvb3BlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLc3VyZkRlcG9zaXQDCQBmAggFAXICXzQAAAQHc3VyZkludgkA/AcEBRNzdXJmU3Rha2luZ0NvbnRyYWN0AgdkZXBvc2l0BQNuaWwIBQFyAl8yAwkAAAIFB3N1cmZJbnYFB3N1cmZJbnYAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFC3N1cmZEZXBvc2l0BQtzdXJmRGVwb3NpdAQLbnNidERlcG9zaXQDCQBmAggFAXICXzUAAAQHbnNidEludgkA/AcEBRNuc2J0U3Rha2luZ0NvbnRyYWN0AgdkZXBvc2l0BQNuaWwIBQFyAl8zAwkAAAIFB25zYnRJbnYFB25zYnRJbnYAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFC25zYnREZXBvc2l0BQtuc2J0RGVwb3NpdAkAzggCBQ1jb21tb25BY3Rpb25zCAUBcgJfMQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQDZmVlCQEPQXR0YWNoZWRQYXltZW50AgUKb3V0QXNzZXRJZAUMb3V0RmVlQW1vdW50BAtzdXJmRmVlQW10MQMJAQIhPQIFDWduc2J0QW10VG90YWwAAAkAawMIBQNmZWUGYW1vdW50BRVnbnNidEFtdEZyb21TdXJmVG90YWwFDWduc2J0QW10VG90YWwAAAQLc3VyZkZlZUFtdDIDCQECIT0CBQ1nbnNidEFtdFRvdGFsAAAJAGsDCAUDZmVlBmFtb3VudAkAZQIFBU1VTFQ2BQJCUgUFTVVMVDYAAAQKc3VyZkZlZUFtdAkAlgMBCQDMCAIFC3N1cmZGZWVBbXQxCQDMCAIFC3N1cmZGZWVBbXQyBQNuaWwECm5zYnRGZWVBbXQJAGUCCAUDZmVlBmFtb3VudAUKc3VyZkZlZUFtdAQLc3VyZkRlcG9zaXQDCQBmAgUKc3VyZkZlZUFtdAAABAdzdXJmSW52CQD8BwQFE3N1cmZTdGFraW5nQ29udHJhY3QCB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggFA2ZlZQdhc3NldElkBQpzdXJmRmVlQW10BQNuaWwDCQAAAgUHc3VyZkludgUHc3VyZkludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULc3VyZkRlcG9zaXQFC3N1cmZEZXBvc2l0BAtuc2J0RGVwb3NpdAMJAGYCBQpuc2J0RmVlQW10AAAEB25zYnRJbnYJAPwHBAUTbnNidFN0YWtpbmdDb250cmFjdAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUDZmVlB2Fzc2V0SWQFCm5zYnRGZWVBbXQFA25pbAMJAAACBQduc2J0SW52BQduc2J0SW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQtuc2J0RGVwb3NpdAULbnNidERlcG9zaXQJAM0IAgUNY29tbW9uQWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFDG91dE5ldEFtb3VudAUKb3V0QXNzZXRJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARdpbnRlcm5hbFVubGVhc2VBbmRMZWFzZQENdW5sZWFzZUFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLGludGVybmFsVW5sZWFzZUFuZExlYXNlIGlzIG5vdCBwdWJsaWMgbWV0aG9kCQEWcHJlcGFyZVVubGVhc2VBbmRMZWFzZQEFDXVubGVhc2VBbW91bnQBaQESdHJhbnNmZXJVc2RuVG9Vc2VyAgZhbW91bnQEYWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUPYXVjdGlvbkNvbnRyYWN0CQACAQIjT25seSBhdWN0aW9uIGNvbnRyYWN0IGlzIGF1dGhvcml6ZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgUGYW1vdW50BQ9uZXV0cmlub0Fzc2V0SWQFA25pbAFpAQthY2NlcHRXYXZlcwADAwkBAiE9AggFAWkGY2FsbGVyBQ9hdWN0aW9uQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgULZ292Q29udHJhY3QHCQACAQJDQ3VycmVudGx5IG9ubHkgYXVjdGlvbiBhbmQgZ292ZXJuYW5jZSBjb250cmFjdHMgYXJlIGFsbG93ZWQgdG8gY2FsbAkAlAoCCQEWcHJlcGFyZVVubGVhc2VBbmRMZWFzZQEAAAIHc3VjY2VzcwFpAQ9hcHByb3ZlTGVhc2luZ3MDBm5MaXN0Uwhncm91cE51bQRsQW10BAVuSWR4cwkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHBQNuaWwEB21uZ1B1YlMJAQt2YWx1ZU9yRWxzZQIJAKIIAQIcJXMlc19fY2ZnX19sZWFzaW5nTWFuYWdlclB1YgIsN0FVTVg1NHVrWU1ZdlBtbWE3eW9GZjVOalpoczRCdTVuejNFejlFVjhzdXIEBm1uZ1B1YgkA2QQBBQdtbmdQdWJTBA5ub2RlUmVnQWRkclN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBAh8lcyVzX19jZmdfX25vZGVzUmVnaXN0cnlBZGRyZXNzAiMzUDl2S3FRS2pVZG1wWEFmaVdhdThrclJFWUFZMVhyNjlwRQQLbm9kZVJlZ0FkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDm5vZGVSZWdBZGRyU3RyBBFsR3JvdXBOb2RlTGlzdEtFWQkBGGdldExlYXNlR3JvdXBOb2RlTGlzdEtleQEFCGdyb3VwTnVtBApsR3JOb2RlT3B0CQCdCAIFBHRoaXMFEWxHcm91cE5vZGVMaXN0S0VZAwkBCWlzRGVmaW5lZAEFCmxHck5vZGVPcHQJAAIBCQCsAgIJAKwCAgIGZ3JvdXAgCQCkAwEFCGdyb3VwTnVtAhQgYWxyZWFkeSBpbml0aWFsaXplZAQFbkxpc3QJALUJAgUGbkxpc3RTBQNTRVAECGV4cENvdW50CQCQAwEFBW5JZHhzAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQZtbmdQdWIJAAIBAh5hcHByb3ZlTGVhc2luZ3Mgbm90IGF1dGhvcml6ZWQEDSR0MDQzOTY0NDQwMjYJAQxyZWFkTm9kZUluZm8BAAAEBm5BZGRyMAgFDSR0MDQzOTY0NDQwMjYCXzEECGxBbXRLRVkwCAUNJHQwNDM5NjQ0NDAyNgJfMgQFbEFtdDAIBQ0kdDA0Mzk2NDQ0MDI2Al8zBAdsSWRLRVkwCAUNJHQwNDM5NjQ0NDAyNgJfNAQEbElkMAgFDSR0MDQzOTY0NDQwMjYCXzUEBW5ld0wwCQDECAIFBm5BZGRyMAkAZQIFBWxBbXQwCQBoAgUEbEFtdAUIZXhwQ291bnQECnZhbGlkYXRpb24JAPwHBAULbm9kZVJlZ0FkZHICGnZhbGlkYXRlQW5kQXBwcm92ZUxlYXNpbmdzCQDMCAIFBm5MaXN0UwUDbmlsBQNuaWwDCQAAAgUKdmFsaWRhdGlvbgUKdmFsaWRhdGlvbgoBI2ZvckVhY2hOb2RlVmFsaWRhdGVBbmRHZW5lcmF0ZUxlYXNlAgFhAWkEBG5vZGUJAJEDAgUFbkxpc3QFAWkEAmxhCQDECAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBG5vZGUFBGxBbXQJAM4IAgUBYQkAzAgCBQJsYQkAzAgCCQELQmluYXJ5RW50cnkCCQEWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQEFBG5vZGUJAQVsY2FsYwEFAmxhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaZ2V0TGVhc2VBbW91bnRCeUFkZHJlc3NLZXkBBQRub2RlBQRsQW10BQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBRFsR3JvdXBOb2RlTGlzdEtFWQUGbkxpc3RTCQDMCAIJAQtCaW5hcnlFbnRyeQIFB2xJZEtFWTAJAQVsY2FsYwEFBW5ld0wwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhsQW10S0VZMAgFBW5ld0wwBmFtb3VudAkAzAgCCQELTGVhc2VDYW5jZWwBBQRsSWQwCQDMCAIFBW5ld0wwBQNuaWwKAAIkbAUFbklkeHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBI2ZvckVhY2hOb2RlVmFsaWRhdGVBbmRHZW5lcmF0ZUxlYXNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFyZWJhbGFuY2VMZWFzaW5ncwIGYW1vdW50CGdyb3VwTnVtBAVuSWR4cwkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHBQNuaWwEB21uZ1B1YlMJAQt2YWx1ZU9yRWxzZQIJAKIIAQIcJXMlc19fY2ZnX19sZWFzaW5nTWFuYWdlclB1YgIsN0FVTVg1NHVrWU1ZdlBtbWE3eW9GZjVOalpoczRCdTVuejNFejlFVjhzdXIEBm1uZ1B1YgkA2QQBBQdtbmdQdWJTBBFsR3JvdXBOb2RlTGlzdEtFWQkBGGdldExlYXNlR3JvdXBOb2RlTGlzdEtleQEFCGdyb3VwTnVtBAZuTGlzdFMJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzBRFsR3JvdXBOb2RlTGlzdEtFWQQFbkxpc3QJALUJAgUGbkxpc3RTBQNTRVADCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBm1uZ1B1YgkAAgECIHJlYmFsYW5jZUxlYXNpbmdzIG5vdCBhdXRob3JpemVkBAp1bmxlYXNlQW10CQBkAgkAaQIFBmFtb3VudAkAkAMBBQVuTGlzdAABBA0kdDA0NTI2NjQ1MzI4CQEMcmVhZE5vZGVJbmZvAQAABAZuQWRkcjAIBQ0kdDA0NTI2NjQ1MzI4Al8xBAhsQW10S0VZMAgFDSR0MDQ1MjY2NDUzMjgCXzIEBWxBbXQwCAUNJHQwNDUyNjY0NTMyOAJfMwQHbElkS0VZMAgFDSR0MDQ1MjY2NDUzMjgCXzQEBGxJZDAIBQ0kdDA0NTI2NjQ1MzI4Al81BAVuZXdMMAkAxAgCBQZuQWRkcjAJAGQCBQVsQW10MAkAaAIFCnVubGVhc2VBbXQJAJADAQUFbkxpc3QKARRmb3JFYWNoTm9kZURvVW5sZWFzZQIBYQFpBARub2RlCQCRAwIFBW5MaXN0BQFpBAZsSWRLRVkJARZnZXRMZWFzZUlkQnlBZGRyZXNzS2V5AQUEbm9kZQQDbElkCQERQGV4dHJOYXRpdmUoMTA1MikCBQR0aGlzBQZsSWRLRVkEB2xBbXRLRVkJARpnZXRMZWFzZUFtb3VudEJ5QWRkcmVzc0tleQEFBG5vZGUEBGxBbXQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFB2xBbXRLRVkEA3VsYQkBC0xlYXNlQ2FuY2VsAQkBBXZhbHVlAQUDbElkBAJsYQkAxAgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQRub2RlCQBlAgUEbEFtdAUKdW5sZWFzZUFtdAkAzggCBQFhCQDMCAIJAQtMZWFzZUNhbmNlbAEJAQV2YWx1ZQEFA2xJZAkAzAgCBQJsYQkAzAgCCQELQmluYXJ5RW50cnkCBQZsSWRLRVkJAQVsY2FsYwEFAmxhCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdsQW10S0VZCAUCbGEGYW1vdW50BQNuaWwJAM4IAgoAAiRsBQVuSWR4cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEUZm9yRWFjaE5vZGVEb1VubGVhc2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDgJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAICQDMCAIJAQtCaW5hcnlFbnRyeQIFB2xJZEtFWTAJAQVsY2FsYwEFBW5ld0wwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhsQW10S0VZMAgFBW5ld0wwBmFtb3VudAkAzAgCCQELTGVhc2VDYW5jZWwBBQRsSWQwCQDMCAIFBW5ld0wwBQNuaWwBaQEbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZAg51c2VyQWRkcmVzc1N0cglnbnNidERpZmYECWduc2J0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUXZ25zYnRDb250cm9sbGVyQ29udHJhY3QCFGduc2J0SW5mb1NZU1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsBAhnbnNidEFtdAkAZAIJAQVhc0ludAEJAJEDAgUJZ25zYnREYXRhAAAFCWduc2J0RGlmZgQNZ25zYnRBbXRUb3RhbAkAZAIJAQVhc0ludAEJAJEDAgUJZ25zYnREYXRhAAEFCWduc2J0RGlmZgQNc3dhcExpbWl0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhVjYWxjU3dhcExpbWl0UkVBRE9OTFkJAMwIAgUIZ25zYnRBbXQFA25pbAUDbmlsBBd3YXZlc1N3YXBMaW1pdEluVXNkbk1heAkBBWFzSW50AQkAkQMCBQ1zd2FwTGltaXREYXRhAAAEEXdhdmVzU3dhcExpbWl0TWF4CQEFYXNJbnQBCQCRAwIFDXN3YXBMaW1pdERhdGEAAQQQdXNkblN3YXBMaW1pdE1heAkBBWFzSW50AQkAkQMCBQ1zd2FwTGltaXREYXRhAAIEDmxhc3RTd2FwSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARVrZXlVc2VyTGFzdFN3YXBIZWlnaHQBBQ51c2VyQWRkcmVzc1N0cgAABBdzd2FwTGltaXRUaW1lbGlmZUJsb2NrcwkBEnN3YXBzVGltZWZyYW1lUkVBRAAEGXBhc3NlZEJsb2Nrc0FmdGVyTGFzdFN3YXAJAGUCBQZoZWlnaHQFDmxhc3RTd2FwSGVpZ2h0BBFpc1N3YXBUaW1lbGlmZU5ldwkAZwIFGXBhc3NlZEJsb2Nrc0FmdGVyTGFzdFN3YXAFF3N3YXBMaW1pdFRpbWVsaWZlQmxvY2tzBBRzd2FwTGltaXRTcGVudEluVXNkbgMFEWlzU3dhcFRpbWVsaWZlTmV3AAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGGtleVN3YXBVc2VyU3BlbnRJblBlcmlvZAEFDnVzZXJBZGRyZXNzU3RyAAAEDmJsY2tzMkxtdFJlc2V0AwURaXNTd2FwVGltZWxpZmVOZXcAAAkAZQIFF3N3YXBMaW1pdFRpbWVsaWZlQmxvY2tzBRlwYXNzZWRCbG9ja3NBZnRlckxhc3RTd2FwCQCUCgIFA25pbAkAmQoHBRd3YXZlc1N3YXBMaW1pdEluVXNkbk1heAUUc3dhcExpbWl0U3BlbnRJblVzZG4FDmJsY2tzMkxtdFJlc2V0BQhnbnNidEFtdAUNZ25zYnRBbXRUb3RhbAURd2F2ZXNTd2FwTGltaXRNYXgFEHVzZG5Td2FwTGltaXRNYXgBaQEdY2FsY1dpdGhkcmF3UmVzdWx0U1lTUkVBRE9OTFkECHN3YXBUeXBlCGluQW1vdW50BXByaWNlB2luQXNzZXQED25ldXRyaW5vTWV0cmljcwkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwJAJQKAgUDbmlsCQEMY2FsY1dpdGhkcmF3BQUIc3dhcFR5cGUFCGluQW1vdW50BQVwcmljZQUPbmV1dHJpbm9NZXRyaWNzBQdpbkFzc2V0AWkBFHJlcGxhY2VDb21tdW5pdHlOb2RlBApvbGRBZGRyU3RyCm5ld0FkZHJTdHIIZ3JvdXBOdW0NcGVuYWx0eUFtb3VudAQHbW5nUHViUwkBC3ZhbHVlT3JFbHNlAgkAoggBAhwlcyVzX19jZmdfX2xlYXNpbmdNYW5hZ2VyUHViAiw3QVVNWDU0dWtZTVl2UG1tYTd5b0ZmNU5qWmhzNEJ1NW56M0V6OUVWOHN1cgQGbW5nUHViCQDZBAEFB21uZ1B1YlMDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBm1uZ1B1YgkAAgECI3JlcGxhY2VDb21tdW5pdHlOb2RlIG5vdCBhdXRob3JpemVkBAhncm91cEtleQkBGGdldExlYXNlR3JvdXBOb2RlTGlzdEtleQEFCGdyb3VwTnVtBA5ncm91cE5vZGVMaXN0UwkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMFCGdyb3VwS2V5AwkBASEBCQEIY29udGFpbnMCBQ5ncm91cE5vZGVMaXN0UwUKb2xkQWRkclN0cgkAAgEJAKwCAgkArAICCQCsAgICBkdyb3VwIAkApAMBBQhncm91cE51bQIaIGRvZXMgbm90IGNvbnRhaW4gYWRkcmVzcyAFCm9sZEFkZHJTdHIECWRvUmVwbGFjZQkA/AcEBRRub2RlUmVnaXN0cnlDb250cmFjdAITcmVwbGFjZUFwcHJvdmVkTm9kZQkAzAgCBQpvbGRBZGRyU3RyCQDMCAIFCm5ld0FkZHJTdHIJAMwIAgUIZ3JvdXBOdW0JAMwIAgUNcGVuYWx0eUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJZG9SZXBsYWNlBQlkb1JlcGxhY2UEDW9sZExlYXNlSWRLZXkJARZnZXRMZWFzZUlkQnlBZGRyZXNzS2V5AQUKb2xkQWRkclN0cgQOb2xkTGVhc2VBbXRLZXkJARpnZXRMZWFzZUFtb3VudEJ5QWRkcmVzc0tleQEFCm9sZEFkZHJTdHIECGxlYXNlQW10CQERQGV4dHJOYXRpdmUoMTA1NSkBBQ5vbGRMZWFzZUFtdEtleQQNbmV3TGVhc2VJZEtleQkBFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBBQpuZXdBZGRyU3RyBA5uZXdMZWFzZUFtdEtleQkBGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQUKbmV3QWRkclN0cgQIbmV3TGVhc2UJAMQIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUKbmV3QWRkclN0cgUIbGVhc2VBbXQEFXVwZGF0ZWRHcm91cE5vZGVMaXN0UwkAuQkCCQC1CQIFDmdyb3VwTm9kZUxpc3RTBQpvbGRBZGRyU3RyBQpuZXdBZGRyU3RyCQCUCgIJAMwIAgkBC0xlYXNlQ2FuY2VsAQkBEUBleHRyTmF0aXZlKDEwNTcpAQUNb2xkTGVhc2VJZEtleQkAzAgCCQELRGVsZXRlRW50cnkBBQ1vbGRMZWFzZUlkS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFDm9sZExlYXNlQW10S2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFCGdyb3VwS2V5BRV1cGRhdGVkR3JvdXBOb2RlTGlzdFMJAMwIAgUIbmV3TGVhc2UJAMwIAgkBC0JpbmFyeUVudHJ5AgUNbmV3TGVhc2VJZEtleQkBBWxjYWxjAQUIbmV3TGVhc2UJAMwIAgkBDEludGVnZXJFbnRyeQIFDm5ld0xlYXNlQW10S2V5BQhsZWFzZUFtdAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBH3VwZGF0ZVJlc2VydmVzQW5kTmV1dHJpbm9TdXBwbHkACgEWZ2V0TnVtYmVyQnlLZXlJbnRlcm5hbAEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQHbk1ldHJpeAkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwEA2lkeAkBFmdldE51bWJlckJ5S2V5SW50ZXJuYWwBAiJ1cGRhdGVSZXNlcnZlc0FuZE5ldXRyaW5vU3VwcGx5SWR4BAZuZXdJZHgJAGQCBQNpZHgAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgIidXBkYXRlUmVzZXJ2ZXNBbmROZXV0cmlub1N1cHBseUlkeAUGbmV3SWR4CQDMCAIJAQxJbnRlZ2VyRW50cnkCAgdyZXNlcnZlCQEFYXNJbnQBCQCRAwIFB25NZXRyaXgAAwkAzAgCCQEMSW50ZWdlckVudHJ5AgIObmV1dHJpbm9TdXBwbHkJAQVhc0ludAEJAJEDAgUHbk1ldHJpeAAFCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5yZXNlcnZlc0luVXNkbgkBFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CCQEFYXNJbnQBCQCRAwIFB25NZXRyaXgAAwkBBWFzSW50AQkAkQMCBQduTWV0cml4AAAJAMwIAgkBDEludGVnZXJFbnRyeQICB3N1cnBsdXMJAQVhc0ludAEJAJEDAgUHbk1ldHJpeAAGCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgdkZWZpY2l0CQEBLQEJAQVhc0ludAEJAJEDAgUHbk1ldHJpeAAGBQNuaWwBaQEWd2F2ZXNCYWxhbmNlc1ZzUGF5bWVudAAEAWIJAO8HAQUEdGhpcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIWd2F2ZXNCYWxhbmNlX2F2YWlsYWJsZQgFAWIJYXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhR3YXZlc0JhbGFuY2VfcmVndWxhcggFAWIHcmVndWxhcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIXd2F2ZXNCYWxhbmNlX2dlbmVyYXRpbmcIBQFiCmdlbmVyYXRpbmcJAMwIAgkBDEludGVnZXJFbnRyeQICFndhdmVzQmFsYW5jZV9lZmZlY3RpdmUIBQFiCWVmZmVjdGl2ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgINd2F2ZXNfcGF5bWVudAgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA25pbAECdHgBBnZlcmlmeQAEE3B1YktleUFkbWluc0xpc3RTdHIJALkJAgkAzAgCAixFeHRFRUsxOW5tS2o5bUNwbld5dkVFSkZZQVRMTWNWRU12b2hoVUhreUhObQkAzAgCAixFdjVweTVGZkJRWDljWnBZS25mUXJUQjQ5QnlmOFFtcFpXZURWUmltNHlWNwkAzAgCAixEVXV1TGpYdTk4bkJ3WmM3ZnF3Q1RqdEEzbm5Sd2dUYmtNU3I1U1UyTm1EUgkAzAgCAixEVXV1TGpYdTk4bkJ3WmM3ZnF3Q1RqdEEzbm5Sd2dUYmtNU3I1U1UyTm1EUgUDbmlsBQNTRVAEEHB1YktleUFkbWluc0xpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9jb250cm9sQ29udHJhY3QCDCVzX19tdWx0aXNpZwUTcHViS2V5QWRtaW5zTGlzdFN0cgUDU0VQBAVjb3VudAkAZAIJAGQCCQBkAgMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAAAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAQABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAACAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAMJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAMAAgAAAwMFCWlzQmxvY2tlZAkAAAIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFD2NvbnRyb2xDb250cmFjdAIRaXNfYmxvY2tlZF9jYWxsZXIJAKUIAQULZ292Q29udHJhY3QHCQEOdmFsaWRhdGVVcGRhdGUBBQJ0eAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIVU3BvbnNvckZlZVRyYW5zYWN0aW9uBAlzcG9uc29yVHgFByRtYXRjaDADCQEbY2hlY2tJc1ZhbGlkTWluU3BvbnNvcmVkRmVlAQUJc3BvbnNvclR4CQBnAgUFY291bnQAAwcJAGcCBQVjb3VudAADrrsf0g==", "height": 2447548, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: aAozP578c57yZmRydwC46Yeafx6XpbP3PrudmfWXcqG Next: 3whRXcyF5PnxrHpUWK9SbJFftEeYc3E3YKjbZELDyQL7 Diff:
OldNewDifferences
111111
112112 let I = 2
113113
114-let J = 1
114+let J = 3
115115
116-let K = 2
116+let K = 4
117117
118-let L = 3
118+let L = 5
119119
120-let M = 4
120+let M = 6
121121
122-let N = 5
122+let N = 7
123123
124-let O = 6
124+let O = 8
125125
126-let P = 7
126+let P = 9
127127
128-let Q = 8
128+let Q = 10
129129
130-let R = 9
130+let R = 11
131131
132-let S = 10
132+let S = 12
133133
134-let T = 11
134+let T = 13
135135
136-let U = 12
136+let U = 14
137137
138-let V = 13
138+let V = 15
139139
140-func W () = "%s%s__config__controlAddress"
140+let W = 16
141+
142+let X = 1
143+
144+let Y = 2
145+
146+let Z = 3
147+
148+let aa = 4
149+
150+let ab = 5
151+
152+let ac = 6
153+
154+let ad = 7
155+
156+let ae = 8
157+
158+let af = 9
159+
160+let ag = 10
161+
162+let ah = 11
163+
164+let ai = 12
165+
166+let aj = 13
167+
168+func ak () = "%s%s__config__controlAddress"
141169
142170
143-func X () = "%s__controlConfig"
171+func al () = "%s__controlConfig"
144172
145173
146-func Y (Z) = split_4C(a(Z, X()), z)
174+func am (an) = split_4C(a(an, al()), z)
147175
148176
149-func aa (ab,ac) = valueOrErrorMessage(addressFromString(ab[ac]), ("Control cfg doesn't contain address at index " + toString(ac)))
177+func ao (ap,aq) = valueOrErrorMessage(addressFromString(ap[aq]), ("Control cfg doesn't contain address at index " + toString(aq)))
150178
151179
152-let ad = addressFromStringValue(valueOrElse(getString(this, W()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
180+let ar = addressFromStringValue(valueOrElse(getString(this, ak()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
153181
154-let ab = Y(ad)
182+let ap = am(ar)
155183
156-let ae = aa(ab, M)
184+let as = ao(ap, aa)
157185
158-let af = aa(ab, Q)
186+let at = ao(ap, ae)
159187
160-let ag = aa(ab, S)
188+let au = ao(ap, ag)
161189
162-let ah = aa(ab, T)
190+let av = ao(ap, ah)
163191
164-let ai = aa(ab, K)
192+let aw = ao(ap, Y)
165193
166-let aj = aa(ab, P)
194+let ax = ao(ap, ad)
167195
168-let ak = aa(ab, V)
196+let ay = ao(ap, aj)
169197
170-let al = "neutrino_asset_id"
198+let az = "neutrino_asset_id"
171199
172-let am = "bond_asset_id"
200+let aA = "bond_asset_id"
173201
174-let an = "auction_contract"
202+let aB = "auction_contract"
175203
176-let ao = "nsbtStakingContract"
204+let aC = "nsbtStakingContract"
177205
178-let ap = "liquidation_contract"
206+let aD = "liquidation_contract"
179207
180-let aq = "rpd_contract"
208+let aE = "rpd_contract"
181209
182-let ar = "control_contract"
210+let aF = "control_contract"
183211
184-let as = "math_contract"
212+let aG = "math_contract"
185213
186-let at = "balance_waves_lock_interval"
214+let aH = "balance_waves_lock_interval"
187215
188-let au = "balance_neutrino_lock_interval"
216+let aI = "balance_neutrino_lock_interval"
189217
190-func av (aw) = ("min_outNeutrino_swap_amount_" + aw)
218+func aJ (aK) = ("min_outNeutrino_swap_amount_" + aK)
191219
192220
193-let ax = "min_outMulti_swap_amount"
221+let aL = "min_outMulti_swap_amount"
194222
195-let ay = "node_oracle_provider"
223+let aM = "node_oracle_provider"
196224
197-let az = "neutrinoOut_swap_feePart"
225+let aN = "neutrinoOut_swap_feePart"
198226
199-let aA = "wavesOut_swap_feePart"
227+let aO = "wavesOut_swap_feePart"
200228
201-func aB (b) = ("%s__" + b)
229+func aP (b) = ("%s__" + b)
202230
203231
204-let aC = "price"
232+let aQ = "price"
205233
206-let aD = "price_index"
234+let aR = "price_index"
207235
208-let aE = "is_blocked"
236+let aS = "is_blocked"
209237
210-func aF (aG) = ((aC + "_") + toString(aG))
238+func aT (aU) = ((aQ + "_") + toString(aU))
211239
212240
213-func aH (aI) = ((aD + "_") + toString(aI))
241+func aV (aW) = ((aR + "_") + toString(aW))
214242
215243
216-func aJ (ac) = g(makeString(["%s%d%s", "lease", toString(ac), "nodeAddress"], z))
244+func aX (aq) = g(makeString(["%s%d%s", "lease", toString(aq), "nodeAddress"], z))
217245
218246
219-func aK (ac) = addressFromStringValue(aJ(ac))
247+func aY (aq) = addressFromStringValue(aX(aq))
220248
221249
222-func aL () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * B))
250+func aZ () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * B))
223251
224252
225-func aM (aN) = ("balance_unlock_block_" + aN)
253+func ba (bb) = ("balance_unlock_block_" + bb)
226254
227255
228-func aO (aP) = makeString(["%s%d%s", "lease", toString(aP), "id"], z)
256+func bc (bd) = makeString(["%s%d%s", "lease", toString(bd), "id"], z)
229257
230258
231-func aQ (aR) = makeString(["%s%s%s", "leaseByAddress", aR, "id"], z)
259+func be (bf) = makeString(["%s%s%s", "leaseByAddress", bf, "id"], z)
232260
233261
234-func aS (aP) = makeString(["%s%d%s", "lease", toString(aP), "amount"], z)
262+func bg (bd) = makeString(["%s%d%s", "lease", toString(bd), "amount"], z)
235263
236264
237-func aT (aR) = makeString(["%s%s%s", "leaseByAddress", aR, "amount"], z)
265+func bh (bf) = makeString(["%s%s%s", "leaseByAddress", bf, "amount"], z)
238266
239267
240-func aU (aV) = makeString(["%s%d%s", "leaseGroup", toString(aV), "nodeList"], z)
268+func bi (bj) = makeString(["%s%d%s", "leaseGroup", toString(bj), "nodeList"], z)
241269
242270
243-func aW (aX) = (("min_" + aX) + "_swap_amount")
271+func bk (bl) = (("min_" + bl) + "_swap_amount")
244272
245273
246-func aY (aX,aw) = makeString(["%s%s%s", "balanceLock", aX, aw], z)
274+func bm (bl,aK) = makeString(["%s%s%s", "balanceLock", bl, aK], z)
247275
248276
249-func aZ (aX,aN,aw) = makeString(["%s%s%s%s", "balanceLock", aX, aN, aw], "_")
277+func bn (bl,bb,aK) = makeString(["%s%s%s%s", "balanceLock", bl, bb, aK], "_")
250278
251279
252-func ba (aX) = if ((aX == "outMulti"))
253- then au
254- else at
280+func bo (bl) = if ((bl == "outMulti"))
281+ then aI
282+ else aH
255283
256284
257-func bb () = "balance_node_lock_interval"
285+func bp () = "balance_node_lock_interval"
258286
259287
260-func bc () = "swaps_timeframe"
288+func bq () = "swaps_timeframe"
261289
262290
263-func bd () = "min_BR_protection_level"
291+func br () = "min_BR_protection_level"
264292
265293
266-func be () = "%s%s__common__basketAssets"
294+func bs () = "%s%s__common__basketAssets"
267295
268296
269-func bf () = "%s%s__common__basketD"
297+func bt () = "%s%s__common__basketD"
270298
271299
272-func bg () = "%s%s__common__basketK"
300+func bu () = "%s%s__common__basketK"
273301
274302
275-func bh () = "%s%s__common__basketB"
303+func bv () = "%s%s__common__basketB"
276304
277305
278-func bi () = "%s%s__common__basketLogbDelta"
306+func bw () = "%s%s__common__basketLogbDelta"
279307
280308
281-func bj (aw) = ("%s%s%s__common__weightByAsset__" + aw)
309+func bx (aK) = ("%s%s%s__common__weightByAsset__" + aK)
282310
283311
284-func bk (aX,aw) = valueOrElse(if ((aX == "outMulti"))
285- then getInteger(ax)
286- else getInteger(av(aw)), 0)
312+func by (bl,aK) = valueOrElse(if ((bl == "outMulti"))
313+ then getInteger(aL)
314+ else getInteger(aJ(aK)), 0)
287315
288316
289-func bl () = valueOrElse(getInteger(this, bc()), 1440)
317+func bz () = valueOrElse(getInteger(this, bq()), 1440)
290318
291319
292-func bm (aX,aw) = valueOrElse(getInteger(this, aY(aX, aw)), 0)
320+func bA (bl,aK) = valueOrElse(getInteger(this, bm(bl, aK)), 0)
293321
294322
295-func bn (aX,aN,aw) = valueOrElse(getInteger(this, aZ(aX, aN, aw)), 0)
323+func bB (bl,bb,aK) = valueOrElse(getInteger(this, bn(bl, bb, aK)), 0)
296324
297325
298-func bo (aX) = valueOrElse(getInteger(this, ba(aX)), 1440)
326+func bC (bl) = valueOrElse(getInteger(this, bo(bl)), 1440)
299327
300328
301-func bp () = valueOrElse(getInteger(this, bb()), 1)
329+func bD () = valueOrElse(getInteger(this, bp()), 1)
302330
303331
304-func bq (br) = makeString(["%s%s", "swapUserSpentInPeriod", br], z)
332+func bE (bF) = makeString(["%s%s", "swapUserSpentInPeriod", bF], z)
305333
306334
307-func bs (br) = makeString(["%s%s", "userLastSwapHeight", br], z)
335+func bG (bF) = makeString(["%s%s", "userLastSwapHeight", bF], z)
308336
309337
310-func bt (bu,bv) = fraction(bu, B, bv)
338+func bH (bI,bJ) = fraction(bI, B, bJ)
311339
312340
313-func bw (bu,bv) = fraction(bu, bv, B)
341+func bK (bI,bJ) = fraction(bI, bJ, B)
314342
315343
316-func bx (bu,bv) = bw(bu, bv)
344+func bL (bI,bJ) = bK(bI, bJ)
317345
318346
319-func by (bz) = split(bz, ",")
347+func bM (bN) = split(bN, ",")
320348
321349
322-func bA (bB,bC,bD,bE) = {
323- let bF = split(bD, "_")
324- func bG (bH,bI) = {
325- let bJ = split(bI, A)
326- if ((bJ[0] == bC))
327- then bJ
328- else bH
350+func bO (bP,bQ,bR,bS) = {
351+ let bT = split(bR, "_")
352+ func bU (bV,bW) = {
353+ let bX = split(bW, A)
354+ if ((bX[0] == bQ))
355+ then bX
356+ else bV
329357 }
330358
331- let bK = {
332- let bL = bF
333- let bM = size(bL)
334- let bN = nil
335- func bO (bP,bQ) = if ((bQ >= bM))
336- then bP
337- else bG(bP, bL[bQ])
359+ let bY = {
360+ let bZ = bT
361+ let ca = size(bZ)
362+ let cb = nil
363+ func cc (cd,ce) = if ((ce >= ca))
364+ then cd
365+ else bU(cd, bZ[ce])
338366
339- func bR (bP,bQ) = if ((bQ >= bM))
340- then bP
367+ func cf (cd,ce) = if ((ce >= ca))
368+ then cd
341369 else throw("List size exceeds 10")
342370
343- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
371+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
344372 }
345- let bS = valueOrElse(getInteger(bi()), -18820642)
346- let bT = valueOrElse(getInteger(bf()), 50000)
347- let bU = valueOrElse(getInteger(bh()), 1250000)
348- let bV = valueOrElse(getInteger(bj(bC)), 166666)
349- let bW = ((bS - bV) + parseIntValue(bK[1]))
350- let bX = pow(bU, 6, bW, 6, 6, HALFUP)
351- let bY = fraction(bB, parseIntValue(bK[2]), if ((bE == 0))
373+ let cg = valueOrElse(getInteger(bw()), -18820642)
374+ let ch = valueOrElse(getInteger(bt()), 50000)
375+ let ci = valueOrElse(getInteger(bv()), 1250000)
376+ let cj = valueOrElse(getInteger(bx(bQ)), 166666)
377+ let ck = ((cg - cj) + parseIntValue(bY[1]))
378+ let cl = pow(ci, 6, ck, 6, 6, HALFUP)
379+ let cm = fraction(bP, parseIntValue(bY[2]), if ((bS == 0))
352380 then B
353- else (bE * 100))
354- let bZ = ((C + bT) - bX)
355- if ((0 >= bZ))
356- then throw(("Net amount is non-positive, multiplier = " + toString(bZ)))
357- else {
358- let ca = fraction(bY, bZ, C)
359- let cb = if ((ca >= bY))
360- then 0
361- else (bY - ca)
362-[bY, ca, cb]
363- }
381+ else (bS * 100))
382+ let cn = ((C + ch) - cl)
383+ let co = fraction(cm, cn, C)
384+ let cp = if ((co >= cm))
385+ then 0
386+ else (cm - co)
387+[cm, co, cp]
364388 }
365389
366390
367-func cc (bu,bD,cd) = {
368- let bF = split(bD, "_")
369- func ce (bH,bI) = {
370- let cf = split(bI, A)
371- let aw = cf[0]
372- let cg = parseIntValue(cf[1])
373- let bv = parseIntValue(cf[2])
374- let ch = parseIntValue(cf[3])
375- if ((cd == 0))
391+func cq (bI,bR,cr) = {
392+ let bT = split(bR, "_")
393+ func cs (bV,bW) = {
394+ let ct = split(bW, A)
395+ let aK = ct[0]
396+ let cu = parseIntValue(ct[1])
397+ let bJ = parseIntValue(ct[2])
398+ let cv = parseIntValue(ct[3])
399+ if ((cr == 0))
376400 then throw("Attempt to burn neutrino at zero supply")
377401 else {
378- let ci = fraction(bu, ch, cd)
379- let cj = if ((aw == "WAVES"))
380- then $Tuple2(ci, bv)
381- else $Tuple2(bH._2, bH._3)
382- $Tuple3((bH._1 :+ $Tuple4(aw, ci, bv, cg)), cj._1, cj._2)
402+ let cw = fraction(bI, cv, cr)
403+ let cx = if ((aK == "WAVES"))
404+ then $Tuple2(cw, bJ)
405+ else $Tuple2(bV._2, bV._3)
406+ $Tuple3((bV._1 :+ $Tuple4(aK, cw, bJ, cu)), cx._1, cx._2)
383407 }
384408 }
385409
386- let bL = bF
387- let bM = size(bL)
388- let bN = $Tuple3(nil, 0, 0)
389- func bO (bP,bQ) = if ((bQ >= bM))
390- then bP
391- else ce(bP, bL[bQ])
410+ let bZ = bT
411+ let ca = size(bZ)
412+ let cb = $Tuple3(nil, 0, 0)
413+ func cc (cd,ce) = if ((ce >= ca))
414+ then cd
415+ else cs(cd, bZ[ce])
392416
393- func bR (bP,bQ) = if ((bQ >= bM))
394- then bP
417+ func cf (cd,ce) = if ((ce >= ca))
418+ then cd
395419 else throw("List size exceeds 10")
396420
397- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
421+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
398422 }
399423
400424
401-func ck (aX,cl) = throw(((("The specified amount in " + aX) + " swap is less than the required minimum of ") + toString(cl)))
425+func cy (bl,cz) = throw(((("The specified amount in " + bl) + " swap is less than the required minimum of ") + toString(cz)))
402426
403427
404-func cm () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
428+func cA () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
405429
406430
407-func cn (aI,co,cp,cq,cr) = throw(((((((((("invalid price history index: index=" + toString(aI)) + " priceIndex=") + toString(co)) + " indexHeight=") + toString(cp)) + " unlockHeight=") + toString(cq)) + " prevIndexHeight=") + toString(cr)))
431+func cB (aW,cC,cD,cE,cF) = throw(((((((((("invalid price history index: index=" + toString(aW)) + " priceIndex=") + toString(cC)) + " indexHeight=") + toString(cD)) + " unlockHeight=") + toString(cE)) + " prevIndexHeight=") + toString(cF)))
408432
409433
410-let cs = fromBase58String(g(al))
434+let cG = fromBase58String(g(az))
411435
412-let co = i(ad, aD)
436+let cC = i(ar, aR)
413437
414-let ct = k(ad, aE)
438+let cH = k(ar, aS)
415439
416-let cu = fromBase58String(g(ay))
440+let cI = fromBase58String(g(aM))
417441
418-let cv = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
442+let cJ = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
419443
420-let cw = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
444+let cK = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
421445
422-let cx = this
446+let cL = this
423447
424-let cy = i(ad, aC)
448+let cM = i(ar, aQ)
425449
426-func cz (cA) = {
427- let cB = 100000
428- let cC = 1000
429- let cD = bw(cB, cy)
430- let cE = (cD * 2)
431- let cF = fraction(cD, cC, 100)
432- let cG = value(cA.minSponsoredAssetFee)
433- if (if ((cG >= cE))
434- then (cF >= cG)
450+func cN (cO) = {
451+ let cP = 100000
452+ let cQ = 1000
453+ let cR = bK(cP, cM)
454+ let cS = (cR * 2)
455+ let cT = fraction(cR, cQ, 100)
456+ let cU = value(cO.minSponsoredAssetFee)
457+ if (if ((cU >= cS))
458+ then (cT >= cU)
435459 else false)
436- then (cA.assetId == cs)
460+ then (cO.assetId == cG)
437461 else false
438462 }
439463
440464
441-func cH (aG) = i(ad, aF(aG))
465+func cV (aU) = i(ar, aT(aU))
442466
443467
444-func cI (aI) = i(ad, aH(aI))
468+func cW (aW) = i(ar, aV(aW))
445469
446470
447-func cJ (br) = makeString(["%s%s%s", "paramByUser", br, "amount"], z)
471+func cX (bF) = makeString(["%s%s%s", "paramByUser", bF, "amount"], z)
448472
449473
450-let cK = 1
474+let cY = 1
451475
452-let cL = 2
476+let cZ = 2
453477
454-let cM = 3
478+let da = 3
455479
456-let cN = 7
480+let db = 7
457481
458-let cO = 8
482+let dc = 8
459483
460-let cP = 11
484+let dd = 11
461485
462-let cQ = 15
486+let de = 15
463487
464-let cR = 16
488+let df = 16
465489
466-let cS = 20
490+let dg = 20
467491
468-func cT (br,cU) = makeString(["%s%s", br, cU], z)
492+func dh (bF,di) = makeString(["%s%s", bF, di], z)
469493
470494
471-func cV (aX,cW,bB,bv,cX,cY,cZ,da,db,dc,dd,de,aI,df,dg,dh,di,dj,dk,bC) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s", aX, cW, bB, bv, cX, cY, cZ, da, db, dc, dd, de, aI, df, dg, dh, di, dj, dk, bC], z)
495+func dj (bl,dk,bP,bJ,dl,dm,dn,do,dp,dq,dr,ds,aW,dt,du,dv,dw,dx,dy,bQ) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s", bl, dk, bP, bJ, dl, dm, dn, do, dp, dq, dr, ds, aW, dt, du, dv, dw, dx, dy, bQ], z)
472496
473497
474-func dl (aX,dm,dd,bC) = cV(aX, "PENDING", toString(dm), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dd), "0", "0", "NULL", "0", "0", "0", "0", "", bC)
498+func dz (bl,dA,dr,bQ) = dj(bl, "PENDING", toString(dA), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dr), "0", "0", "NULL", "0", "0", "0", "0", "", bQ)
475499
476500
477-func dn (do,bv,cX,cY,de,aI,df,di,dj,dk,bC) = cV(do[cK], "FINISHED", do[cM], toString(bv), toString(cX), toString(cY), do[cN], do[cO], toString(height), toString(lastBlock.timestamp), do[cP], toString(de), toString(aI), df, do[cQ], do[cR], toString(di), toString(dj), dk, bC)
501+func dB (dC,bJ,dl,dm,ds,aW,dt,dw,dx,dy,bQ) = dj(dC[cY], "FINISHED", dC[da], toString(bJ), toString(dl), toString(dm), dC[db], dC[dc], toString(height), toString(lastBlock.timestamp), dC[dd], toString(ds), toString(aW), dt, dC[de], dC[df], toString(dw), toString(dx), dy, bQ)
478502
479503
480-func dp (br,dq) = {
481- let dr = cT(br, dq)
482- split_4C(valueOrErrorMessage(getString(dr), ("no swap data for " + dr)), z)
504+func dD (bF,dE) = {
505+ let dF = dh(bF, dE)
506+ split_4C(valueOrErrorMessage(getString(dF), ("no swap data for " + dF)), z)
483507 }
484508
485509
486-func ds (dt,du,dv) = {
487- let cb = fraction(dt, dv, C)
488-[(dt - cb), cb]
510+func dG (dH,dI,dJ) = {
511+ let cp = fraction(dH, dJ, C)
512+[(dH - cp), cp]
489513 }
490514
491515
492-func dw (dx) = {
493- let dy = valueOrElse(getInteger(bg()), C)
494- let bT = valueOrElse(getInteger(bf()), 50000)
495- let dv = fraction(dy, bT, C)
496- func dz (bH,bI) = {
497- let cb = fraction(bI._2, dv, C)
498- (bH :+ makeString([bI._1, toString(bI._3), toString((bI._2 - cb)), toString(cb), toString(bI._4)], A))
516+func dK (dL) = {
517+ let dM = valueOrElse(getInteger(bu()), C)
518+ let ch = valueOrElse(getInteger(bt()), 50000)
519+ let dJ = fraction(dM, ch, C)
520+ func dN (bV,bW) = {
521+ let cp = fraction(bW._2, dJ, C)
522+ (bV :+ makeString([bW._1, toString(bW._3), toString((bW._2 - cp)), toString(cp), toString(bW._4)], A))
499523 }
500524
501- let dA = {
502- let bL = dx
503- let bM = size(bL)
504- let bN = nil
505- func bO (bP,bQ) = if ((bQ >= bM))
506- then bP
507- else dz(bP, bL[bQ])
525+ let dO = {
526+ let bZ = dL
527+ let ca = size(bZ)
528+ let cb = nil
529+ func cc (cd,ce) = if ((ce >= ca))
530+ then cd
531+ else dN(cd, bZ[ce])
508532
509- func bR (bP,bQ) = if ((bQ >= bM))
510- then bP
533+ func cf (cd,ce) = if ((ce >= ca))
534+ then cd
511535 else throw("List size exceeds 10")
512536
513- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
537+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
514538 }
515- makeString(dA, z)
539+ makeString(dO, z)
516540 }
517541
518542
519-func dB (dC) = if ((0 > dC))
520- then -(dC)
521- else dC
543+func dP (dQ) = if ((0 > dQ))
544+ then -(dQ)
545+ else dQ
522546
523547
524-func dD (dE) = {
525- let dF = ((wavesBalance(cx).available - dE) - aL())
526- let dG = f(aS(0))
527- let dH = f(aS(1))
528- let dI = (dF + dG)
529- let dJ = (dF + dH)
530- if (if ((dI > 0))
548+func dR (dS) = {
549+ let dT = ((wavesBalance(cL).available - dS) - aZ())
550+ let dU = f(bg(0))
551+ let dV = f(bg(1))
552+ let dW = (dT + dU)
553+ let dX = (dT + dV)
554+ if (if ((dW > 0))
531555 then true
532- else (dJ > 0))
556+ else (dX > 0))
533557 then {
534- let dK = dB((dI - dH))
535- let dL = dB((dJ - dG))
536- if ((dL >= dK))
537- then $Tuple2(0, dI)
538- else $Tuple2(1, dJ)
558+ let dY = dP((dW - dV))
559+ let dZ = dP((dX - dU))
560+ if ((dZ >= dY))
561+ then $Tuple2(0, dW)
562+ else $Tuple2(1, dX)
539563 }
540564 else $Tuple2(-1, 0)
541565 }
542566
543567
544-func dM (r) = if ((r.caller != this))
568+func ea (r) = if ((r.caller != this))
545569 then throw("Permission denied: this contract only allowed")
546570 else true
547571
548572
549-func dN (dE) = {
550- let dO = dD(dE)
551- let aP = dO._1
552- let dP = dO._2
553- if ((dP > 0))
573+func eb (dS) = {
574+ let ec = dR(dS)
575+ let bd = ec._1
576+ let ed = ec._2
577+ if ((ed > 0))
554578 then {
555- let dQ = aO(aP)
556- let dR = getBinary(this, dQ)
557- let dS = if (isDefined(dR))
558- then [LeaseCancel(value(dR))]
579+ let ee = bc(bd)
580+ let ef = getBinary(this, ee)
581+ let eg = if (isDefined(ef))
582+ then [LeaseCancel(value(ef))]
559583 else nil
560- let dT = aS(aP)
561- let dU = Lease(aK(aP), dP)
562- (dS ++ [dU, BinaryEntry(dQ, d(dU)), IntegerEntry(aS(aP), dP)])
584+ let eh = bg(bd)
585+ let ei = Lease(aY(bd), ed)
586+ (eg ++ [ei, BinaryEntry(ee, d(ei)), IntegerEntry(bg(bd), ed)])
563587 }
564588 else nil
565589 }
566590
567591
568-func dV (dW) = {
569- let aR = aK(dW)
570- let dX = aS(dW)
571- let dY = f(dX)
572- let dZ = aO(dW)
573- let ea = value(getBinary(this, dZ))
574- $Tuple5(aR, dX, dY, dZ, ea)
592+func ej (ek) = {
593+ let bf = aY(ek)
594+ let el = bg(ek)
595+ let em = f(el)
596+ let en = bc(ek)
597+ let eo = value(getBinary(this, en))
598+ $Tuple5(bf, el, em, en, eo)
575599 }
576600
577601
578-func eb (aX,ec,bC,ed,ee) = {
579- let ef = x(invoke(this, "swapParamsByUserSYSREADONLY", [ed, 0], nil))
580- let eg = ef._2
581- let eh = ef._3
582- let ei = ef._6
583- let ej = ef._7
584- let cl = bk(aX, bC)
585- let ek = bm(aX, bC)
586- let el = bn(aX, ed, bC)
587- let aR = aJ(0)
588- let em = cH(cI(co))
589- let en = (aR == ed)
590- let eo = if (en)
591- then bp()
592- else bo(aX)
593- let dd = (height + eo)
594- let ep = if ((aX == "outNeutrino"))
595- then bw(ec, em)
596- else ec
597- let eq = if ((aX == "outNeutrino"))
598- then bw(ei, em)
599- else ej
600- if ((cl > ec))
601- then ck(aX, cl)
602- else if (if (!(en))
603- then (eg > 0)
602+func ep (bl,eq,bQ,er,es) = {
603+ let et = x(invoke(this, "swapParamsByUserSYSREADONLY", [er, 0], nil))
604+ let eu = et._2
605+ let ev = et._3
606+ let ew = et._6
607+ let ex = et._7
608+ let cz = by(bl, bQ)
609+ let ey = bA(bl, bQ)
610+ let ez = bB(bl, er, bQ)
611+ let bf = aX(0)
612+ let eA = cV(cW(cC))
613+ let eB = (bf == er)
614+ let eC = if (eB)
615+ then bD()
616+ else bC(bl)
617+ let dr = (height + eC)
618+ let eD = if ((bl == "outNeutrino"))
619+ then bK(eq, eA)
620+ else eq
621+ let eE = if ((bl == "outNeutrino"))
622+ then bK(ew, eA)
623+ else ex
624+ if ((cz > eq))
625+ then cy(bl, cz)
626+ else if (if (!(eB))
627+ then (eu > 0)
604628 else false)
605- then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + eh))))
606- else if (if (!(en))
607- then (ep > eq)
629+ then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + ev))))
630+ else if (if (!(eB))
631+ then (eD > eE)
608632 else false)
609- then throw(((("You have exceeded your swap limit! Requested: " + toString(ep)) + ", available: ") + toString(eq)))
610- else if (ct)
611- then cm()
633+ then throw(((("You have exceeded your swap limit! Requested: " + toString(eD)) + ", available: ") + toString(eE)))
634+ else if (cH)
635+ then cA()
612636 else {
613- let er = if (if ((aX == "outNeutrino"))
614- then (bC == "WAVES")
637+ let eF = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
638+ let bT = o(eF[U])
639+ let eG = q(eF[V])
640+ let eH = bO(eq, bQ, bT, eG)
641+ if (if ((bl == "outNeutrino"))
642+ then (0 >= eH[1])
615643 else false)
616- then dN(0)
617- else nil
618- $Tuple2(([IntegerEntry(bq(ed), ep), IntegerEntry(bs(ed), height), IntegerEntry(aZ(aX, ed, bC), (el + ec)), IntegerEntry(aM(ed), dd), IntegerEntry(aY(aX, bC), (ek + ec)), StringEntry(cT(ed, ee), dl(aX, ec, dd, bC))] ++ er), unit)
644+ then throw((((((("Net amount is non-positive, cannot swap. (gross, net, fee) = (" + toString(eH[0])) + ", ") + toString(eH[1])) + ", ") + toString(eH[2])) + ")"))
645+ else {
646+ let eI = if (if ((bl == "outNeutrino"))
647+ then (bQ == "WAVES")
648+ else false)
649+ then eb(0)
650+ else nil
651+ $Tuple2(([IntegerEntry(bE(er), eD), IntegerEntry(bG(er), height), IntegerEntry(bn(bl, er, bQ), (ez + eq)), IntegerEntry(ba(er), dr), IntegerEntry(bm(bl, bQ), (ey + eq)), StringEntry(dh(er, es), dz(bl, eq, dr, bQ))] ++ eI), unit)
652+ }
619653 }
620654 }
621655
622-
623-let es = 0
624-
625-let et = 1
626-
627-let eu = 2
628-
629-let ev = 3
630-
631-let ew = 4
632-
633-let ex = 5
634-
635-let ey = 6
636-
637-let ez = 7
638-
639-let eA = 8
640-
641-let eB = 9
642-
643-let eC = 10
644-
645-let eD = 11
646-
647-let eE = 12
648-
649-let eF = 13
650-
651-let eG = 14
652-
653-let eH = 15
654-
655-let eI = 16
656656
657657 let eJ = 0
658658
676676
677677 let eT = 10
678678
679-func eU (bB,bC,bF,eV) = {
680- let eW = bA(bB, bC, bF, eV)
681- $Tuple12(eW[0], cs, 0, bC, 0, eV, bB, 0, 0, 0, nil, [eW[1], eW[2]])
679+func eU (bP,bQ,bT,eG) = {
680+ let eV = bO(bP, bQ, bT, eG)
681+ $Tuple12(eV[0], cG, 0, bQ, 0, eG, bP, 0, 0, 0, nil, [eV[1], eV[2]])
682682 }
683683
684684
685-func eX (eY,bF,dj,eZ,cd) = {
686- let fa = valueOrElse(getInteger(this, bd()), E)
687- let fb = if ((fa >= dj))
685+func eW (eX,bT,dx,eY,cr) = {
686+ let eZ = valueOrElse(getInteger(this, br()), E)
687+ let fa = if ((eZ >= dx))
688688 then 0
689- else fraction((eZ - fraction(fa, cd, C)), C, (C - fa))
690- let fc = if ((eY > fb))
691- then fb
692- else eY
693- let fd = if ((eY > fb))
694- then fraction((eY - fb), dj, C)
689+ else fraction((eY - fraction(eZ, cr, C)), C, (C - eZ))
690+ let fb = if ((eX > fa))
691+ then fa
692+ else eX
693+ let fc = if ((eX > fa))
694+ then fraction((eX - fa), dx, C)
695695 else 0
696- let fe = (fc + fd)
697- let ff = (eY - fe)
698- let fg = cc(fe, bF, cd)
699- $Tuple12(fg._2, unit, ff, cs, fg._2, fg._3, fe, fb, fc, fd, fg._1, nil)
696+ let fd = (fb + fc)
697+ let fe = (eX - fd)
698+ let ff = cq(fd, bT, cr)
699+ $Tuple12(ff._2, unit, fe, cG, ff._2, ff._3, fd, fa, fb, fc, ff._1, nil)
700700 }
701701
702702
703-func fh (aX,bB,bv,fi,bC) = {
704- let fa = valueOrElse(getInteger(this, bd()), E)
705- let fj = q(fi[eA])
706- let fk = q(fi[eI])
707- let cd = q(fi[ex])
708- let bF = o(fi[eG])
709- let eV = q(fi[eH])
710- let fl = if ((aX == "outNeutrino"))
711- then eU(bB, bC, bF, eV)
712- else if ((aX == "outMulti"))
713- then eX(bB, bF, fj, fk, cd)
714- else throw(("Unsupported swap type " + aX))
715- let fg = fl._1
716- let fm = fl._2
717- let fn = fl._3
718- let fo = fl._4
719- let fp = fl._5
720- let fq = fl._6
721- let dk = fl._11
722- let fr = fl._12
723- let fs = if ((aX == "outNeutrino"))
724- then fr[0]
703+func fg (bl,bP,bJ,eF,bQ) = {
704+ let eZ = valueOrElse(getInteger(this, br()), E)
705+ let fh = q(eF[O])
706+ let fi = q(eF[W])
707+ let cr = q(eF[L])
708+ let bT = o(eF[U])
709+ let eG = q(eF[V])
710+ let fj = if ((bl == "outNeutrino"))
711+ then eU(bP, bQ, bT, eG)
712+ else if ((bl == "outMulti"))
713+ then eW(bP, bT, fh, fi, cr)
714+ else throw(("Unsupported swap type " + bl))
715+ let ff = fj._1
716+ let fk = fj._2
717+ let fl = fj._3
718+ let fm = fj._4
719+ let fn = fj._5
720+ let fo = fj._6
721+ let dy = fj._11
722+ let fp = fj._12
723+ let fq = if ((bl == "outNeutrino"))
724+ then fp[0]
725725 else 0
726- let ft = if ((aX == "outNeutrino"))
727- then fr[1]
726+ let fr = if ((bl == "outNeutrino"))
727+ then fp[1]
728728 else 0
729- let di = if ((0 >= fn))
729+ let dw = if ((0 >= fl))
730730 then 0
731- else q(l(invoke(ae, "surfFunctionREADONLY", [fn, fo], nil))[eJ])
732- let fu = if ((aX == "outMulti"))
733- then dw(dk)
731+ else q(l(invoke(as, "surfFunctionREADONLY", [fl, fm], nil))[eJ])
732+ let fs = if ((bl == "outMulti"))
733+ then dK(dy)
734734 else ""
735- $Tuple9(fs, fm, di, fn, fp, ft, fg, fq, fu)
735+ $Tuple9(fq, fk, dw, fl, fn, fr, ff, fo, fs)
736736 }
737737
738738
739-func fv () = "%s__applyInProgress"
739+func ft () = "%s__applyInProgress"
740740
741741
742-func fw (fx) = ("%s%d__proposalData__" + toString(fx))
742+func fu (fv) = ("%s%d__proposalData__" + toString(fv))
743743
744744
745-let fy = 9
745+let fw = 9
746746
747-func fz (cA) = {
748- let n = cA
747+func fx (cO) = {
748+ let n = cO
749749 if ($isInstanceOf(n, "Order"))
750750 then {
751- let fA = n
751+ let fy = n
752752 throw("Orders aren't allowed")
753753 }
754754 else if (if ($isInstanceOf(n, "DataTransaction"))
783783 then true
784784 else $isInstanceOf(n, "ReissueTransaction"))
785785 then {
786- let fB = n
787- let cU = toBase58String(fB.id)
788- let fx = valueOrErrorMessage(getInteger(ak, fv()), "Apply is not happening")
789- let fC = split(split(a(ak, fw(fx)), z)[fy], A)
790- if (!(isDefined(indexOf(fC, cU))))
791- then throw(((("Unknown txId: " + cU) + " for proposalId=") + toString(fx)))
786+ let fz = n
787+ let di = toBase58String(fz.id)
788+ let fv = valueOrErrorMessage(getInteger(ay, ft()), "Apply is not happening")
789+ let fA = split(split(a(ay, fu(fv)), z)[fw], A)
790+ if (!(isDefined(indexOf(fA, di))))
791+ then throw(((("Unknown txId: " + di) + " for proposalId=") + toString(fv)))
792792 else true
793793 }
794794 else throw("Match error")
796796
797797
798798 @Callable(r)
799-func constructorV1 (fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM,fN,fO) = {
800- let fP = dM(r)
801- if ((fP == fP))
799+func constructorV1 (fB,fC,fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM) = {
800+ let fN = ea(r)
801+ if ((fN == fN))
802802 then if ((size(r.payments) != 0))
803803 then throw("no payments allowed")
804- else [StringEntry(al, fD), StringEntry(am, fE), StringEntry(an, fF), StringEntry(ap, fG), StringEntry(aq, fH), StringEntry(ay, fI), IntegerEntry(at, fJ), IntegerEntry(au, fK), IntegerEntry(av("WAVES"), fL), IntegerEntry(ax, fM), IntegerEntry(az, fN), IntegerEntry(aA, fO)]
804+ else [StringEntry(az, fB), StringEntry(aA, fC), StringEntry(aB, fD), StringEntry(aD, fE), StringEntry(aE, fF), StringEntry(aM, fG), IntegerEntry(aH, fH), IntegerEntry(aI, fI), IntegerEntry(aJ("WAVES"), fJ), IntegerEntry(aL, fK), IntegerEntry(aN, fL), IntegerEntry(aO, fM)]
805805 else throw("Strict value is not equal to itself.")
806806 }
807807
808808
809809
810810 @Callable(r)
811-func constructorV2 (ae,af,fQ) = {
812- let fP = dM(r)
813- if ((fP == fP))
811+func constructorV2 (as,at,fO) = {
812+ let fN = ea(r)
813+ if ((fN == fN))
814814 then if ((size(r.payments) != 0))
815815 then throw("no payments allowed")
816- else [StringEntry(as, ae), StringEntry(ao, af), IntegerEntry(bc(), fQ)]
816+ else [StringEntry(aG, as), StringEntry(aC, at), IntegerEntry(bq(), fO)]
817817 else throw("Strict value is not equal to itself.")
818818 }
819819
820820
821821
822822 @Callable(r)
823-func constructorV3 (fR,fS,fT,fU,fV) = {
824- let fP = dM(r)
825- if ((fP == fP))
823+func constructorV3 (fP,fQ,fR,fS,fT) = {
824+ let fN = ea(r)
825+ if ((fN == fN))
826826 then if ((size(r.payments) != 0))
827827 then throw("no payments allowed")
828828 else {
829- func fW (bH,bI) = {
830- let cf = split(bI, "_")
831- let aw = cf[0]
832- let fX = parseIntValue(cf[1])
833- let fY = parseIntValue(cf[2])
834- $Tuple2((bH._1 :+ aw), ((bH._2 :+ IntegerEntry(bj(aw), fX)) :+ IntegerEntry(av(aw), fY)))
829+ func fU (bV,bW) = {
830+ let ct = split(bW, "_")
831+ let aK = ct[0]
832+ let fV = parseIntValue(ct[1])
833+ let fW = parseIntValue(ct[2])
834+ $Tuple2((bV._1 :+ aK), ((bV._2 :+ IntegerEntry(bx(aK), fV)) :+ IntegerEntry(aJ(aK), fW)))
835835 }
836836
837- let fZ = {
838- let bL = fR
839- let bM = size(bL)
840- let bN = $Tuple2(nil, nil)
841- func bO (bP,bQ) = if ((bQ >= bM))
842- then bP
843- else fW(bP, bL[bQ])
837+ let fX = {
838+ let bZ = fP
839+ let ca = size(bZ)
840+ let cb = $Tuple2(nil, nil)
841+ func cc (cd,ce) = if ((ce >= ca))
842+ then cd
843+ else fU(cd, bZ[ce])
844844
845- func bR (bP,bQ) = if ((bQ >= bM))
846- then bP
845+ func cf (cd,ce) = if ((ce >= ca))
846+ then cd
847847 else throw("List size exceeds 10")
848848
849- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
849+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
850850 }
851- (((((fZ._2 :+ IntegerEntry(bf(), fS)) :+ IntegerEntry(bg(), fT)) :+ IntegerEntry(bh(), fU)) :+ IntegerEntry(bi(), log(fU, 6, fV, 6, 6, HALFUP))) :+ StringEntry(be(), makeString(fZ._1, z)))
851+ (((((fX._2 :+ IntegerEntry(bt(), fQ)) :+ IntegerEntry(bu(), fR)) :+ IntegerEntry(bv(), fS)) :+ IntegerEntry(bw(), log(fT, 6, fS, 6, 6, HALFUP))) :+ StringEntry(bs(), makeString(fX._1, z)))
852852 }
853853 else throw("Strict value is not equal to itself.")
854854 }
859859 func swapTokenToNeutrino () = if ((size(r.payments) != 1))
860860 then throw("swapTokenToNeutrino require only one payment")
861861 else {
862- let ga = value(r.payments[0])
863- let gb = valueOrElse(getString(be()), "WAVES")
864- let gc = toBase58String(valueOrElse(ga.assetId, F))
865- if (!(contains(gb, gc)))
866- then throw(((gc + " is not one of basket tokens:") + gb))
862+ let fY = value(r.payments[0])
863+ let fZ = valueOrElse(getString(bs()), "WAVES")
864+ let ga = toBase58String(valueOrElse(fY.assetId, F))
865+ if (!(contains(fZ, ga)))
866+ then throw(((ga + " is not one of basket tokens:") + fZ))
867867 else {
868- let br = toString(r.caller)
869- let ee = toBase58String(r.transactionId)
870- eb("outNeutrino", ga.amount, gc, br, ee)
868+ let bF = toString(r.caller)
869+ let es = toBase58String(r.transactionId)
870+ ep("outNeutrino", fY.amount, ga, bF, es)
871871 }
872872 }
873873
877877 func swapNeutrinoToBasket () = if ((size(r.payments) != 1))
878878 then throw("swapNeutrinoToBasket require only one payment")
879879 else {
880- let ga = value(r.payments[0])
881- if ((ga.assetId != cs))
880+ let fY = value(r.payments[0])
881+ if ((fY.assetId != cG))
882882 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
883883 else {
884- let br = toString(r.caller)
885- let ee = toBase58String(r.transactionId)
886- eb("outMulti", ga.amount, toBase58String(cs), br, ee)
884+ let bF = toString(r.caller)
885+ let es = toBase58String(r.transactionId)
886+ ep("outMulti", fY.amount, toBase58String(cG), bF, es)
887887 }
888888 }
889889
890890
891891
892892 @Callable(r)
893-func withdraw (gd,aI,dq) = {
894- let cU = toBase58String(r.transactionId)
893+func withdraw (gb,aW,dE) = {
894+ let di = toBase58String(r.transactionId)
895895 if ((size(r.payments) != 0))
896896 then throw("no payments allowed")
897897 else {
898- let fi = l(invoke(ae, "calcNeutinoMetricsREADONLY", nil, nil))
899- let fj = q(fi[eA])
900- let br = addressFromStringValue(gd)
901- let do = dp(gd, dq)
902- let dd = parseIntValue(do[cP])
903- let aX = do[cK]
904- let bB = parseIntValue(do[cM])
905- let ge = do[cL]
906- let cZ = parseIntValue(do[cN])
907- let bC = do[cS]
908- let ek = bm(aX, bC)
909- let el = bn(aX, gd, bC)
910- let cq = dd
911- let cp = cI(aI)
912- let cr = cI((aI - 1))
913- let em = cH(cp)
914- if (ct)
915- then cm()
916- else if ((ge != "PENDING"))
898+ let eF = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
899+ let fh = q(eF[O])
900+ let bF = addressFromStringValue(gb)
901+ let dC = dD(gb, dE)
902+ let dr = parseIntValue(dC[dd])
903+ let bl = dC[cY]
904+ let bP = parseIntValue(dC[da])
905+ let gc = dC[cZ]
906+ let dn = parseIntValue(dC[db])
907+ let bQ = dC[dg]
908+ let ey = bA(bl, bQ)
909+ let ez = bB(bl, gb, bQ)
910+ let cE = dr
911+ let cD = cW(aW)
912+ let cF = cW((aW - 1))
913+ let eA = cV(cD)
914+ if (cH)
915+ then cA()
916+ else if ((gc != "PENDING"))
917917 then throw("swap has been already processed")
918- else if ((cq > height))
919- then throw((("please wait for: " + toString(cq)) + " block height to withdraw funds"))
920- else if (if (if ((aI > co))
918+ else if ((cE > height))
919+ then throw((("please wait for: " + toString(cE)) + " block height to withdraw funds"))
920+ else if (if (if ((aW > cC))
921921 then true
922- else (cq > cp))
922+ else (cE > cD))
923923 then true
924- else if ((cr != 0))
925- then (cr >= cq)
924+ else if ((cF != 0))
925+ then (cF >= cE)
926926 else false)
927- then cn(aI, co, cp, cq, cr)
927+ then cB(aW, cC, cD, cE, cF)
928928 else {
929- let gf = fh(aX, bB, em, fi, bC)
930- let cX = gf._1
931- let fm = gf._2
932- let di = gf._3
933- let fp = gf._5
934- let cY = gf._6
935- let fg = gf._7
936- let fq = gf._8
937- let fu = gf._9
938- if ((0 >= fg))
929+ let gd = fg(bl, bP, eA, eF, bQ)
930+ let dl = gd._1
931+ let fk = gd._2
932+ let dw = gd._3
933+ let fn = gd._5
934+ let dm = gd._6
935+ let ff = gd._7
936+ let fo = gd._8
937+ let fs = gd._9
938+ if ((0 >= ff))
939939 then throw("balance equals zero")
940940 else {
941- let gg = if ((di > 0))
941+ let ge = if ((dw > 0))
942942 then {
943- let gh = invoke(ai, "issueSurf", [di, gd], nil)
944- if ((gh == gh))
943+ let gf = invoke(aw, "issueSurf", [dw, gb], nil)
944+ if ((gf == gf))
945945 then 0
946946 else throw("Strict value is not equal to itself.")
947947 }
948948 else 0
949- if ((gg == gg))
949+ if ((ge == ge))
950950 then {
951- let gi = invoke(this, "internalUnleaseAndLease", [fp], nil)
952- if ((gi == gi))
951+ let gg = invoke(this, "internalUnleaseAndLease", [fn], nil)
952+ if ((gg == gg))
953953 then {
954- let gj = l(invoke(ah, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
955- let gk = q(gj[1])
956- let gl = q(l(gj[3])[3])
957- let gm = [IntegerEntry(aZ(aX, gd, bC), (el - bB)), IntegerEntry(aY(aX, bC), (ek - bB)), StringEntry(cT(gd, dq), dn(do, fq, cX, cY, cq, aI, cU, di, fj, fu, bC))]
958- if ((aX == "outMulti"))
954+ let gh = l(invoke(av, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
955+ let gi = q(gh[1])
956+ let gj = q(l(gh[3])[3])
957+ let gk = [IntegerEntry(bn(bl, gb, bQ), (ez - bP)), IntegerEntry(bm(bl, bQ), (ey - bP)), StringEntry(dh(gb, dE), dB(dC, fo, dl, dm, cE, aW, di, dw, fh, fs, bQ))]
958+ if ((bl == "outMulti"))
959959 then {
960- let gn = split(fu, "_")
961- func go (bH,bI) = {
962- let bK = split(bI, A)
963- let gp = fromBase58String(bK[0])
964- let aw = if ((gp == F))
960+ let gl = split(fs, "_")
961+ func gm (bV,bW) = {
962+ let bY = split(bW, A)
963+ let gn = fromBase58String(bY[0])
964+ let aK = if ((gn == F))
965965 then unit
966- else gp
967- let ca = parseIntValue(bK[2])
968- let cb = parseIntValue(bK[3])
969- let gq = if ((gk != 0))
970- then fraction(cb, gl, gk)
966+ else gn
967+ let co = parseIntValue(bY[2])
968+ let cp = parseIntValue(bY[3])
969+ let go = if ((gi != 0))
970+ then fraction(cp, gj, gi)
971971 else 0
972- let gr = if ((gk != 0))
973- then fraction(cb, (C - fj), C)
972+ let gp = if ((gi != 0))
973+ then fraction(cp, (C - fh), C)
974974 else 0
975- let gs = max([gq, gr])
976- let gt = (cb - gs)
977- $Tuple5((bH._1 :+ ScriptTransfer(br, ca, aw)), (bH._2 :+ AttachedPayment(aw, gs)), (bH._3 :+ AttachedPayment(aw, gt)), (bH._4 + gs), (bH._5 + gt))
975+ let gq = max([go, gp])
976+ let gr = (cp - gq)
977+ $Tuple5((bV._1 :+ ScriptTransfer(bF, co, aK)), (bV._2 :+ AttachedPayment(aK, gq)), (bV._3 :+ AttachedPayment(aK, gr)), (bV._4 + gq), (bV._5 + gr))
978978 }
979979
980- let fZ = {
981- let bL = gn
982- let bM = size(bL)
983- let bN = $Tuple5(nil, nil, nil, 0, 0)
984- func bO (bP,bQ) = if ((bQ >= bM))
985- then bP
986- else go(bP, bL[bQ])
980+ let fX = {
981+ let bZ = gl
982+ let ca = size(bZ)
983+ let cb = $Tuple5(nil, nil, nil, 0, 0)
984+ func cc (cd,ce) = if ((ce >= ca))
985+ then cd
986+ else gm(cd, bZ[ce])
987987
988- func bR (bP,bQ) = if ((bQ >= bM))
989- then bP
988+ func cf (cd,ce) = if ((ce >= ca))
989+ then cd
990990 else throw("List size exceeds 10")
991991
992- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
992+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
993993 }
994- let gu = if ((fZ._4 > 0))
994+ let gs = if ((fX._4 > 0))
995995 then {
996- let gv = invoke(ag, "deposit", nil, fZ._2)
997- if ((gv == gv))
996+ let gt = invoke(au, "deposit", nil, fX._2)
997+ if ((gt == gt))
998998 then 0
999999 else throw("Strict value is not equal to itself.")
10001000 }
10011001 else 0
1002- if ((gu == gu))
1002+ if ((gs == gs))
10031003 then {
1004- let gw = if ((fZ._5 > 0))
1004+ let gu = if ((fX._5 > 0))
10051005 then {
1006- let gx = invoke(af, "deposit", nil, fZ._3)
1007- if ((gx == gx))
1006+ let gv = invoke(at, "deposit", nil, fX._3)
1007+ if ((gv == gv))
10081008 then 0
10091009 else throw("Strict value is not equal to itself.")
10101010 }
10111011 else 0
1012- if ((gw == gw))
1013- then (gm ++ fZ._1)
1012+ if ((gu == gu))
1013+ then (gk ++ fX._1)
10141014 else throw("Strict value is not equal to itself.")
10151015 }
10161016 else throw("Strict value is not equal to itself.")
10171017 }
10181018 else {
1019- let gy = AttachedPayment(fm, cY)
1020- let gz = if ((gk != 0))
1021- then fraction(gy.amount, gl, gk)
1019+ let gw = AttachedPayment(fk, dm)
1020+ let gx = if ((gi != 0))
1021+ then fraction(gw.amount, gj, gi)
10221022 else 0
1023- let gA = if ((gk != 0))
1024- then fraction(gy.amount, (C - fj), C)
1023+ let gy = if ((gi != 0))
1024+ then fraction(gw.amount, (C - fh), C)
10251025 else 0
1026- let gB = max([gz, gA])
1027- let gC = (gy.amount - gB)
1028- let gu = if ((gB > 0))
1026+ let gz = max([gx, gy])
1027+ let gA = (gw.amount - gz)
1028+ let gs = if ((gz > 0))
10291029 then {
1030- let gv = invoke(ag, "deposit", nil, [AttachedPayment(gy.assetId, gB)])
1031- if ((gv == gv))
1030+ let gt = invoke(au, "deposit", nil, [AttachedPayment(gw.assetId, gz)])
1031+ if ((gt == gt))
10321032 then nil
10331033 else throw("Strict value is not equal to itself.")
10341034 }
10351035 else nil
1036- if ((gu == gu))
1036+ if ((gs == gs))
10371037 then {
1038- let gw = if ((gC > 0))
1038+ let gu = if ((gA > 0))
10391039 then {
1040- let gx = invoke(af, "deposit", nil, [AttachedPayment(gy.assetId, gC)])
1041- if ((gx == gx))
1040+ let gv = invoke(at, "deposit", nil, [AttachedPayment(gw.assetId, gA)])
1041+ if ((gv == gv))
10421042 then nil
10431043 else throw("Strict value is not equal to itself.")
10441044 }
10451045 else nil
1046- if ((gw == gw))
1047- then (gm :+ ScriptTransfer(br, cX, fm))
1046+ if ((gu == gu))
1047+ then (gk :+ ScriptTransfer(bF, dl, fk))
10481048 else throw("Strict value is not equal to itself.")
10491049 }
10501050 else throw("Strict value is not equal to itself.")
10611061
10621062
10631063 @Callable(r)
1064-func internalUnleaseAndLease (dE) = if ((r.caller != this))
1064+func internalUnleaseAndLease (dS) = if ((r.caller != this))
10651065 then throw("internalUnleaseAndLease is not public method")
1066- else dN(dE)
1066+ else eb(dS)
10671067
10681068
10691069
10701070 @Callable(r)
1071-func transferUsdnToUser (bu,gD) = if ((r.caller != ai))
1071+func transferUsdnToUser (bI,gB) = if ((r.caller != aw))
10721072 then throw("Only auction contract is authorized")
1073- else [ScriptTransfer(addressFromStringValue(gD), bu, cs)]
1073+ else [ScriptTransfer(addressFromStringValue(gB), bI, cG)]
10741074
10751075
10761076
10771077 @Callable(r)
1078-func acceptWaves () = if (if ((r.caller != ai))
1079- then (r.caller != ak)
1078+func acceptWaves () = if (if ((r.caller != aw))
1079+ then (r.caller != ay)
10801080 else false)
10811081 then throw("Currently only auction and governance contracts are allowed to call")
1082- else $Tuple2(dN(0), "success")
1082+ else $Tuple2(eb(0), "success")
10831083
10841084
10851085
10861086 @Callable(r)
1087-func approveLeasings (gE,aV,gF) = {
1088- let gG = [0, 1, 2, 3, 4, 5, 6, 7]
1089- let gH = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1090- let gI = fromBase58String(gH)
1091- let gJ = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1092- let gK = addressFromStringValue(gJ)
1093- let gL = aU(aV)
1094- let gM = getString(this, gL)
1095- if (isDefined(gM))
1096- then throw((("group " + toString(aV)) + " already initialized"))
1087+func approveLeasings (gC,bj,gD) = {
1088+ let gE = [0, 1, 2, 3, 4, 5, 6, 7]
1089+ let gF = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1090+ let gG = fromBase58String(gF)
1091+ let gH = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1092+ let gI = addressFromStringValue(gH)
1093+ let gJ = bi(bj)
1094+ let gK = getString(this, gJ)
1095+ if (isDefined(gK))
1096+ then throw((("group " + toString(bj)) + " already initialized"))
10971097 else {
1098- let gN = split(gE, z)
1099- let gO = size(gG)
1100- if ((r.callerPublicKey != gI))
1098+ let gL = split(gC, z)
1099+ let gM = size(gE)
1100+ if ((r.callerPublicKey != gG))
11011101 then throw("approveLeasings not authorized")
11021102 else {
1103- let gP = dV(0)
1104- let gQ = gP._1
1105- let gR = gP._2
1106- let gS = gP._3
1107- let gT = gP._4
1108- let gU = gP._5
1109- let gV = Lease(gQ, (gS - (gF * gO)))
1110- let gW = invoke(gK, "validateAndApproveLeasings", [gE], nil)
1111- if ((gW == gW))
1103+ let gN = ej(0)
1104+ let gO = gN._1
1105+ let gP = gN._2
1106+ let gQ = gN._3
1107+ let gR = gN._4
1108+ let gS = gN._5
1109+ let gT = Lease(gO, (gQ - (gD * gM)))
1110+ let gU = invoke(gI, "validateAndApproveLeasings", [gC], nil)
1111+ if ((gU == gU))
11121112 then {
1113- func gX (dA,r) = {
1114- let gY = gN[r]
1115- let gZ = Lease(addressFromStringValue(gY), gF)
1116- (dA ++ [gZ, BinaryEntry(aQ(gY), d(gZ)), IntegerEntry(aT(gY), gF)])
1113+ func gV (dO,r) = {
1114+ let gW = gL[r]
1115+ let gX = Lease(addressFromStringValue(gW), gD)
1116+ (dO ++ [gX, BinaryEntry(be(gW), d(gX)), IntegerEntry(bh(gW), gD)])
11171117 }
11181118
1119- ([StringEntry(gL, gE), BinaryEntry(gT, d(gV)), IntegerEntry(gR, gV.amount), LeaseCancel(gU), gV] ++ {
1120- let bL = gG
1121- let bM = size(bL)
1122- let bN = nil
1123- func bO (bP,bQ) = if ((bQ >= bM))
1124- then bP
1125- else gX(bP, bL[bQ])
1119+ ([StringEntry(gJ, gC), BinaryEntry(gR, d(gT)), IntegerEntry(gP, gT.amount), LeaseCancel(gS), gT] ++ {
1120+ let bZ = gE
1121+ let ca = size(bZ)
1122+ let cb = nil
1123+ func cc (cd,ce) = if ((ce >= ca))
1124+ then cd
1125+ else gV(cd, bZ[ce])
11261126
1127- func bR (bP,bQ) = if ((bQ >= bM))
1128- then bP
1127+ func cf (cd,ce) = if ((ce >= ca))
1128+ then cd
11291129 else throw("List size exceeds 8")
11301130
1131- bR(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1131+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8)
11321132 })
11331133 }
11341134 else throw("Strict value is not equal to itself.")
11391139
11401140
11411141 @Callable(r)
1142-func rebalanceLeasings (bu,aV) = {
1143- let gG = [0, 1, 2, 3, 4, 5, 6, 7]
1144- let gH = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1145- let gI = fromBase58String(gH)
1146- let gL = aU(aV)
1147- let gE = a(this, gL)
1148- let gN = split(gE, z)
1149- if ((r.callerPublicKey != gI))
1142+func rebalanceLeasings (bI,bj) = {
1143+ let gE = [0, 1, 2, 3, 4, 5, 6, 7]
1144+ let gF = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1145+ let gG = fromBase58String(gF)
1146+ let gJ = bi(bj)
1147+ let gC = a(this, gJ)
1148+ let gL = split(gC, z)
1149+ if ((r.callerPublicKey != gG))
11501150 then throw("rebalanceLeasings not authorized")
11511151 else {
1152- let fp = ((bu / size(gN)) + 1)
1153- let ha = dV(0)
1154- let gQ = ha._1
1155- let gR = ha._2
1156- let gS = ha._3
1157- let gT = ha._4
1158- let gU = ha._5
1159- let gV = Lease(gQ, (gS + (fp * size(gN))))
1160- func hb (dA,r) = {
1161- let gY = gN[r]
1162- let hc = aQ(gY)
1163- let hd = getBinaryValue(this, hc)
1164- let he = aT(gY)
1165- let gF = getIntegerValue(this, he)
1166- let hf = LeaseCancel(value(hd))
1167- let gZ = Lease(addressFromStringValue(gY), (gF - fp))
1168- (dA ++ [LeaseCancel(value(hd)), gZ, BinaryEntry(hc, d(gZ)), IntegerEntry(he, gZ.amount)])
1152+ let fn = ((bI / size(gL)) + 1)
1153+ let gY = ej(0)
1154+ let gO = gY._1
1155+ let gP = gY._2
1156+ let gQ = gY._3
1157+ let gR = gY._4
1158+ let gS = gY._5
1159+ let gT = Lease(gO, (gQ + (fn * size(gL))))
1160+ func gZ (dO,r) = {
1161+ let gW = gL[r]
1162+ let ha = be(gW)
1163+ let hb = getBinaryValue(this, ha)
1164+ let hc = bh(gW)
1165+ let gD = getIntegerValue(this, hc)
1166+ let hd = LeaseCancel(value(hb))
1167+ let gX = Lease(addressFromStringValue(gW), (gD - fn))
1168+ (dO ++ [LeaseCancel(value(hb)), gX, BinaryEntry(ha, d(gX)), IntegerEntry(hc, gX.amount)])
11691169 }
11701170
11711171 ({
1172- let bL = gG
1173- let bM = size(bL)
1174- let bN = nil
1175- func bO (bP,bQ) = if ((bQ >= bM))
1176- then bP
1177- else hb(bP, bL[bQ])
1172+ let bZ = gE
1173+ let ca = size(bZ)
1174+ let cb = nil
1175+ func cc (cd,ce) = if ((ce >= ca))
1176+ then cd
1177+ else gZ(cd, bZ[ce])
11781178
1179- func bR (bP,bQ) = if ((bQ >= bM))
1180- then bP
1179+ func cf (cd,ce) = if ((ce >= ca))
1180+ then cd
11811181 else throw("List size exceeds 8")
11821182
1183- bR(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1184- } ++ [BinaryEntry(gT, d(gV)), IntegerEntry(gR, gV.amount), LeaseCancel(gU), gV])
1183+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1184+ } ++ [BinaryEntry(gR, d(gT)), IntegerEntry(gP, gT.amount), LeaseCancel(gS), gT])
11851185 }
11861186 }
11871187
11881188
11891189
11901190 @Callable(r)
1191-func swapParamsByUserSYSREADONLY (ed,hg) = {
1192- let gj = l(invoke(ah, "gnsbtInfoSYSREADONLY", [ed, 0, 0], nil))
1193- let hh = (q(gj[0]) + hg)
1194- let gk = (q(gj[1]) + hg)
1195- let hi = l(invoke(ae, "calcSwapLimitREADONLY", [hh], nil))
1196- let hj = q(hi[0])
1197- let ei = q(hi[1])
1198- let ej = q(hi[2])
1199- let hk = valueOrElse(getInteger(this, bs(ed)), 0)
1200- let hl = bl()
1201- let hm = (height - hk)
1202- let hn = (hm >= hl)
1203- let ho = if (hn)
1191+func swapParamsByUserSYSREADONLY (er,he) = {
1192+ let gh = l(invoke(av, "gnsbtInfoSYSREADONLY", [er, 0, 0], nil))
1193+ let hf = (q(gh[0]) + he)
1194+ let gi = (q(gh[1]) + he)
1195+ let hg = l(invoke(as, "calcSwapLimitREADONLY", [hf], nil))
1196+ let hh = q(hg[0])
1197+ let ew = q(hg[1])
1198+ let ex = q(hg[2])
1199+ let hi = valueOrElse(getInteger(this, bG(er)), 0)
1200+ let hj = bz()
1201+ let hk = (height - hi)
1202+ let hl = (hk >= hj)
1203+ let hm = if (hl)
12041204 then 0
1205- else valueOrElse(getInteger(this, bq(ed)), 0)
1206- let eh = if (hn)
1205+ else valueOrElse(getInteger(this, bE(er)), 0)
1206+ let ev = if (hl)
12071207 then 0
1208- else (hl - hm)
1209- $Tuple2(nil, $Tuple7(hj, ho, eh, hh, gk, ei, ej))
1208+ else (hj - hk)
1209+ $Tuple2(nil, $Tuple7(hh, hm, ev, hf, gi, ew, ex))
12101210 }
12111211
12121212
12131213
12141214 @Callable(r)
1215-func calcWithdrawResultSYSREADONLY (aX,bB,bv,bC) = {
1216- let fi = l(invoke(ae, "calcNeutinoMetricsREADONLY", nil, nil))
1217- $Tuple2(nil, fh(aX, bB, bv, fi, bC))
1215+func calcWithdrawResultSYSREADONLY (bl,bP,bJ,bQ) = {
1216+ let eF = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
1217+ $Tuple2(nil, fg(bl, bP, bJ, eF, bQ))
12181218 }
12191219
12201220
12211221
12221222 @Callable(r)
1223-func replaceCommunityNode (hp,hq,aV,hr) = {
1224- let gH = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1225- let gI = fromBase58String(gH)
1226- if ((r.callerPublicKey != gI))
1223+func replaceCommunityNode (hn,ho,bj,hp) = {
1224+ let gF = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1225+ let gG = fromBase58String(gF)
1226+ if ((r.callerPublicKey != gG))
12271227 then throw("replaceCommunityNode not authorized")
12281228 else {
1229- let hs = aU(aV)
1230- let ht = a(this, hs)
1231- if (!(contains(ht, hp)))
1232- then throw(((("Group " + toString(aV)) + " does not contain address ") + hp))
1229+ let hq = bi(bj)
1230+ let hr = a(this, hq)
1231+ if (!(contains(hr, hn)))
1232+ then throw(((("Group " + toString(bj)) + " does not contain address ") + hn))
12331233 else {
1234- let hu = invoke(aj, "replaceApprovedNode", [hp, hq, aV, hr], nil)
1235- if ((hu == hu))
1234+ let hs = invoke(ax, "replaceApprovedNode", [hn, ho, bj, hp], nil)
1235+ if ((hs == hs))
12361236 then {
1237- let hv = aQ(hp)
1238- let hw = aT(hp)
1239- let hx = getIntegerValue(hw)
1240- let hy = aQ(hq)
1241- let hz = aT(hq)
1242- let hA = Lease(addressFromStringValue(hq), hx)
1243- let hB = makeString(split(ht, hp), hq)
1244- $Tuple2([LeaseCancel(getBinaryValue(hv)), DeleteEntry(hv), DeleteEntry(hw), StringEntry(hs, hB), hA, BinaryEntry(hy, d(hA)), IntegerEntry(hz, hx)], unit)
1237+ let ht = be(hn)
1238+ let hu = bh(hn)
1239+ let hv = getIntegerValue(hu)
1240+ let hw = be(ho)
1241+ let hx = bh(ho)
1242+ let hy = Lease(addressFromStringValue(ho), hv)
1243+ let hz = makeString(split(hr, hn), ho)
1244+ $Tuple2([LeaseCancel(getBinaryValue(ht)), DeleteEntry(ht), DeleteEntry(hu), StringEntry(hq, hz), hy, BinaryEntry(hw, d(hy)), IntegerEntry(hx, hv)], unit)
12451245 }
12461246 else throw("Strict value is not equal to itself.")
12471247 }
12521252
12531253 @Callable(r)
12541254 func updateReservesAndNeutrinoSupply () = {
1255- func hC (c) = {
1255+ func hA (c) = {
12561256 let n = getInteger(this, c)
12571257 if ($isInstanceOf(n, "Int"))
12581258 then {
1259- let dA = n
1260- dA
1259+ let dO = n
1260+ dO
12611261 }
12621262 else 0
12631263 }
12641264
1265- let hD = l(invoke(ae, "calcNeutinoMetricsREADONLY", nil, nil))
1266- let ac = hC("updateReservesAndNeutrinoSupplyIdx")
1267- let hE = (ac + 1)
1268-[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", hE), IntegerEntry("reserve", q(hD[3])), IntegerEntry("neutrinoSupply", q(hD[5])), IntegerEntry("reservesInUsdn", bw(q(hD[3]), q(hD[0]))), IntegerEntry("surplus", q(hD[6])), IntegerEntry("deficit", -(q(hD[6])))]
1265+ let hB = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
1266+ let aq = hA("updateReservesAndNeutrinoSupplyIdx")
1267+ let hC = (aq + 1)
1268+[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", hC), IntegerEntry("reserve", q(hB[3])), IntegerEntry("neutrinoSupply", q(hB[5])), IntegerEntry("reservesInUsdn", bK(q(hB[3]), q(hB[0]))), IntegerEntry("surplus", q(hB[6])), IntegerEntry("deficit", -(q(hB[6])))]
12691269 }
12701270
12711271
12721272
12731273 @Callable(r)
12741274 func wavesBalancesVsPayment () = {
1275- let hF = wavesBalance(this)
1276-[IntegerEntry("wavesBalance_available", hF.available), IntegerEntry("wavesBalance_regular", hF.regular), IntegerEntry("wavesBalance_generating", hF.generating), IntegerEntry("wavesBalance_effective", hF.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
1275+ let hD = wavesBalance(this)
1276+[IntegerEntry("wavesBalance_available", hD.available), IntegerEntry("wavesBalance_regular", hD.regular), IntegerEntry("wavesBalance_generating", hD.generating), IntegerEntry("wavesBalance_effective", hD.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
12771277 }
12781278
12791279
1280-@Verifier(cA)
1281-func hG () = {
1282- let hH = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1283- let hI = split(valueOrElse(getString(ad, "%s__multisig"), hH), z)
1284- let hJ = ((((if (sigVerify(cA.bodyBytes, cA.proofs[0], fromBase58String(hI[0])))
1280+@Verifier(cO)
1281+func hE () = {
1282+ let hF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1283+ let hG = split(valueOrElse(getString(ar, "%s__multisig"), hF), z)
1284+ let hH = ((((if (sigVerify(cO.bodyBytes, cO.proofs[0], fromBase58String(hG[0])))
12851285 then 1
1286- else 0) + (if (sigVerify(cA.bodyBytes, cA.proofs[1], fromBase58String(hI[1])))
1286+ else 0) + (if (sigVerify(cO.bodyBytes, cO.proofs[1], fromBase58String(hG[1])))
12871287 then 1
1288- else 0)) + (if (sigVerify(cA.bodyBytes, cA.proofs[2], fromBase58String(hI[2])))
1288+ else 0)) + (if (sigVerify(cO.bodyBytes, cO.proofs[2], fromBase58String(hG[2])))
12891289 then 1
1290- else 0)) + (if (sigVerify(cA.bodyBytes, cA.proofs[3], fromBase58String(hI[3])))
1290+ else 0)) + (if (sigVerify(cO.bodyBytes, cO.proofs[3], fromBase58String(hG[3])))
12911291 then 2
12921292 else 0))
1293- if (if (ct)
1294- then (getStringValue(ad, "is_blocked_caller") == toString(ak))
1293+ if (if (cH)
1294+ then (getStringValue(ar, "is_blocked_caller") == toString(ay))
12951295 else false)
1296- then fz(cA)
1296+ then fx(cO)
12971297 else {
1298- let n = cA
1298+ let n = cO
12991299 if ($isInstanceOf(n, "SponsorFeeTransaction"))
13001300 then {
1301- let hK = n
1302- if (cz(hK))
1303- then (hJ >= 3)
1301+ let hI = n
1302+ if (cN(hI))
1303+ then (hH >= 3)
13041304 else false
13051305 }
1306- else (hJ >= 3)
1306+ else (hH >= 3)
13071307 }
13081308 }
13091309
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = valueOrErrorMessage(getString(b, c), makeString(["mandatory ", toString(b), ".", c, " is not defined"], ""))
55
66
77 func d (e) = calculateLeaseId(e)
88
99
1010 func f (c) = valueOrElse(getInteger(this, c), 0)
1111
1212
1313 func g (c) = valueOrElse(getString(this, c), "")
1414
1515
1616 func h (c) = valueOrElse(getBoolean(this, c), false)
1717
1818
1919 func i (b,c) = valueOrElse(getInteger(b, c), 0)
2020
2121
2222 func j (b,c) = valueOrElse(getString(addressFromStringValue(b), c), "")
2323
2424
2525 func k (b,c) = valueOrElse(getBoolean(b, c), false)
2626
2727
2828 func l (m) = {
2929 let n = m
3030 if ($isInstanceOf(n, "List[Any]"))
3131 then {
3232 let e = n
3333 e
3434 }
3535 else throw("fail to cast into List[Any]")
3636 }
3737
3838
3939 func o (m) = {
4040 let n = m
4141 if ($isInstanceOf(n, "String"))
4242 then {
4343 let p = n
4444 p
4545 }
4646 else throw("fail to cast into String")
4747 }
4848
4949
5050 func q (m) = {
5151 let n = m
5252 if ($isInstanceOf(n, "Int"))
5353 then {
5454 let r = n
5555 r
5656 }
5757 else throw("fail to cast into Int")
5858 }
5959
6060
6161 func s (t) = {
6262 let n = t
6363 if ($isInstanceOf(n, "ByteVector"))
6464 then {
6565 let u = n
6666 u
6767 }
6868 else throw("fail to cast into ByteVector")
6969 }
7070
7171
7272 func v (m) = {
7373 let n = m
7474 if ($isInstanceOf(n, "AttachedPayment"))
7575 then {
7676 let w = n
7777 w
7878 }
7979 else throw("fail to cast into AttachedPayment")
8080 }
8181
8282
8383 func x (m) = {
8484 let n = m
8585 if ($isInstanceOf(n, "(Int, Int, Int, Int, Int, Int, Int)"))
8686 then {
8787 let y = n
8888 y
8989 }
9090 else throw("fail to cast into Tuple5 ints")
9191 }
9292
9393
9494 let z = "__"
9595
9696 let A = ":"
9797
9898 let B = 100000000
9999
100100 let C = 1000000
101101
102102 let D = 20000
103103
104104 let E = 100000
105105
106106 let F = base58'WAVES'
107107
108108 let G = 0
109109
110110 let H = 1
111111
112112 let I = 2
113113
114-let J = 1
114+let J = 3
115115
116-let K = 2
116+let K = 4
117117
118-let L = 3
118+let L = 5
119119
120-let M = 4
120+let M = 6
121121
122-let N = 5
122+let N = 7
123123
124-let O = 6
124+let O = 8
125125
126-let P = 7
126+let P = 9
127127
128-let Q = 8
128+let Q = 10
129129
130-let R = 9
130+let R = 11
131131
132-let S = 10
132+let S = 12
133133
134-let T = 11
134+let T = 13
135135
136-let U = 12
136+let U = 14
137137
138-let V = 13
138+let V = 15
139139
140-func W () = "%s%s__config__controlAddress"
140+let W = 16
141+
142+let X = 1
143+
144+let Y = 2
145+
146+let Z = 3
147+
148+let aa = 4
149+
150+let ab = 5
151+
152+let ac = 6
153+
154+let ad = 7
155+
156+let ae = 8
157+
158+let af = 9
159+
160+let ag = 10
161+
162+let ah = 11
163+
164+let ai = 12
165+
166+let aj = 13
167+
168+func ak () = "%s%s__config__controlAddress"
141169
142170
143-func X () = "%s__controlConfig"
171+func al () = "%s__controlConfig"
144172
145173
146-func Y (Z) = split_4C(a(Z, X()), z)
174+func am (an) = split_4C(a(an, al()), z)
147175
148176
149-func aa (ab,ac) = valueOrErrorMessage(addressFromString(ab[ac]), ("Control cfg doesn't contain address at index " + toString(ac)))
177+func ao (ap,aq) = valueOrErrorMessage(addressFromString(ap[aq]), ("Control cfg doesn't contain address at index " + toString(aq)))
150178
151179
152-let ad = addressFromStringValue(valueOrElse(getString(this, W()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
180+let ar = addressFromStringValue(valueOrElse(getString(this, ak()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
153181
154-let ab = Y(ad)
182+let ap = am(ar)
155183
156-let ae = aa(ab, M)
184+let as = ao(ap, aa)
157185
158-let af = aa(ab, Q)
186+let at = ao(ap, ae)
159187
160-let ag = aa(ab, S)
188+let au = ao(ap, ag)
161189
162-let ah = aa(ab, T)
190+let av = ao(ap, ah)
163191
164-let ai = aa(ab, K)
192+let aw = ao(ap, Y)
165193
166-let aj = aa(ab, P)
194+let ax = ao(ap, ad)
167195
168-let ak = aa(ab, V)
196+let ay = ao(ap, aj)
169197
170-let al = "neutrino_asset_id"
198+let az = "neutrino_asset_id"
171199
172-let am = "bond_asset_id"
200+let aA = "bond_asset_id"
173201
174-let an = "auction_contract"
202+let aB = "auction_contract"
175203
176-let ao = "nsbtStakingContract"
204+let aC = "nsbtStakingContract"
177205
178-let ap = "liquidation_contract"
206+let aD = "liquidation_contract"
179207
180-let aq = "rpd_contract"
208+let aE = "rpd_contract"
181209
182-let ar = "control_contract"
210+let aF = "control_contract"
183211
184-let as = "math_contract"
212+let aG = "math_contract"
185213
186-let at = "balance_waves_lock_interval"
214+let aH = "balance_waves_lock_interval"
187215
188-let au = "balance_neutrino_lock_interval"
216+let aI = "balance_neutrino_lock_interval"
189217
190-func av (aw) = ("min_outNeutrino_swap_amount_" + aw)
218+func aJ (aK) = ("min_outNeutrino_swap_amount_" + aK)
191219
192220
193-let ax = "min_outMulti_swap_amount"
221+let aL = "min_outMulti_swap_amount"
194222
195-let ay = "node_oracle_provider"
223+let aM = "node_oracle_provider"
196224
197-let az = "neutrinoOut_swap_feePart"
225+let aN = "neutrinoOut_swap_feePart"
198226
199-let aA = "wavesOut_swap_feePart"
227+let aO = "wavesOut_swap_feePart"
200228
201-func aB (b) = ("%s__" + b)
229+func aP (b) = ("%s__" + b)
202230
203231
204-let aC = "price"
232+let aQ = "price"
205233
206-let aD = "price_index"
234+let aR = "price_index"
207235
208-let aE = "is_blocked"
236+let aS = "is_blocked"
209237
210-func aF (aG) = ((aC + "_") + toString(aG))
238+func aT (aU) = ((aQ + "_") + toString(aU))
211239
212240
213-func aH (aI) = ((aD + "_") + toString(aI))
241+func aV (aW) = ((aR + "_") + toString(aW))
214242
215243
216-func aJ (ac) = g(makeString(["%s%d%s", "lease", toString(ac), "nodeAddress"], z))
244+func aX (aq) = g(makeString(["%s%d%s", "lease", toString(aq), "nodeAddress"], z))
217245
218246
219-func aK (ac) = addressFromStringValue(aJ(ac))
247+func aY (aq) = addressFromStringValue(aX(aq))
220248
221249
222-func aL () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * B))
250+func aZ () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * B))
223251
224252
225-func aM (aN) = ("balance_unlock_block_" + aN)
253+func ba (bb) = ("balance_unlock_block_" + bb)
226254
227255
228-func aO (aP) = makeString(["%s%d%s", "lease", toString(aP), "id"], z)
256+func bc (bd) = makeString(["%s%d%s", "lease", toString(bd), "id"], z)
229257
230258
231-func aQ (aR) = makeString(["%s%s%s", "leaseByAddress", aR, "id"], z)
259+func be (bf) = makeString(["%s%s%s", "leaseByAddress", bf, "id"], z)
232260
233261
234-func aS (aP) = makeString(["%s%d%s", "lease", toString(aP), "amount"], z)
262+func bg (bd) = makeString(["%s%d%s", "lease", toString(bd), "amount"], z)
235263
236264
237-func aT (aR) = makeString(["%s%s%s", "leaseByAddress", aR, "amount"], z)
265+func bh (bf) = makeString(["%s%s%s", "leaseByAddress", bf, "amount"], z)
238266
239267
240-func aU (aV) = makeString(["%s%d%s", "leaseGroup", toString(aV), "nodeList"], z)
268+func bi (bj) = makeString(["%s%d%s", "leaseGroup", toString(bj), "nodeList"], z)
241269
242270
243-func aW (aX) = (("min_" + aX) + "_swap_amount")
271+func bk (bl) = (("min_" + bl) + "_swap_amount")
244272
245273
246-func aY (aX,aw) = makeString(["%s%s%s", "balanceLock", aX, aw], z)
274+func bm (bl,aK) = makeString(["%s%s%s", "balanceLock", bl, aK], z)
247275
248276
249-func aZ (aX,aN,aw) = makeString(["%s%s%s%s", "balanceLock", aX, aN, aw], "_")
277+func bn (bl,bb,aK) = makeString(["%s%s%s%s", "balanceLock", bl, bb, aK], "_")
250278
251279
252-func ba (aX) = if ((aX == "outMulti"))
253- then au
254- else at
280+func bo (bl) = if ((bl == "outMulti"))
281+ then aI
282+ else aH
255283
256284
257-func bb () = "balance_node_lock_interval"
285+func bp () = "balance_node_lock_interval"
258286
259287
260-func bc () = "swaps_timeframe"
288+func bq () = "swaps_timeframe"
261289
262290
263-func bd () = "min_BR_protection_level"
291+func br () = "min_BR_protection_level"
264292
265293
266-func be () = "%s%s__common__basketAssets"
294+func bs () = "%s%s__common__basketAssets"
267295
268296
269-func bf () = "%s%s__common__basketD"
297+func bt () = "%s%s__common__basketD"
270298
271299
272-func bg () = "%s%s__common__basketK"
300+func bu () = "%s%s__common__basketK"
273301
274302
275-func bh () = "%s%s__common__basketB"
303+func bv () = "%s%s__common__basketB"
276304
277305
278-func bi () = "%s%s__common__basketLogbDelta"
306+func bw () = "%s%s__common__basketLogbDelta"
279307
280308
281-func bj (aw) = ("%s%s%s__common__weightByAsset__" + aw)
309+func bx (aK) = ("%s%s%s__common__weightByAsset__" + aK)
282310
283311
284-func bk (aX,aw) = valueOrElse(if ((aX == "outMulti"))
285- then getInteger(ax)
286- else getInteger(av(aw)), 0)
312+func by (bl,aK) = valueOrElse(if ((bl == "outMulti"))
313+ then getInteger(aL)
314+ else getInteger(aJ(aK)), 0)
287315
288316
289-func bl () = valueOrElse(getInteger(this, bc()), 1440)
317+func bz () = valueOrElse(getInteger(this, bq()), 1440)
290318
291319
292-func bm (aX,aw) = valueOrElse(getInteger(this, aY(aX, aw)), 0)
320+func bA (bl,aK) = valueOrElse(getInteger(this, bm(bl, aK)), 0)
293321
294322
295-func bn (aX,aN,aw) = valueOrElse(getInteger(this, aZ(aX, aN, aw)), 0)
323+func bB (bl,bb,aK) = valueOrElse(getInteger(this, bn(bl, bb, aK)), 0)
296324
297325
298-func bo (aX) = valueOrElse(getInteger(this, ba(aX)), 1440)
326+func bC (bl) = valueOrElse(getInteger(this, bo(bl)), 1440)
299327
300328
301-func bp () = valueOrElse(getInteger(this, bb()), 1)
329+func bD () = valueOrElse(getInteger(this, bp()), 1)
302330
303331
304-func bq (br) = makeString(["%s%s", "swapUserSpentInPeriod", br], z)
332+func bE (bF) = makeString(["%s%s", "swapUserSpentInPeriod", bF], z)
305333
306334
307-func bs (br) = makeString(["%s%s", "userLastSwapHeight", br], z)
335+func bG (bF) = makeString(["%s%s", "userLastSwapHeight", bF], z)
308336
309337
310-func bt (bu,bv) = fraction(bu, B, bv)
338+func bH (bI,bJ) = fraction(bI, B, bJ)
311339
312340
313-func bw (bu,bv) = fraction(bu, bv, B)
341+func bK (bI,bJ) = fraction(bI, bJ, B)
314342
315343
316-func bx (bu,bv) = bw(bu, bv)
344+func bL (bI,bJ) = bK(bI, bJ)
317345
318346
319-func by (bz) = split(bz, ",")
347+func bM (bN) = split(bN, ",")
320348
321349
322-func bA (bB,bC,bD,bE) = {
323- let bF = split(bD, "_")
324- func bG (bH,bI) = {
325- let bJ = split(bI, A)
326- if ((bJ[0] == bC))
327- then bJ
328- else bH
350+func bO (bP,bQ,bR,bS) = {
351+ let bT = split(bR, "_")
352+ func bU (bV,bW) = {
353+ let bX = split(bW, A)
354+ if ((bX[0] == bQ))
355+ then bX
356+ else bV
329357 }
330358
331- let bK = {
332- let bL = bF
333- let bM = size(bL)
334- let bN = nil
335- func bO (bP,bQ) = if ((bQ >= bM))
336- then bP
337- else bG(bP, bL[bQ])
359+ let bY = {
360+ let bZ = bT
361+ let ca = size(bZ)
362+ let cb = nil
363+ func cc (cd,ce) = if ((ce >= ca))
364+ then cd
365+ else bU(cd, bZ[ce])
338366
339- func bR (bP,bQ) = if ((bQ >= bM))
340- then bP
367+ func cf (cd,ce) = if ((ce >= ca))
368+ then cd
341369 else throw("List size exceeds 10")
342370
343- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
371+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
344372 }
345- let bS = valueOrElse(getInteger(bi()), -18820642)
346- let bT = valueOrElse(getInteger(bf()), 50000)
347- let bU = valueOrElse(getInteger(bh()), 1250000)
348- let bV = valueOrElse(getInteger(bj(bC)), 166666)
349- let bW = ((bS - bV) + parseIntValue(bK[1]))
350- let bX = pow(bU, 6, bW, 6, 6, HALFUP)
351- let bY = fraction(bB, parseIntValue(bK[2]), if ((bE == 0))
373+ let cg = valueOrElse(getInteger(bw()), -18820642)
374+ let ch = valueOrElse(getInteger(bt()), 50000)
375+ let ci = valueOrElse(getInteger(bv()), 1250000)
376+ let cj = valueOrElse(getInteger(bx(bQ)), 166666)
377+ let ck = ((cg - cj) + parseIntValue(bY[1]))
378+ let cl = pow(ci, 6, ck, 6, 6, HALFUP)
379+ let cm = fraction(bP, parseIntValue(bY[2]), if ((bS == 0))
352380 then B
353- else (bE * 100))
354- let bZ = ((C + bT) - bX)
355- if ((0 >= bZ))
356- then throw(("Net amount is non-positive, multiplier = " + toString(bZ)))
357- else {
358- let ca = fraction(bY, bZ, C)
359- let cb = if ((ca >= bY))
360- then 0
361- else (bY - ca)
362-[bY, ca, cb]
363- }
381+ else (bS * 100))
382+ let cn = ((C + ch) - cl)
383+ let co = fraction(cm, cn, C)
384+ let cp = if ((co >= cm))
385+ then 0
386+ else (cm - co)
387+[cm, co, cp]
364388 }
365389
366390
367-func cc (bu,bD,cd) = {
368- let bF = split(bD, "_")
369- func ce (bH,bI) = {
370- let cf = split(bI, A)
371- let aw = cf[0]
372- let cg = parseIntValue(cf[1])
373- let bv = parseIntValue(cf[2])
374- let ch = parseIntValue(cf[3])
375- if ((cd == 0))
391+func cq (bI,bR,cr) = {
392+ let bT = split(bR, "_")
393+ func cs (bV,bW) = {
394+ let ct = split(bW, A)
395+ let aK = ct[0]
396+ let cu = parseIntValue(ct[1])
397+ let bJ = parseIntValue(ct[2])
398+ let cv = parseIntValue(ct[3])
399+ if ((cr == 0))
376400 then throw("Attempt to burn neutrino at zero supply")
377401 else {
378- let ci = fraction(bu, ch, cd)
379- let cj = if ((aw == "WAVES"))
380- then $Tuple2(ci, bv)
381- else $Tuple2(bH._2, bH._3)
382- $Tuple3((bH._1 :+ $Tuple4(aw, ci, bv, cg)), cj._1, cj._2)
402+ let cw = fraction(bI, cv, cr)
403+ let cx = if ((aK == "WAVES"))
404+ then $Tuple2(cw, bJ)
405+ else $Tuple2(bV._2, bV._3)
406+ $Tuple3((bV._1 :+ $Tuple4(aK, cw, bJ, cu)), cx._1, cx._2)
383407 }
384408 }
385409
386- let bL = bF
387- let bM = size(bL)
388- let bN = $Tuple3(nil, 0, 0)
389- func bO (bP,bQ) = if ((bQ >= bM))
390- then bP
391- else ce(bP, bL[bQ])
410+ let bZ = bT
411+ let ca = size(bZ)
412+ let cb = $Tuple3(nil, 0, 0)
413+ func cc (cd,ce) = if ((ce >= ca))
414+ then cd
415+ else cs(cd, bZ[ce])
392416
393- func bR (bP,bQ) = if ((bQ >= bM))
394- then bP
417+ func cf (cd,ce) = if ((ce >= ca))
418+ then cd
395419 else throw("List size exceeds 10")
396420
397- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
421+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
398422 }
399423
400424
401-func ck (aX,cl) = throw(((("The specified amount in " + aX) + " swap is less than the required minimum of ") + toString(cl)))
425+func cy (bl,cz) = throw(((("The specified amount in " + bl) + " swap is less than the required minimum of ") + toString(cz)))
402426
403427
404-func cm () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
428+func cA () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
405429
406430
407-func cn (aI,co,cp,cq,cr) = throw(((((((((("invalid price history index: index=" + toString(aI)) + " priceIndex=") + toString(co)) + " indexHeight=") + toString(cp)) + " unlockHeight=") + toString(cq)) + " prevIndexHeight=") + toString(cr)))
431+func cB (aW,cC,cD,cE,cF) = throw(((((((((("invalid price history index: index=" + toString(aW)) + " priceIndex=") + toString(cC)) + " indexHeight=") + toString(cD)) + " unlockHeight=") + toString(cE)) + " prevIndexHeight=") + toString(cF)))
408432
409433
410-let cs = fromBase58String(g(al))
434+let cG = fromBase58String(g(az))
411435
412-let co = i(ad, aD)
436+let cC = i(ar, aR)
413437
414-let ct = k(ad, aE)
438+let cH = k(ar, aS)
415439
416-let cu = fromBase58String(g(ay))
440+let cI = fromBase58String(g(aM))
417441
418-let cv = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
442+let cJ = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
419443
420-let cw = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
444+let cK = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
421445
422-let cx = this
446+let cL = this
423447
424-let cy = i(ad, aC)
448+let cM = i(ar, aQ)
425449
426-func cz (cA) = {
427- let cB = 100000
428- let cC = 1000
429- let cD = bw(cB, cy)
430- let cE = (cD * 2)
431- let cF = fraction(cD, cC, 100)
432- let cG = value(cA.minSponsoredAssetFee)
433- if (if ((cG >= cE))
434- then (cF >= cG)
450+func cN (cO) = {
451+ let cP = 100000
452+ let cQ = 1000
453+ let cR = bK(cP, cM)
454+ let cS = (cR * 2)
455+ let cT = fraction(cR, cQ, 100)
456+ let cU = value(cO.minSponsoredAssetFee)
457+ if (if ((cU >= cS))
458+ then (cT >= cU)
435459 else false)
436- then (cA.assetId == cs)
460+ then (cO.assetId == cG)
437461 else false
438462 }
439463
440464
441-func cH (aG) = i(ad, aF(aG))
465+func cV (aU) = i(ar, aT(aU))
442466
443467
444-func cI (aI) = i(ad, aH(aI))
468+func cW (aW) = i(ar, aV(aW))
445469
446470
447-func cJ (br) = makeString(["%s%s%s", "paramByUser", br, "amount"], z)
471+func cX (bF) = makeString(["%s%s%s", "paramByUser", bF, "amount"], z)
448472
449473
450-let cK = 1
474+let cY = 1
451475
452-let cL = 2
476+let cZ = 2
453477
454-let cM = 3
478+let da = 3
455479
456-let cN = 7
480+let db = 7
457481
458-let cO = 8
482+let dc = 8
459483
460-let cP = 11
484+let dd = 11
461485
462-let cQ = 15
486+let de = 15
463487
464-let cR = 16
488+let df = 16
465489
466-let cS = 20
490+let dg = 20
467491
468-func cT (br,cU) = makeString(["%s%s", br, cU], z)
492+func dh (bF,di) = makeString(["%s%s", bF, di], z)
469493
470494
471-func cV (aX,cW,bB,bv,cX,cY,cZ,da,db,dc,dd,de,aI,df,dg,dh,di,dj,dk,bC) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s", aX, cW, bB, bv, cX, cY, cZ, da, db, dc, dd, de, aI, df, dg, dh, di, dj, dk, bC], z)
495+func dj (bl,dk,bP,bJ,dl,dm,dn,do,dp,dq,dr,ds,aW,dt,du,dv,dw,dx,dy,bQ) = makeString(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s", bl, dk, bP, bJ, dl, dm, dn, do, dp, dq, dr, ds, aW, dt, du, dv, dw, dx, dy, bQ], z)
472496
473497
474-func dl (aX,dm,dd,bC) = cV(aX, "PENDING", toString(dm), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dd), "0", "0", "NULL", "0", "0", "0", "0", "", bC)
498+func dz (bl,dA,dr,bQ) = dj(bl, "PENDING", toString(dA), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dr), "0", "0", "NULL", "0", "0", "0", "0", "", bQ)
475499
476500
477-func dn (do,bv,cX,cY,de,aI,df,di,dj,dk,bC) = cV(do[cK], "FINISHED", do[cM], toString(bv), toString(cX), toString(cY), do[cN], do[cO], toString(height), toString(lastBlock.timestamp), do[cP], toString(de), toString(aI), df, do[cQ], do[cR], toString(di), toString(dj), dk, bC)
501+func dB (dC,bJ,dl,dm,ds,aW,dt,dw,dx,dy,bQ) = dj(dC[cY], "FINISHED", dC[da], toString(bJ), toString(dl), toString(dm), dC[db], dC[dc], toString(height), toString(lastBlock.timestamp), dC[dd], toString(ds), toString(aW), dt, dC[de], dC[df], toString(dw), toString(dx), dy, bQ)
478502
479503
480-func dp (br,dq) = {
481- let dr = cT(br, dq)
482- split_4C(valueOrErrorMessage(getString(dr), ("no swap data for " + dr)), z)
504+func dD (bF,dE) = {
505+ let dF = dh(bF, dE)
506+ split_4C(valueOrErrorMessage(getString(dF), ("no swap data for " + dF)), z)
483507 }
484508
485509
486-func ds (dt,du,dv) = {
487- let cb = fraction(dt, dv, C)
488-[(dt - cb), cb]
510+func dG (dH,dI,dJ) = {
511+ let cp = fraction(dH, dJ, C)
512+[(dH - cp), cp]
489513 }
490514
491515
492-func dw (dx) = {
493- let dy = valueOrElse(getInteger(bg()), C)
494- let bT = valueOrElse(getInteger(bf()), 50000)
495- let dv = fraction(dy, bT, C)
496- func dz (bH,bI) = {
497- let cb = fraction(bI._2, dv, C)
498- (bH :+ makeString([bI._1, toString(bI._3), toString((bI._2 - cb)), toString(cb), toString(bI._4)], A))
516+func dK (dL) = {
517+ let dM = valueOrElse(getInteger(bu()), C)
518+ let ch = valueOrElse(getInteger(bt()), 50000)
519+ let dJ = fraction(dM, ch, C)
520+ func dN (bV,bW) = {
521+ let cp = fraction(bW._2, dJ, C)
522+ (bV :+ makeString([bW._1, toString(bW._3), toString((bW._2 - cp)), toString(cp), toString(bW._4)], A))
499523 }
500524
501- let dA = {
502- let bL = dx
503- let bM = size(bL)
504- let bN = nil
505- func bO (bP,bQ) = if ((bQ >= bM))
506- then bP
507- else dz(bP, bL[bQ])
525+ let dO = {
526+ let bZ = dL
527+ let ca = size(bZ)
528+ let cb = nil
529+ func cc (cd,ce) = if ((ce >= ca))
530+ then cd
531+ else dN(cd, bZ[ce])
508532
509- func bR (bP,bQ) = if ((bQ >= bM))
510- then bP
533+ func cf (cd,ce) = if ((ce >= ca))
534+ then cd
511535 else throw("List size exceeds 10")
512536
513- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
537+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
514538 }
515- makeString(dA, z)
539+ makeString(dO, z)
516540 }
517541
518542
519-func dB (dC) = if ((0 > dC))
520- then -(dC)
521- else dC
543+func dP (dQ) = if ((0 > dQ))
544+ then -(dQ)
545+ else dQ
522546
523547
524-func dD (dE) = {
525- let dF = ((wavesBalance(cx).available - dE) - aL())
526- let dG = f(aS(0))
527- let dH = f(aS(1))
528- let dI = (dF + dG)
529- let dJ = (dF + dH)
530- if (if ((dI > 0))
548+func dR (dS) = {
549+ let dT = ((wavesBalance(cL).available - dS) - aZ())
550+ let dU = f(bg(0))
551+ let dV = f(bg(1))
552+ let dW = (dT + dU)
553+ let dX = (dT + dV)
554+ if (if ((dW > 0))
531555 then true
532- else (dJ > 0))
556+ else (dX > 0))
533557 then {
534- let dK = dB((dI - dH))
535- let dL = dB((dJ - dG))
536- if ((dL >= dK))
537- then $Tuple2(0, dI)
538- else $Tuple2(1, dJ)
558+ let dY = dP((dW - dV))
559+ let dZ = dP((dX - dU))
560+ if ((dZ >= dY))
561+ then $Tuple2(0, dW)
562+ else $Tuple2(1, dX)
539563 }
540564 else $Tuple2(-1, 0)
541565 }
542566
543567
544-func dM (r) = if ((r.caller != this))
568+func ea (r) = if ((r.caller != this))
545569 then throw("Permission denied: this contract only allowed")
546570 else true
547571
548572
549-func dN (dE) = {
550- let dO = dD(dE)
551- let aP = dO._1
552- let dP = dO._2
553- if ((dP > 0))
573+func eb (dS) = {
574+ let ec = dR(dS)
575+ let bd = ec._1
576+ let ed = ec._2
577+ if ((ed > 0))
554578 then {
555- let dQ = aO(aP)
556- let dR = getBinary(this, dQ)
557- let dS = if (isDefined(dR))
558- then [LeaseCancel(value(dR))]
579+ let ee = bc(bd)
580+ let ef = getBinary(this, ee)
581+ let eg = if (isDefined(ef))
582+ then [LeaseCancel(value(ef))]
559583 else nil
560- let dT = aS(aP)
561- let dU = Lease(aK(aP), dP)
562- (dS ++ [dU, BinaryEntry(dQ, d(dU)), IntegerEntry(aS(aP), dP)])
584+ let eh = bg(bd)
585+ let ei = Lease(aY(bd), ed)
586+ (eg ++ [ei, BinaryEntry(ee, d(ei)), IntegerEntry(bg(bd), ed)])
563587 }
564588 else nil
565589 }
566590
567591
568-func dV (dW) = {
569- let aR = aK(dW)
570- let dX = aS(dW)
571- let dY = f(dX)
572- let dZ = aO(dW)
573- let ea = value(getBinary(this, dZ))
574- $Tuple5(aR, dX, dY, dZ, ea)
592+func ej (ek) = {
593+ let bf = aY(ek)
594+ let el = bg(ek)
595+ let em = f(el)
596+ let en = bc(ek)
597+ let eo = value(getBinary(this, en))
598+ $Tuple5(bf, el, em, en, eo)
575599 }
576600
577601
578-func eb (aX,ec,bC,ed,ee) = {
579- let ef = x(invoke(this, "swapParamsByUserSYSREADONLY", [ed, 0], nil))
580- let eg = ef._2
581- let eh = ef._3
582- let ei = ef._6
583- let ej = ef._7
584- let cl = bk(aX, bC)
585- let ek = bm(aX, bC)
586- let el = bn(aX, ed, bC)
587- let aR = aJ(0)
588- let em = cH(cI(co))
589- let en = (aR == ed)
590- let eo = if (en)
591- then bp()
592- else bo(aX)
593- let dd = (height + eo)
594- let ep = if ((aX == "outNeutrino"))
595- then bw(ec, em)
596- else ec
597- let eq = if ((aX == "outNeutrino"))
598- then bw(ei, em)
599- else ej
600- if ((cl > ec))
601- then ck(aX, cl)
602- else if (if (!(en))
603- then (eg > 0)
602+func ep (bl,eq,bQ,er,es) = {
603+ let et = x(invoke(this, "swapParamsByUserSYSREADONLY", [er, 0], nil))
604+ let eu = et._2
605+ let ev = et._3
606+ let ew = et._6
607+ let ex = et._7
608+ let cz = by(bl, bQ)
609+ let ey = bA(bl, bQ)
610+ let ez = bB(bl, er, bQ)
611+ let bf = aX(0)
612+ let eA = cV(cW(cC))
613+ let eB = (bf == er)
614+ let eC = if (eB)
615+ then bD()
616+ else bC(bl)
617+ let dr = (height + eC)
618+ let eD = if ((bl == "outNeutrino"))
619+ then bK(eq, eA)
620+ else eq
621+ let eE = if ((bl == "outNeutrino"))
622+ then bK(ew, eA)
623+ else ex
624+ if ((cz > eq))
625+ then cy(bl, cz)
626+ else if (if (!(eB))
627+ then (eu > 0)
604628 else false)
605- then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + eh))))
606- else if (if (!(en))
607- then (ep > eq)
629+ then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + ev))))
630+ else if (if (!(eB))
631+ then (eD > eE)
608632 else false)
609- then throw(((("You have exceeded your swap limit! Requested: " + toString(ep)) + ", available: ") + toString(eq)))
610- else if (ct)
611- then cm()
633+ then throw(((("You have exceeded your swap limit! Requested: " + toString(eD)) + ", available: ") + toString(eE)))
634+ else if (cH)
635+ then cA()
612636 else {
613- let er = if (if ((aX == "outNeutrino"))
614- then (bC == "WAVES")
637+ let eF = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
638+ let bT = o(eF[U])
639+ let eG = q(eF[V])
640+ let eH = bO(eq, bQ, bT, eG)
641+ if (if ((bl == "outNeutrino"))
642+ then (0 >= eH[1])
615643 else false)
616- then dN(0)
617- else nil
618- $Tuple2(([IntegerEntry(bq(ed), ep), IntegerEntry(bs(ed), height), IntegerEntry(aZ(aX, ed, bC), (el + ec)), IntegerEntry(aM(ed), dd), IntegerEntry(aY(aX, bC), (ek + ec)), StringEntry(cT(ed, ee), dl(aX, ec, dd, bC))] ++ er), unit)
644+ then throw((((((("Net amount is non-positive, cannot swap. (gross, net, fee) = (" + toString(eH[0])) + ", ") + toString(eH[1])) + ", ") + toString(eH[2])) + ")"))
645+ else {
646+ let eI = if (if ((bl == "outNeutrino"))
647+ then (bQ == "WAVES")
648+ else false)
649+ then eb(0)
650+ else nil
651+ $Tuple2(([IntegerEntry(bE(er), eD), IntegerEntry(bG(er), height), IntegerEntry(bn(bl, er, bQ), (ez + eq)), IntegerEntry(ba(er), dr), IntegerEntry(bm(bl, bQ), (ey + eq)), StringEntry(dh(er, es), dz(bl, eq, dr, bQ))] ++ eI), unit)
652+ }
619653 }
620654 }
621655
622-
623-let es = 0
624-
625-let et = 1
626-
627-let eu = 2
628-
629-let ev = 3
630-
631-let ew = 4
632-
633-let ex = 5
634-
635-let ey = 6
636-
637-let ez = 7
638-
639-let eA = 8
640-
641-let eB = 9
642-
643-let eC = 10
644-
645-let eD = 11
646-
647-let eE = 12
648-
649-let eF = 13
650-
651-let eG = 14
652-
653-let eH = 15
654-
655-let eI = 16
656656
657657 let eJ = 0
658658
659659 let eK = 1
660660
661661 let eL = 2
662662
663663 let eM = 3
664664
665665 let eN = 4
666666
667667 let eO = 5
668668
669669 let eP = 6
670670
671671 let eQ = 7
672672
673673 let eR = 8
674674
675675 let eS = 9
676676
677677 let eT = 10
678678
679-func eU (bB,bC,bF,eV) = {
680- let eW = bA(bB, bC, bF, eV)
681- $Tuple12(eW[0], cs, 0, bC, 0, eV, bB, 0, 0, 0, nil, [eW[1], eW[2]])
679+func eU (bP,bQ,bT,eG) = {
680+ let eV = bO(bP, bQ, bT, eG)
681+ $Tuple12(eV[0], cG, 0, bQ, 0, eG, bP, 0, 0, 0, nil, [eV[1], eV[2]])
682682 }
683683
684684
685-func eX (eY,bF,dj,eZ,cd) = {
686- let fa = valueOrElse(getInteger(this, bd()), E)
687- let fb = if ((fa >= dj))
685+func eW (eX,bT,dx,eY,cr) = {
686+ let eZ = valueOrElse(getInteger(this, br()), E)
687+ let fa = if ((eZ >= dx))
688688 then 0
689- else fraction((eZ - fraction(fa, cd, C)), C, (C - fa))
690- let fc = if ((eY > fb))
691- then fb
692- else eY
693- let fd = if ((eY > fb))
694- then fraction((eY - fb), dj, C)
689+ else fraction((eY - fraction(eZ, cr, C)), C, (C - eZ))
690+ let fb = if ((eX > fa))
691+ then fa
692+ else eX
693+ let fc = if ((eX > fa))
694+ then fraction((eX - fa), dx, C)
695695 else 0
696- let fe = (fc + fd)
697- let ff = (eY - fe)
698- let fg = cc(fe, bF, cd)
699- $Tuple12(fg._2, unit, ff, cs, fg._2, fg._3, fe, fb, fc, fd, fg._1, nil)
696+ let fd = (fb + fc)
697+ let fe = (eX - fd)
698+ let ff = cq(fd, bT, cr)
699+ $Tuple12(ff._2, unit, fe, cG, ff._2, ff._3, fd, fa, fb, fc, ff._1, nil)
700700 }
701701
702702
703-func fh (aX,bB,bv,fi,bC) = {
704- let fa = valueOrElse(getInteger(this, bd()), E)
705- let fj = q(fi[eA])
706- let fk = q(fi[eI])
707- let cd = q(fi[ex])
708- let bF = o(fi[eG])
709- let eV = q(fi[eH])
710- let fl = if ((aX == "outNeutrino"))
711- then eU(bB, bC, bF, eV)
712- else if ((aX == "outMulti"))
713- then eX(bB, bF, fj, fk, cd)
714- else throw(("Unsupported swap type " + aX))
715- let fg = fl._1
716- let fm = fl._2
717- let fn = fl._3
718- let fo = fl._4
719- let fp = fl._5
720- let fq = fl._6
721- let dk = fl._11
722- let fr = fl._12
723- let fs = if ((aX == "outNeutrino"))
724- then fr[0]
703+func fg (bl,bP,bJ,eF,bQ) = {
704+ let eZ = valueOrElse(getInteger(this, br()), E)
705+ let fh = q(eF[O])
706+ let fi = q(eF[W])
707+ let cr = q(eF[L])
708+ let bT = o(eF[U])
709+ let eG = q(eF[V])
710+ let fj = if ((bl == "outNeutrino"))
711+ then eU(bP, bQ, bT, eG)
712+ else if ((bl == "outMulti"))
713+ then eW(bP, bT, fh, fi, cr)
714+ else throw(("Unsupported swap type " + bl))
715+ let ff = fj._1
716+ let fk = fj._2
717+ let fl = fj._3
718+ let fm = fj._4
719+ let fn = fj._5
720+ let fo = fj._6
721+ let dy = fj._11
722+ let fp = fj._12
723+ let fq = if ((bl == "outNeutrino"))
724+ then fp[0]
725725 else 0
726- let ft = if ((aX == "outNeutrino"))
727- then fr[1]
726+ let fr = if ((bl == "outNeutrino"))
727+ then fp[1]
728728 else 0
729- let di = if ((0 >= fn))
729+ let dw = if ((0 >= fl))
730730 then 0
731- else q(l(invoke(ae, "surfFunctionREADONLY", [fn, fo], nil))[eJ])
732- let fu = if ((aX == "outMulti"))
733- then dw(dk)
731+ else q(l(invoke(as, "surfFunctionREADONLY", [fl, fm], nil))[eJ])
732+ let fs = if ((bl == "outMulti"))
733+ then dK(dy)
734734 else ""
735- $Tuple9(fs, fm, di, fn, fp, ft, fg, fq, fu)
735+ $Tuple9(fq, fk, dw, fl, fn, fr, ff, fo, fs)
736736 }
737737
738738
739-func fv () = "%s__applyInProgress"
739+func ft () = "%s__applyInProgress"
740740
741741
742-func fw (fx) = ("%s%d__proposalData__" + toString(fx))
742+func fu (fv) = ("%s%d__proposalData__" + toString(fv))
743743
744744
745-let fy = 9
745+let fw = 9
746746
747-func fz (cA) = {
748- let n = cA
747+func fx (cO) = {
748+ let n = cO
749749 if ($isInstanceOf(n, "Order"))
750750 then {
751- let fA = n
751+ let fy = n
752752 throw("Orders aren't allowed")
753753 }
754754 else if (if ($isInstanceOf(n, "DataTransaction"))
755755 then true
756756 else if ($isInstanceOf(n, "SponsorFeeTransaction"))
757757 then true
758758 else if ($isInstanceOf(n, "SetScriptTransaction"))
759759 then true
760760 else if ($isInstanceOf(n, "CreateAliasTransaction"))
761761 then true
762762 else if ($isInstanceOf(n, "LeaseCancelTransaction"))
763763 then true
764764 else if ($isInstanceOf(n, "LeaseTransaction"))
765765 then true
766766 else if ($isInstanceOf(n, "IssueTransaction"))
767767 then true
768768 else if ($isInstanceOf(n, "InvokeExpressionTransaction"))
769769 then true
770770 else if ($isInstanceOf(n, "UpdateAssetInfoTransaction"))
771771 then true
772772 else if ($isInstanceOf(n, "InvokeScriptTransaction"))
773773 then true
774774 else if ($isInstanceOf(n, "SetAssetScriptTransaction"))
775775 then true
776776 else if ($isInstanceOf(n, "TransferTransaction"))
777777 then true
778778 else if ($isInstanceOf(n, "ExchangeTransaction"))
779779 then true
780780 else if ($isInstanceOf(n, "MassTransferTransaction"))
781781 then true
782782 else if ($isInstanceOf(n, "BurnTransaction"))
783783 then true
784784 else $isInstanceOf(n, "ReissueTransaction"))
785785 then {
786- let fB = n
787- let cU = toBase58String(fB.id)
788- let fx = valueOrErrorMessage(getInteger(ak, fv()), "Apply is not happening")
789- let fC = split(split(a(ak, fw(fx)), z)[fy], A)
790- if (!(isDefined(indexOf(fC, cU))))
791- then throw(((("Unknown txId: " + cU) + " for proposalId=") + toString(fx)))
786+ let fz = n
787+ let di = toBase58String(fz.id)
788+ let fv = valueOrErrorMessage(getInteger(ay, ft()), "Apply is not happening")
789+ let fA = split(split(a(ay, fu(fv)), z)[fw], A)
790+ if (!(isDefined(indexOf(fA, di))))
791+ then throw(((("Unknown txId: " + di) + " for proposalId=") + toString(fv)))
792792 else true
793793 }
794794 else throw("Match error")
795795 }
796796
797797
798798 @Callable(r)
799-func constructorV1 (fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM,fN,fO) = {
800- let fP = dM(r)
801- if ((fP == fP))
799+func constructorV1 (fB,fC,fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM) = {
800+ let fN = ea(r)
801+ if ((fN == fN))
802802 then if ((size(r.payments) != 0))
803803 then throw("no payments allowed")
804- else [StringEntry(al, fD), StringEntry(am, fE), StringEntry(an, fF), StringEntry(ap, fG), StringEntry(aq, fH), StringEntry(ay, fI), IntegerEntry(at, fJ), IntegerEntry(au, fK), IntegerEntry(av("WAVES"), fL), IntegerEntry(ax, fM), IntegerEntry(az, fN), IntegerEntry(aA, fO)]
804+ else [StringEntry(az, fB), StringEntry(aA, fC), StringEntry(aB, fD), StringEntry(aD, fE), StringEntry(aE, fF), StringEntry(aM, fG), IntegerEntry(aH, fH), IntegerEntry(aI, fI), IntegerEntry(aJ("WAVES"), fJ), IntegerEntry(aL, fK), IntegerEntry(aN, fL), IntegerEntry(aO, fM)]
805805 else throw("Strict value is not equal to itself.")
806806 }
807807
808808
809809
810810 @Callable(r)
811-func constructorV2 (ae,af,fQ) = {
812- let fP = dM(r)
813- if ((fP == fP))
811+func constructorV2 (as,at,fO) = {
812+ let fN = ea(r)
813+ if ((fN == fN))
814814 then if ((size(r.payments) != 0))
815815 then throw("no payments allowed")
816- else [StringEntry(as, ae), StringEntry(ao, af), IntegerEntry(bc(), fQ)]
816+ else [StringEntry(aG, as), StringEntry(aC, at), IntegerEntry(bq(), fO)]
817817 else throw("Strict value is not equal to itself.")
818818 }
819819
820820
821821
822822 @Callable(r)
823-func constructorV3 (fR,fS,fT,fU,fV) = {
824- let fP = dM(r)
825- if ((fP == fP))
823+func constructorV3 (fP,fQ,fR,fS,fT) = {
824+ let fN = ea(r)
825+ if ((fN == fN))
826826 then if ((size(r.payments) != 0))
827827 then throw("no payments allowed")
828828 else {
829- func fW (bH,bI) = {
830- let cf = split(bI, "_")
831- let aw = cf[0]
832- let fX = parseIntValue(cf[1])
833- let fY = parseIntValue(cf[2])
834- $Tuple2((bH._1 :+ aw), ((bH._2 :+ IntegerEntry(bj(aw), fX)) :+ IntegerEntry(av(aw), fY)))
829+ func fU (bV,bW) = {
830+ let ct = split(bW, "_")
831+ let aK = ct[0]
832+ let fV = parseIntValue(ct[1])
833+ let fW = parseIntValue(ct[2])
834+ $Tuple2((bV._1 :+ aK), ((bV._2 :+ IntegerEntry(bx(aK), fV)) :+ IntegerEntry(aJ(aK), fW)))
835835 }
836836
837- let fZ = {
838- let bL = fR
839- let bM = size(bL)
840- let bN = $Tuple2(nil, nil)
841- func bO (bP,bQ) = if ((bQ >= bM))
842- then bP
843- else fW(bP, bL[bQ])
837+ let fX = {
838+ let bZ = fP
839+ let ca = size(bZ)
840+ let cb = $Tuple2(nil, nil)
841+ func cc (cd,ce) = if ((ce >= ca))
842+ then cd
843+ else fU(cd, bZ[ce])
844844
845- func bR (bP,bQ) = if ((bQ >= bM))
846- then bP
845+ func cf (cd,ce) = if ((ce >= ca))
846+ then cd
847847 else throw("List size exceeds 10")
848848
849- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
849+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
850850 }
851- (((((fZ._2 :+ IntegerEntry(bf(), fS)) :+ IntegerEntry(bg(), fT)) :+ IntegerEntry(bh(), fU)) :+ IntegerEntry(bi(), log(fU, 6, fV, 6, 6, HALFUP))) :+ StringEntry(be(), makeString(fZ._1, z)))
851+ (((((fX._2 :+ IntegerEntry(bt(), fQ)) :+ IntegerEntry(bu(), fR)) :+ IntegerEntry(bv(), fS)) :+ IntegerEntry(bw(), log(fT, 6, fS, 6, 6, HALFUP))) :+ StringEntry(bs(), makeString(fX._1, z)))
852852 }
853853 else throw("Strict value is not equal to itself.")
854854 }
855855
856856
857857
858858 @Callable(r)
859859 func swapTokenToNeutrino () = if ((size(r.payments) != 1))
860860 then throw("swapTokenToNeutrino require only one payment")
861861 else {
862- let ga = value(r.payments[0])
863- let gb = valueOrElse(getString(be()), "WAVES")
864- let gc = toBase58String(valueOrElse(ga.assetId, F))
865- if (!(contains(gb, gc)))
866- then throw(((gc + " is not one of basket tokens:") + gb))
862+ let fY = value(r.payments[0])
863+ let fZ = valueOrElse(getString(bs()), "WAVES")
864+ let ga = toBase58String(valueOrElse(fY.assetId, F))
865+ if (!(contains(fZ, ga)))
866+ then throw(((ga + " is not one of basket tokens:") + fZ))
867867 else {
868- let br = toString(r.caller)
869- let ee = toBase58String(r.transactionId)
870- eb("outNeutrino", ga.amount, gc, br, ee)
868+ let bF = toString(r.caller)
869+ let es = toBase58String(r.transactionId)
870+ ep("outNeutrino", fY.amount, ga, bF, es)
871871 }
872872 }
873873
874874
875875
876876 @Callable(r)
877877 func swapNeutrinoToBasket () = if ((size(r.payments) != 1))
878878 then throw("swapNeutrinoToBasket require only one payment")
879879 else {
880- let ga = value(r.payments[0])
881- if ((ga.assetId != cs))
880+ let fY = value(r.payments[0])
881+ if ((fY.assetId != cG))
882882 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
883883 else {
884- let br = toString(r.caller)
885- let ee = toBase58String(r.transactionId)
886- eb("outMulti", ga.amount, toBase58String(cs), br, ee)
884+ let bF = toString(r.caller)
885+ let es = toBase58String(r.transactionId)
886+ ep("outMulti", fY.amount, toBase58String(cG), bF, es)
887887 }
888888 }
889889
890890
891891
892892 @Callable(r)
893-func withdraw (gd,aI,dq) = {
894- let cU = toBase58String(r.transactionId)
893+func withdraw (gb,aW,dE) = {
894+ let di = toBase58String(r.transactionId)
895895 if ((size(r.payments) != 0))
896896 then throw("no payments allowed")
897897 else {
898- let fi = l(invoke(ae, "calcNeutinoMetricsREADONLY", nil, nil))
899- let fj = q(fi[eA])
900- let br = addressFromStringValue(gd)
901- let do = dp(gd, dq)
902- let dd = parseIntValue(do[cP])
903- let aX = do[cK]
904- let bB = parseIntValue(do[cM])
905- let ge = do[cL]
906- let cZ = parseIntValue(do[cN])
907- let bC = do[cS]
908- let ek = bm(aX, bC)
909- let el = bn(aX, gd, bC)
910- let cq = dd
911- let cp = cI(aI)
912- let cr = cI((aI - 1))
913- let em = cH(cp)
914- if (ct)
915- then cm()
916- else if ((ge != "PENDING"))
898+ let eF = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
899+ let fh = q(eF[O])
900+ let bF = addressFromStringValue(gb)
901+ let dC = dD(gb, dE)
902+ let dr = parseIntValue(dC[dd])
903+ let bl = dC[cY]
904+ let bP = parseIntValue(dC[da])
905+ let gc = dC[cZ]
906+ let dn = parseIntValue(dC[db])
907+ let bQ = dC[dg]
908+ let ey = bA(bl, bQ)
909+ let ez = bB(bl, gb, bQ)
910+ let cE = dr
911+ let cD = cW(aW)
912+ let cF = cW((aW - 1))
913+ let eA = cV(cD)
914+ if (cH)
915+ then cA()
916+ else if ((gc != "PENDING"))
917917 then throw("swap has been already processed")
918- else if ((cq > height))
919- then throw((("please wait for: " + toString(cq)) + " block height to withdraw funds"))
920- else if (if (if ((aI > co))
918+ else if ((cE > height))
919+ then throw((("please wait for: " + toString(cE)) + " block height to withdraw funds"))
920+ else if (if (if ((aW > cC))
921921 then true
922- else (cq > cp))
922+ else (cE > cD))
923923 then true
924- else if ((cr != 0))
925- then (cr >= cq)
924+ else if ((cF != 0))
925+ then (cF >= cE)
926926 else false)
927- then cn(aI, co, cp, cq, cr)
927+ then cB(aW, cC, cD, cE, cF)
928928 else {
929- let gf = fh(aX, bB, em, fi, bC)
930- let cX = gf._1
931- let fm = gf._2
932- let di = gf._3
933- let fp = gf._5
934- let cY = gf._6
935- let fg = gf._7
936- let fq = gf._8
937- let fu = gf._9
938- if ((0 >= fg))
929+ let gd = fg(bl, bP, eA, eF, bQ)
930+ let dl = gd._1
931+ let fk = gd._2
932+ let dw = gd._3
933+ let fn = gd._5
934+ let dm = gd._6
935+ let ff = gd._7
936+ let fo = gd._8
937+ let fs = gd._9
938+ if ((0 >= ff))
939939 then throw("balance equals zero")
940940 else {
941- let gg = if ((di > 0))
941+ let ge = if ((dw > 0))
942942 then {
943- let gh = invoke(ai, "issueSurf", [di, gd], nil)
944- if ((gh == gh))
943+ let gf = invoke(aw, "issueSurf", [dw, gb], nil)
944+ if ((gf == gf))
945945 then 0
946946 else throw("Strict value is not equal to itself.")
947947 }
948948 else 0
949- if ((gg == gg))
949+ if ((ge == ge))
950950 then {
951- let gi = invoke(this, "internalUnleaseAndLease", [fp], nil)
952- if ((gi == gi))
951+ let gg = invoke(this, "internalUnleaseAndLease", [fn], nil)
952+ if ((gg == gg))
953953 then {
954- let gj = l(invoke(ah, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
955- let gk = q(gj[1])
956- let gl = q(l(gj[3])[3])
957- let gm = [IntegerEntry(aZ(aX, gd, bC), (el - bB)), IntegerEntry(aY(aX, bC), (ek - bB)), StringEntry(cT(gd, dq), dn(do, fq, cX, cY, cq, aI, cU, di, fj, fu, bC))]
958- if ((aX == "outMulti"))
954+ let gh = l(invoke(av, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
955+ let gi = q(gh[1])
956+ let gj = q(l(gh[3])[3])
957+ let gk = [IntegerEntry(bn(bl, gb, bQ), (ez - bP)), IntegerEntry(bm(bl, bQ), (ey - bP)), StringEntry(dh(gb, dE), dB(dC, fo, dl, dm, cE, aW, di, dw, fh, fs, bQ))]
958+ if ((bl == "outMulti"))
959959 then {
960- let gn = split(fu, "_")
961- func go (bH,bI) = {
962- let bK = split(bI, A)
963- let gp = fromBase58String(bK[0])
964- let aw = if ((gp == F))
960+ let gl = split(fs, "_")
961+ func gm (bV,bW) = {
962+ let bY = split(bW, A)
963+ let gn = fromBase58String(bY[0])
964+ let aK = if ((gn == F))
965965 then unit
966- else gp
967- let ca = parseIntValue(bK[2])
968- let cb = parseIntValue(bK[3])
969- let gq = if ((gk != 0))
970- then fraction(cb, gl, gk)
966+ else gn
967+ let co = parseIntValue(bY[2])
968+ let cp = parseIntValue(bY[3])
969+ let go = if ((gi != 0))
970+ then fraction(cp, gj, gi)
971971 else 0
972- let gr = if ((gk != 0))
973- then fraction(cb, (C - fj), C)
972+ let gp = if ((gi != 0))
973+ then fraction(cp, (C - fh), C)
974974 else 0
975- let gs = max([gq, gr])
976- let gt = (cb - gs)
977- $Tuple5((bH._1 :+ ScriptTransfer(br, ca, aw)), (bH._2 :+ AttachedPayment(aw, gs)), (bH._3 :+ AttachedPayment(aw, gt)), (bH._4 + gs), (bH._5 + gt))
975+ let gq = max([go, gp])
976+ let gr = (cp - gq)
977+ $Tuple5((bV._1 :+ ScriptTransfer(bF, co, aK)), (bV._2 :+ AttachedPayment(aK, gq)), (bV._3 :+ AttachedPayment(aK, gr)), (bV._4 + gq), (bV._5 + gr))
978978 }
979979
980- let fZ = {
981- let bL = gn
982- let bM = size(bL)
983- let bN = $Tuple5(nil, nil, nil, 0, 0)
984- func bO (bP,bQ) = if ((bQ >= bM))
985- then bP
986- else go(bP, bL[bQ])
980+ let fX = {
981+ let bZ = gl
982+ let ca = size(bZ)
983+ let cb = $Tuple5(nil, nil, nil, 0, 0)
984+ func cc (cd,ce) = if ((ce >= ca))
985+ then cd
986+ else gm(cd, bZ[ce])
987987
988- func bR (bP,bQ) = if ((bQ >= bM))
989- then bP
988+ func cf (cd,ce) = if ((ce >= ca))
989+ then cd
990990 else throw("List size exceeds 10")
991991
992- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
992+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
993993 }
994- let gu = if ((fZ._4 > 0))
994+ let gs = if ((fX._4 > 0))
995995 then {
996- let gv = invoke(ag, "deposit", nil, fZ._2)
997- if ((gv == gv))
996+ let gt = invoke(au, "deposit", nil, fX._2)
997+ if ((gt == gt))
998998 then 0
999999 else throw("Strict value is not equal to itself.")
10001000 }
10011001 else 0
1002- if ((gu == gu))
1002+ if ((gs == gs))
10031003 then {
1004- let gw = if ((fZ._5 > 0))
1004+ let gu = if ((fX._5 > 0))
10051005 then {
1006- let gx = invoke(af, "deposit", nil, fZ._3)
1007- if ((gx == gx))
1006+ let gv = invoke(at, "deposit", nil, fX._3)
1007+ if ((gv == gv))
10081008 then 0
10091009 else throw("Strict value is not equal to itself.")
10101010 }
10111011 else 0
1012- if ((gw == gw))
1013- then (gm ++ fZ._1)
1012+ if ((gu == gu))
1013+ then (gk ++ fX._1)
10141014 else throw("Strict value is not equal to itself.")
10151015 }
10161016 else throw("Strict value is not equal to itself.")
10171017 }
10181018 else {
1019- let gy = AttachedPayment(fm, cY)
1020- let gz = if ((gk != 0))
1021- then fraction(gy.amount, gl, gk)
1019+ let gw = AttachedPayment(fk, dm)
1020+ let gx = if ((gi != 0))
1021+ then fraction(gw.amount, gj, gi)
10221022 else 0
1023- let gA = if ((gk != 0))
1024- then fraction(gy.amount, (C - fj), C)
1023+ let gy = if ((gi != 0))
1024+ then fraction(gw.amount, (C - fh), C)
10251025 else 0
1026- let gB = max([gz, gA])
1027- let gC = (gy.amount - gB)
1028- let gu = if ((gB > 0))
1026+ let gz = max([gx, gy])
1027+ let gA = (gw.amount - gz)
1028+ let gs = if ((gz > 0))
10291029 then {
1030- let gv = invoke(ag, "deposit", nil, [AttachedPayment(gy.assetId, gB)])
1031- if ((gv == gv))
1030+ let gt = invoke(au, "deposit", nil, [AttachedPayment(gw.assetId, gz)])
1031+ if ((gt == gt))
10321032 then nil
10331033 else throw("Strict value is not equal to itself.")
10341034 }
10351035 else nil
1036- if ((gu == gu))
1036+ if ((gs == gs))
10371037 then {
1038- let gw = if ((gC > 0))
1038+ let gu = if ((gA > 0))
10391039 then {
1040- let gx = invoke(af, "deposit", nil, [AttachedPayment(gy.assetId, gC)])
1041- if ((gx == gx))
1040+ let gv = invoke(at, "deposit", nil, [AttachedPayment(gw.assetId, gA)])
1041+ if ((gv == gv))
10421042 then nil
10431043 else throw("Strict value is not equal to itself.")
10441044 }
10451045 else nil
1046- if ((gw == gw))
1047- then (gm :+ ScriptTransfer(br, cX, fm))
1046+ if ((gu == gu))
1047+ then (gk :+ ScriptTransfer(bF, dl, fk))
10481048 else throw("Strict value is not equal to itself.")
10491049 }
10501050 else throw("Strict value is not equal to itself.")
10511051 }
10521052 }
10531053 else throw("Strict value is not equal to itself.")
10541054 }
10551055 else throw("Strict value is not equal to itself.")
10561056 }
10571057 }
10581058 }
10591059 }
10601060
10611061
10621062
10631063 @Callable(r)
1064-func internalUnleaseAndLease (dE) = if ((r.caller != this))
1064+func internalUnleaseAndLease (dS) = if ((r.caller != this))
10651065 then throw("internalUnleaseAndLease is not public method")
1066- else dN(dE)
1066+ else eb(dS)
10671067
10681068
10691069
10701070 @Callable(r)
1071-func transferUsdnToUser (bu,gD) = if ((r.caller != ai))
1071+func transferUsdnToUser (bI,gB) = if ((r.caller != aw))
10721072 then throw("Only auction contract is authorized")
1073- else [ScriptTransfer(addressFromStringValue(gD), bu, cs)]
1073+ else [ScriptTransfer(addressFromStringValue(gB), bI, cG)]
10741074
10751075
10761076
10771077 @Callable(r)
1078-func acceptWaves () = if (if ((r.caller != ai))
1079- then (r.caller != ak)
1078+func acceptWaves () = if (if ((r.caller != aw))
1079+ then (r.caller != ay)
10801080 else false)
10811081 then throw("Currently only auction and governance contracts are allowed to call")
1082- else $Tuple2(dN(0), "success")
1082+ else $Tuple2(eb(0), "success")
10831083
10841084
10851085
10861086 @Callable(r)
1087-func approveLeasings (gE,aV,gF) = {
1088- let gG = [0, 1, 2, 3, 4, 5, 6, 7]
1089- let gH = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1090- let gI = fromBase58String(gH)
1091- let gJ = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1092- let gK = addressFromStringValue(gJ)
1093- let gL = aU(aV)
1094- let gM = getString(this, gL)
1095- if (isDefined(gM))
1096- then throw((("group " + toString(aV)) + " already initialized"))
1087+func approveLeasings (gC,bj,gD) = {
1088+ let gE = [0, 1, 2, 3, 4, 5, 6, 7]
1089+ let gF = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1090+ let gG = fromBase58String(gF)
1091+ let gH = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1092+ let gI = addressFromStringValue(gH)
1093+ let gJ = bi(bj)
1094+ let gK = getString(this, gJ)
1095+ if (isDefined(gK))
1096+ then throw((("group " + toString(bj)) + " already initialized"))
10971097 else {
1098- let gN = split(gE, z)
1099- let gO = size(gG)
1100- if ((r.callerPublicKey != gI))
1098+ let gL = split(gC, z)
1099+ let gM = size(gE)
1100+ if ((r.callerPublicKey != gG))
11011101 then throw("approveLeasings not authorized")
11021102 else {
1103- let gP = dV(0)
1104- let gQ = gP._1
1105- let gR = gP._2
1106- let gS = gP._3
1107- let gT = gP._4
1108- let gU = gP._5
1109- let gV = Lease(gQ, (gS - (gF * gO)))
1110- let gW = invoke(gK, "validateAndApproveLeasings", [gE], nil)
1111- if ((gW == gW))
1103+ let gN = ej(0)
1104+ let gO = gN._1
1105+ let gP = gN._2
1106+ let gQ = gN._3
1107+ let gR = gN._4
1108+ let gS = gN._5
1109+ let gT = Lease(gO, (gQ - (gD * gM)))
1110+ let gU = invoke(gI, "validateAndApproveLeasings", [gC], nil)
1111+ if ((gU == gU))
11121112 then {
1113- func gX (dA,r) = {
1114- let gY = gN[r]
1115- let gZ = Lease(addressFromStringValue(gY), gF)
1116- (dA ++ [gZ, BinaryEntry(aQ(gY), d(gZ)), IntegerEntry(aT(gY), gF)])
1113+ func gV (dO,r) = {
1114+ let gW = gL[r]
1115+ let gX = Lease(addressFromStringValue(gW), gD)
1116+ (dO ++ [gX, BinaryEntry(be(gW), d(gX)), IntegerEntry(bh(gW), gD)])
11171117 }
11181118
1119- ([StringEntry(gL, gE), BinaryEntry(gT, d(gV)), IntegerEntry(gR, gV.amount), LeaseCancel(gU), gV] ++ {
1120- let bL = gG
1121- let bM = size(bL)
1122- let bN = nil
1123- func bO (bP,bQ) = if ((bQ >= bM))
1124- then bP
1125- else gX(bP, bL[bQ])
1119+ ([StringEntry(gJ, gC), BinaryEntry(gR, d(gT)), IntegerEntry(gP, gT.amount), LeaseCancel(gS), gT] ++ {
1120+ let bZ = gE
1121+ let ca = size(bZ)
1122+ let cb = nil
1123+ func cc (cd,ce) = if ((ce >= ca))
1124+ then cd
1125+ else gV(cd, bZ[ce])
11261126
1127- func bR (bP,bQ) = if ((bQ >= bM))
1128- then bP
1127+ func cf (cd,ce) = if ((ce >= ca))
1128+ then cd
11291129 else throw("List size exceeds 8")
11301130
1131- bR(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1131+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8)
11321132 })
11331133 }
11341134 else throw("Strict value is not equal to itself.")
11351135 }
11361136 }
11371137 }
11381138
11391139
11401140
11411141 @Callable(r)
1142-func rebalanceLeasings (bu,aV) = {
1143- let gG = [0, 1, 2, 3, 4, 5, 6, 7]
1144- let gH = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1145- let gI = fromBase58String(gH)
1146- let gL = aU(aV)
1147- let gE = a(this, gL)
1148- let gN = split(gE, z)
1149- if ((r.callerPublicKey != gI))
1142+func rebalanceLeasings (bI,bj) = {
1143+ let gE = [0, 1, 2, 3, 4, 5, 6, 7]
1144+ let gF = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1145+ let gG = fromBase58String(gF)
1146+ let gJ = bi(bj)
1147+ let gC = a(this, gJ)
1148+ let gL = split(gC, z)
1149+ if ((r.callerPublicKey != gG))
11501150 then throw("rebalanceLeasings not authorized")
11511151 else {
1152- let fp = ((bu / size(gN)) + 1)
1153- let ha = dV(0)
1154- let gQ = ha._1
1155- let gR = ha._2
1156- let gS = ha._3
1157- let gT = ha._4
1158- let gU = ha._5
1159- let gV = Lease(gQ, (gS + (fp * size(gN))))
1160- func hb (dA,r) = {
1161- let gY = gN[r]
1162- let hc = aQ(gY)
1163- let hd = getBinaryValue(this, hc)
1164- let he = aT(gY)
1165- let gF = getIntegerValue(this, he)
1166- let hf = LeaseCancel(value(hd))
1167- let gZ = Lease(addressFromStringValue(gY), (gF - fp))
1168- (dA ++ [LeaseCancel(value(hd)), gZ, BinaryEntry(hc, d(gZ)), IntegerEntry(he, gZ.amount)])
1152+ let fn = ((bI / size(gL)) + 1)
1153+ let gY = ej(0)
1154+ let gO = gY._1
1155+ let gP = gY._2
1156+ let gQ = gY._3
1157+ let gR = gY._4
1158+ let gS = gY._5
1159+ let gT = Lease(gO, (gQ + (fn * size(gL))))
1160+ func gZ (dO,r) = {
1161+ let gW = gL[r]
1162+ let ha = be(gW)
1163+ let hb = getBinaryValue(this, ha)
1164+ let hc = bh(gW)
1165+ let gD = getIntegerValue(this, hc)
1166+ let hd = LeaseCancel(value(hb))
1167+ let gX = Lease(addressFromStringValue(gW), (gD - fn))
1168+ (dO ++ [LeaseCancel(value(hb)), gX, BinaryEntry(ha, d(gX)), IntegerEntry(hc, gX.amount)])
11691169 }
11701170
11711171 ({
1172- let bL = gG
1173- let bM = size(bL)
1174- let bN = nil
1175- func bO (bP,bQ) = if ((bQ >= bM))
1176- then bP
1177- else hb(bP, bL[bQ])
1172+ let bZ = gE
1173+ let ca = size(bZ)
1174+ let cb = nil
1175+ func cc (cd,ce) = if ((ce >= ca))
1176+ then cd
1177+ else gZ(cd, bZ[ce])
11781178
1179- func bR (bP,bQ) = if ((bQ >= bM))
1180- then bP
1179+ func cf (cd,ce) = if ((ce >= ca))
1180+ then cd
11811181 else throw("List size exceeds 8")
11821182
1183- bR(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1184- } ++ [BinaryEntry(gT, d(gV)), IntegerEntry(gR, gV.amount), LeaseCancel(gU), gV])
1183+ cf(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1184+ } ++ [BinaryEntry(gR, d(gT)), IntegerEntry(gP, gT.amount), LeaseCancel(gS), gT])
11851185 }
11861186 }
11871187
11881188
11891189
11901190 @Callable(r)
1191-func swapParamsByUserSYSREADONLY (ed,hg) = {
1192- let gj = l(invoke(ah, "gnsbtInfoSYSREADONLY", [ed, 0, 0], nil))
1193- let hh = (q(gj[0]) + hg)
1194- let gk = (q(gj[1]) + hg)
1195- let hi = l(invoke(ae, "calcSwapLimitREADONLY", [hh], nil))
1196- let hj = q(hi[0])
1197- let ei = q(hi[1])
1198- let ej = q(hi[2])
1199- let hk = valueOrElse(getInteger(this, bs(ed)), 0)
1200- let hl = bl()
1201- let hm = (height - hk)
1202- let hn = (hm >= hl)
1203- let ho = if (hn)
1191+func swapParamsByUserSYSREADONLY (er,he) = {
1192+ let gh = l(invoke(av, "gnsbtInfoSYSREADONLY", [er, 0, 0], nil))
1193+ let hf = (q(gh[0]) + he)
1194+ let gi = (q(gh[1]) + he)
1195+ let hg = l(invoke(as, "calcSwapLimitREADONLY", [hf], nil))
1196+ let hh = q(hg[0])
1197+ let ew = q(hg[1])
1198+ let ex = q(hg[2])
1199+ let hi = valueOrElse(getInteger(this, bG(er)), 0)
1200+ let hj = bz()
1201+ let hk = (height - hi)
1202+ let hl = (hk >= hj)
1203+ let hm = if (hl)
12041204 then 0
1205- else valueOrElse(getInteger(this, bq(ed)), 0)
1206- let eh = if (hn)
1205+ else valueOrElse(getInteger(this, bE(er)), 0)
1206+ let ev = if (hl)
12071207 then 0
1208- else (hl - hm)
1209- $Tuple2(nil, $Tuple7(hj, ho, eh, hh, gk, ei, ej))
1208+ else (hj - hk)
1209+ $Tuple2(nil, $Tuple7(hh, hm, ev, hf, gi, ew, ex))
12101210 }
12111211
12121212
12131213
12141214 @Callable(r)
1215-func calcWithdrawResultSYSREADONLY (aX,bB,bv,bC) = {
1216- let fi = l(invoke(ae, "calcNeutinoMetricsREADONLY", nil, nil))
1217- $Tuple2(nil, fh(aX, bB, bv, fi, bC))
1215+func calcWithdrawResultSYSREADONLY (bl,bP,bJ,bQ) = {
1216+ let eF = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
1217+ $Tuple2(nil, fg(bl, bP, bJ, eF, bQ))
12181218 }
12191219
12201220
12211221
12221222 @Callable(r)
1223-func replaceCommunityNode (hp,hq,aV,hr) = {
1224- let gH = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1225- let gI = fromBase58String(gH)
1226- if ((r.callerPublicKey != gI))
1223+func replaceCommunityNode (hn,ho,bj,hp) = {
1224+ let gF = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1225+ let gG = fromBase58String(gF)
1226+ if ((r.callerPublicKey != gG))
12271227 then throw("replaceCommunityNode not authorized")
12281228 else {
1229- let hs = aU(aV)
1230- let ht = a(this, hs)
1231- if (!(contains(ht, hp)))
1232- then throw(((("Group " + toString(aV)) + " does not contain address ") + hp))
1229+ let hq = bi(bj)
1230+ let hr = a(this, hq)
1231+ if (!(contains(hr, hn)))
1232+ then throw(((("Group " + toString(bj)) + " does not contain address ") + hn))
12331233 else {
1234- let hu = invoke(aj, "replaceApprovedNode", [hp, hq, aV, hr], nil)
1235- if ((hu == hu))
1234+ let hs = invoke(ax, "replaceApprovedNode", [hn, ho, bj, hp], nil)
1235+ if ((hs == hs))
12361236 then {
1237- let hv = aQ(hp)
1238- let hw = aT(hp)
1239- let hx = getIntegerValue(hw)
1240- let hy = aQ(hq)
1241- let hz = aT(hq)
1242- let hA = Lease(addressFromStringValue(hq), hx)
1243- let hB = makeString(split(ht, hp), hq)
1244- $Tuple2([LeaseCancel(getBinaryValue(hv)), DeleteEntry(hv), DeleteEntry(hw), StringEntry(hs, hB), hA, BinaryEntry(hy, d(hA)), IntegerEntry(hz, hx)], unit)
1237+ let ht = be(hn)
1238+ let hu = bh(hn)
1239+ let hv = getIntegerValue(hu)
1240+ let hw = be(ho)
1241+ let hx = bh(ho)
1242+ let hy = Lease(addressFromStringValue(ho), hv)
1243+ let hz = makeString(split(hr, hn), ho)
1244+ $Tuple2([LeaseCancel(getBinaryValue(ht)), DeleteEntry(ht), DeleteEntry(hu), StringEntry(hq, hz), hy, BinaryEntry(hw, d(hy)), IntegerEntry(hx, hv)], unit)
12451245 }
12461246 else throw("Strict value is not equal to itself.")
12471247 }
12481248 }
12491249 }
12501250
12511251
12521252
12531253 @Callable(r)
12541254 func updateReservesAndNeutrinoSupply () = {
1255- func hC (c) = {
1255+ func hA (c) = {
12561256 let n = getInteger(this, c)
12571257 if ($isInstanceOf(n, "Int"))
12581258 then {
1259- let dA = n
1260- dA
1259+ let dO = n
1260+ dO
12611261 }
12621262 else 0
12631263 }
12641264
1265- let hD = l(invoke(ae, "calcNeutinoMetricsREADONLY", nil, nil))
1266- let ac = hC("updateReservesAndNeutrinoSupplyIdx")
1267- let hE = (ac + 1)
1268-[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", hE), IntegerEntry("reserve", q(hD[3])), IntegerEntry("neutrinoSupply", q(hD[5])), IntegerEntry("reservesInUsdn", bw(q(hD[3]), q(hD[0]))), IntegerEntry("surplus", q(hD[6])), IntegerEntry("deficit", -(q(hD[6])))]
1265+ let hB = l(invoke(as, "calcNeutinoMetricsREADONLY", nil, nil))
1266+ let aq = hA("updateReservesAndNeutrinoSupplyIdx")
1267+ let hC = (aq + 1)
1268+[IntegerEntry("updateReservesAndNeutrinoSupplyIdx", hC), IntegerEntry("reserve", q(hB[3])), IntegerEntry("neutrinoSupply", q(hB[5])), IntegerEntry("reservesInUsdn", bK(q(hB[3]), q(hB[0]))), IntegerEntry("surplus", q(hB[6])), IntegerEntry("deficit", -(q(hB[6])))]
12691269 }
12701270
12711271
12721272
12731273 @Callable(r)
12741274 func wavesBalancesVsPayment () = {
1275- let hF = wavesBalance(this)
1276-[IntegerEntry("wavesBalance_available", hF.available), IntegerEntry("wavesBalance_regular", hF.regular), IntegerEntry("wavesBalance_generating", hF.generating), IntegerEntry("wavesBalance_effective", hF.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
1275+ let hD = wavesBalance(this)
1276+[IntegerEntry("wavesBalance_available", hD.available), IntegerEntry("wavesBalance_regular", hD.regular), IntegerEntry("wavesBalance_generating", hD.generating), IntegerEntry("wavesBalance_effective", hD.effective), IntegerEntry("waves_payment", value(r.payments[0]).amount)]
12771277 }
12781278
12791279
1280-@Verifier(cA)
1281-func hG () = {
1282- let hH = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1283- let hI = split(valueOrElse(getString(ad, "%s__multisig"), hH), z)
1284- let hJ = ((((if (sigVerify(cA.bodyBytes, cA.proofs[0], fromBase58String(hI[0])))
1280+@Verifier(cO)
1281+func hE () = {
1282+ let hF = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1283+ let hG = split(valueOrElse(getString(ar, "%s__multisig"), hF), z)
1284+ let hH = ((((if (sigVerify(cO.bodyBytes, cO.proofs[0], fromBase58String(hG[0])))
12851285 then 1
1286- else 0) + (if (sigVerify(cA.bodyBytes, cA.proofs[1], fromBase58String(hI[1])))
1286+ else 0) + (if (sigVerify(cO.bodyBytes, cO.proofs[1], fromBase58String(hG[1])))
12871287 then 1
1288- else 0)) + (if (sigVerify(cA.bodyBytes, cA.proofs[2], fromBase58String(hI[2])))
1288+ else 0)) + (if (sigVerify(cO.bodyBytes, cO.proofs[2], fromBase58String(hG[2])))
12891289 then 1
1290- else 0)) + (if (sigVerify(cA.bodyBytes, cA.proofs[3], fromBase58String(hI[3])))
1290+ else 0)) + (if (sigVerify(cO.bodyBytes, cO.proofs[3], fromBase58String(hG[3])))
12911291 then 2
12921292 else 0))
1293- if (if (ct)
1294- then (getStringValue(ad, "is_blocked_caller") == toString(ak))
1293+ if (if (cH)
1294+ then (getStringValue(ar, "is_blocked_caller") == toString(ay))
12951295 else false)
1296- then fz(cA)
1296+ then fx(cO)
12971297 else {
1298- let n = cA
1298+ let n = cO
12991299 if ($isInstanceOf(n, "SponsorFeeTransaction"))
13001300 then {
1301- let hK = n
1302- if (cz(hK))
1303- then (hJ >= 3)
1301+ let hI = n
1302+ if (cN(hI))
1303+ then (hH >= 3)
13041304 else false
13051305 }
1306- else (hJ >= 3)
1306+ else (hH >= 3)
13071307 }
13081308 }
13091309

github/deemru/w8io/169f3d6 
628.83 ms