{ "name": "GroupRegistry", "structs": { "Object1E2295E3": [ { "name": "groupId", "type": "uint64" }, { "name": "user", "type": "string" } ] }, "methods": [ { "name": "createApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "createGroup", "args": [ { "type": "string", "name": "name" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "inviteMember", "args": [ { "type": "uint64", "name": "groupId" }, { "type": "string", "name": "user" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "acceptInvite", "args": [ { "type": "uint64", "name": "groupId" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "rejectInvite", "args": [ { "type": "uint64", "name": "groupId" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "removeMember", "args": [ { "type": "uint64", "name": "groupId" }, { "type": "string", "name": "user" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "leaveGroup", "args": [ { "type": "uint64", "name": "groupId" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getGroupName", "args": [ { "type": "uint64", "name": "groupId" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getGroupCreator", "args": [ { "type": "uint64", "name": "groupId" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getMemberStatus", "args": [ { "type": "uint64", "name": "groupId" }, { "type": "string", "name": "user" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getMemberRole", "args": [ { "type": "uint64", "name": "groupId" }, { "type": "string", "name": "user" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "isMember", "args": [ { "type": "uint64", "name": "groupId" }, { "type": "string", "name": "user" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "isAdmin", "args": [ { "type": "uint64", "name": "groupId" }, { "type": "string", "name": "user" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "getGroupCount", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "groupCount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Z3JvdXBDb3VudA==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "groupNames": { "keyType": "uint64", "valueType": "AVMString", "prefix": "Z24=" }, "groupCreators": { "keyType": "uint64", "valueType": "AVMString", "prefix": "Z2M=" }, "memberStatuses": { "keyType": "Object1E2295E3", "valueType": "uint64", "prefix": "bXM=" }, "memberRoles": { "keyType": "Object1E2295E3", "valueType": "uint64", "prefix": "bXI=" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 323, 500, 690, 758, 825, 916, 926 ], "errorMessage": "Box must have value" }, { "pc": [ 317, 494 ], "errorMessage": "Caller has not joined" }, { "pc": [ 311, 488 ], "errorMessage": "Caller is not a member" }, { "pc": [ 327, 504 ], "errorMessage": "Caller is not admin" }, { "pc": [ 584, 619 ], "errorMessage": "Group does not exist" }, { "pc": [ 384, 426 ], "errorMessage": "No invite found" }, { "pc": [ 553 ], "errorMessage": "Not a member" }, { "pc": [ 391, 433 ], "errorMessage": "Not invited" }, { "pc": [ 560 ], "errorMessage": "Not joined" }, { "pc": [ 55 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 200, 959 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 185, 276, 453, 650, 717, 785, 861 ], "errorMessage": "invalid array length header" }, { "pc": [ 192, 283, 460, 657, 724, 792, 868 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 269, 362, 404, 446, 531, 573, 608, 643, 710, 778, 854 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOAogICAgYnl0ZWNibG9jayAibXMiIDB4MDAwYSAweDE1MWY3Yzc1IDB4MDAyMCAibXIiICJncm91cENvdW50IiAiZ24iICJnYyIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGdyb3VwQ291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImdyb3VwQ291bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEdyb3VwUmVnaXN0cnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMTkKICAgIHB1c2hieXRlc3MgMHhhNzNmMWZiYyAweDdjNGE5M2U2IDB4OWE2OWRhMDAgMHhjNDRiYmVmZiAweDg4ZGVkMGI3IDB4NjQ4ZjRmZDMgMHgxNTk2N2MxNyAweDJkNWFmNjUxIDB4ZWEyY2FhMzAgMHg5ZWU1YjI1NiAweDZmODE4ZTc4IDB4NGIwYzA1NWYgMHhhZjY5NzdiNyAvLyBtZXRob2QgImNyZWF0ZUdyb3VwKHN0cmluZyl1aW50NjQiLCBtZXRob2QgImludml0ZU1lbWJlcih1aW50NjQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImFjY2VwdEludml0ZSh1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVqZWN0SW52aXRlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVNZW1iZXIodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJsZWF2ZUdyb3VwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRHcm91cE5hbWUodWludDY0KXN0cmluZyIsIG1ldGhvZCAiZ2V0R3JvdXBDcmVhdG9yKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImdldE1lbWJlclN0YXR1cyh1aW50NjQsc3RyaW5nKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0TWVtYmVyUm9sZSh1aW50NjQsc3RyaW5nKXVpbnQ2NCIsIG1ldGhvZCAiaXNNZW1iZXIodWludDY0LHN0cmluZylib29sIiwgbWV0aG9kICJpc0FkbWluKHVpbnQ2NCxzdHJpbmcpYm9vbCIsIG1ldGhvZCAiZ2V0R3JvdXBDb3VudCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlR3JvdXAgaW52aXRlTWVtYmVyIGFjY2VwdEludml0ZSByZWplY3RJbnZpdGUgcmVtb3ZlTWVtYmVyIGxlYXZlR3JvdXAgZ2V0R3JvdXBOYW1lIGdldEdyb3VwQ3JlYXRvciBnZXRNZW1iZXJTdGF0dXMgZ2V0TWVtYmVyUm9sZSBpc01lbWJlciBpc0FkbWluIGdldEdyb3VwQ291bnQKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBHcm91cFJlZ2lzdHJ5IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4Yjg0NDdiMzYgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlQXBwbGljYXRpb25fcm91dGVAMjAKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGdyb3VwQ291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImdyb3VwQ291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxNQogICAgLy8gdGhpcy5ncm91cENvdW50LnZhbHVlID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmNyZWF0ZUdyb3VwW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlR3JvdXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHRoaXMuZ3JvdXBDb3VudC52YWx1ZSA9IHRoaXMuZ3JvdXBDb3VudC52YWx1ZSArIFVpbnQ2NCgxKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGdyb3VwQ291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImdyb3VwQ291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gdGhpcy5ncm91cENvdW50LnZhbHVlID0gdGhpcy5ncm91cENvdW50LnZhbHVlICsgVWludDY0KDEpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGdyb3VwQ291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImdyb3VwQ291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gdGhpcy5ncm91cENvdW50LnZhbHVlID0gdGhpcy5ncm91cENvdW50LnZhbHVlICsgVWludDY0KDEpCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyB0aGlzLmdyb3VwTmFtZXMoZ3JvdXBJZCkudmFsdWUgPSBuYW1lCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBncm91cE5hbWVzID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2duJyB9KQogICAgYnl0ZWMgNiAvLyAiZ24iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gdGhpcy5ncm91cE5hbWVzKGdyb3VwSWQpLnZhbHVlID0gbmFtZQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHVuY292ZXIgMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHRoaXMuZ3JvdXBDcmVhdG9ycyhncm91cElkKS52YWx1ZSA9IFR4bi5zZW5kZXIuYnl0ZXMudG9TdHJpbmcoKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZ3JvdXBDcmVhdG9ycyA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdnYycgfSkKICAgIGJ5dGVjIDcgLy8gImdjIgogICAgZGlnIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHRoaXMuZ3JvdXBDcmVhdG9ycyhncm91cElkKS52YWx1ZSA9IFR4bi5zZW5kZXIuYnl0ZXMudG9TdHJpbmcoKQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCBrZXkgPSB7IGdyb3VwSWQ6IGdyb3VwSWQsIHVzZXI6IFR4bi5zZW5kZXIuYnl0ZXMudG9TdHJpbmcoKSB9CiAgICBieXRlY18zIC8vIDB4MDAyMAogICAgdHhuIFNlbmRlcgogICAgY29uY2F0CiAgICBkaWcgMQogICAgYnl0ZWNfMSAvLyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyB0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkudmFsdWUgPSBVaW50NjQoMikKICAgIGludGNfMiAvLyAyCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gbWVtYmVyUm9sZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXInIH0pCiAgICBieXRlYyA0IC8vICJtciIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHRoaXMubWVtYmVyUm9sZXMoa2V5KS52YWx1ZSA9IFVpbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5pbnZpdGVNZW1iZXJbcm91dGluZ10oKSAtPiB2b2lkOgppbnZpdGVNZW1iZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czozMwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIGNvbnN0IGNhbGxlcktleSA9IHsgZ3JvdXBJZDogZ3JvdXBJZCwgdXNlcjogVHhuLnNlbmRlci5ieXRlcy50b1N0cmluZygpIH0KICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDAwMjAKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlY18xIC8vIDB4MDAwYQogICAgY29uY2F0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjM2CiAgICAvLyBhc3NlcnQodGhpcy5tZW1iZXJTdGF0dXNlcyhjYWxsZXJLZXkpLmV4aXN0cywgJ0NhbGxlciBpcyBub3QgYSBtZW1iZXInKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBDYWxsZXIgaXMgbm90IGEgbWVtYmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czozNwogICAgLy8gYXNzZXJ0KHRoaXMubWVtYmVyU3RhdHVzZXMoY2FsbGVyS2V5KS52YWx1ZSA9PT0gVWludDY0KDIpLCAnQ2FsbGVyIGhhcyBub3Qgam9pbmVkJykKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gQ2FsbGVyIGhhcyBub3Qgam9pbmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gbWVtYmVyUm9sZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXInIH0pCiAgICBieXRlYyA0IC8vICJtciIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGFzc2VydCh0aGlzLm1lbWJlclJvbGVzKGNhbGxlcktleSkudmFsdWUgPT09IFVpbnQ2NCgxKSwgJ0NhbGxlciBpcyBub3QgYWRtaW4nKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIENhbGxlciBpcyBub3QgYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyBjb25zdCB1c2VyS2V5ID0geyBncm91cElkOiBncm91cElkLCB1c2VyOiB1c2VyIH0KICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0aGlzLm1lbWJlclN0YXR1c2VzKHVzZXJLZXkpLnZhbHVlID0gVWludDY0KDEpCiAgICBpbnRjXzEgLy8gMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIG1lbWJlclJvbGVzID0gQm94TWFwPHsgZ3JvdXBJZDogdWludDY0OyB1c2VyOiBzdHJpbmcgfSwgdWludDY0Pih7IGtleVByZWZpeDogJ21yJyB9KQogICAgYnl0ZWMgNCAvLyAibXIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB0aGlzLm1lbWJlclJvbGVzKHVzZXJLZXkpLnZhbHVlID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmFjY2VwdEludml0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY2VwdEludml0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyBjb25zdCBrZXkgPSB7IGdyb3VwSWQ6IGdyb3VwSWQsIHVzZXI6IFR4bi5zZW5kZXIuYnl0ZXMudG9TdHJpbmcoKSB9CiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MDAyMAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIG1lbWJlclN0YXR1c2VzID0gQm94TWFwPHsgZ3JvdXBJZDogdWludDY0OyB1c2VyOiBzdHJpbmcgfSwgdWludDY0Pih7IGtleVByZWZpeDogJ21zJyB9KQogICAgYnl0ZWNfMCAvLyAibXMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBhc3NlcnQodGhpcy5tZW1iZXJTdGF0dXNlcyhrZXkpLmV4aXN0cywgJ05vIGludml0ZSBmb3VuZCcpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIE5vIGludml0ZSBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIGFzc2VydCh0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkudmFsdWUgPT09IFVpbnQ2NCgxKSwgJ05vdCBpbnZpdGVkJykKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBOb3QgaW52aXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIHRoaXMubWVtYmVyU3RhdHVzZXMoa2V5KS52YWx1ZSA9IFVpbnQ2NCgyKQogICAgaW50Y18yIC8vIDIKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5yZWplY3RJbnZpdGVbcm91dGluZ10oKSAtPiB2b2lkOgpyZWplY3RJbnZpdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY29uc3Qga2V5ID0geyBncm91cElkOiBncm91cElkLCB1c2VyOiBUeG4uc2VuZGVyLmJ5dGVzLnRvU3RyaW5nKCkgfQogICAgdHhuIFNlbmRlcgogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDAwMjAKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlY18xIC8vIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBtZW1iZXJTdGF0dXNlcyA9IEJveE1hcDx7IGdyb3VwSWQ6IHVpbnQ2NDsgdXNlcjogc3RyaW5nIH0sIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdtcycgfSkKICAgIGJ5dGVjXzAgLy8gIm1zIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gYXNzZXJ0KHRoaXMubWVtYmVyU3RhdHVzZXMoa2V5KS5leGlzdHMsICdObyBpbnZpdGUgZm91bmQnKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBObyBpbnZpdGUgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBhc3NlcnQodGhpcy5tZW1iZXJTdGF0dXNlcyhrZXkpLnZhbHVlID09PSBVaW50NjQoMSksICdOb3QgaW52aXRlZCcpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gTm90IGludml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyB0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkudmFsdWUgPSBVaW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6Okdyb3VwUmVnaXN0cnkucmVtb3ZlTWVtYmVyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVtb3ZlTWVtYmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBjb25zdCBjYWxsZXJLZXkgPSB7IGdyb3VwSWQ6IGdyb3VwSWQsIHVzZXI6IFR4bi5zZW5kZXIuYnl0ZXMudG9TdHJpbmcoKSB9CiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMDIwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWNfMSAvLyAweDAwMGEKICAgIGNvbmNhdAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIG1lbWJlclN0YXR1c2VzID0gQm94TWFwPHsgZ3JvdXBJZDogdWludDY0OyB1c2VyOiBzdHJpbmcgfSwgdWludDY0Pih7IGtleVByZWZpeDogJ21zJyB9KQogICAgYnl0ZWNfMCAvLyAibXMiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMubWVtYmVyU3RhdHVzZXMoY2FsbGVyS2V5KS5leGlzdHMsICdDYWxsZXIgaXMgbm90IGEgbWVtYmVyJykKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQ2FsbGVyIGlzIG5vdCBhIG1lbWJlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIGFzc2VydCh0aGlzLm1lbWJlclN0YXR1c2VzKGNhbGxlcktleSkudmFsdWUgPT09IFVpbnQ2NCgyKSwgJ0NhbGxlciBoYXMgbm90IGpvaW5lZCcpCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGJ0b2kKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIENhbGxlciBoYXMgbm90IGpvaW5lZAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIG1lbWJlclJvbGVzID0gQm94TWFwPHsgZ3JvdXBJZDogdWludDY0OyB1c2VyOiBzdHJpbmcgfSwgdWludDY0Pih7IGtleVByZWZpeDogJ21yJyB9KQogICAgYnl0ZWMgNCAvLyAibXIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBhc3NlcnQodGhpcy5tZW1iZXJSb2xlcyhjYWxsZXJLZXkpLnZhbHVlID09PSBVaW50NjQoMSksICdDYWxsZXIgaXMgbm90IGFkbWluJykKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBDYWxsZXIgaXMgbm90IGFkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgdXNlcktleSA9IHsgZ3JvdXBJZDogZ3JvdXBJZCwgdXNlcjogdXNlciB9CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIG1lbWJlclN0YXR1c2VzID0gQm94TWFwPHsgZ3JvdXBJZDogdWludDY0OyB1c2VyOiBzdHJpbmcgfSwgdWludDY0Pih7IGtleVByZWZpeDogJ21zJyB9KQogICAgYnl0ZWNfMCAvLyAibXMiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyB0aGlzLm1lbWJlclN0YXR1c2VzKHVzZXJLZXkpLnZhbHVlID0gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmxlYXZlR3JvdXBbcm91dGluZ10oKSAtPiB2b2lkOgpsZWF2ZUdyb3VwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IGtleSA9IHsgZ3JvdXBJZDogZ3JvdXBJZCwgdXNlcjogVHhuLnNlbmRlci5ieXRlcy50b1N0cmluZygpIH0KICAgIHR4biBTZW5kZXIKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMDIwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWNfMSAvLyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIGFzc2VydCh0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkuZXhpc3RzLCAnTm90IGEgbWVtYmVyJykKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gTm90IGEgbWVtYmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gYXNzZXJ0KHRoaXMubWVtYmVyU3RhdHVzZXMoa2V5KS52YWx1ZSA9PT0gVWludDY0KDIpLCAnTm90IGpvaW5lZCcpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgaW50Y18yIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gTm90IGpvaW5lZAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIHRoaXMubWVtYmVyU3RhdHVzZXMoa2V5KS52YWx1ZSA9IFVpbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5nZXRHcm91cE5hbWVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHcm91cE5hbWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gYXNzZXJ0KHRoaXMuZ3JvdXBOYW1lcyhncm91cElkKS5leGlzdHMsICdHcm91cCBkb2VzIG5vdCBleGlzdCcpCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBncm91cE5hbWVzID0gQm94TWFwPHVpbnQ2NCwgc3RyaW5nPih7IGtleVByZWZpeDogJ2duJyB9KQogICAgYnl0ZWMgNiAvLyAiZ24iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBhc3NlcnQodGhpcy5ncm91cE5hbWVzKGdyb3VwSWQpLmV4aXN0cywgJ0dyb3VwIGRvZXMgbm90IGV4aXN0JykKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gR3JvdXAgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyByZXR1cm4gdGhpcy5ncm91cE5hbWVzKGdyb3VwSWQpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjgwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6Okdyb3VwUmVnaXN0cnkuZ2V0R3JvdXBDcmVhdG9yW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0R3JvdXBDcmVhdG9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGFzc2VydCh0aGlzLmdyb3VwQ3JlYXRvcnMoZ3JvdXBJZCkuZXhpc3RzLCAnR3JvdXAgZG9lcyBub3QgZXhpc3QnKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gZ3JvdXBDcmVhdG9ycyA9IEJveE1hcDx1aW50NjQsIHN0cmluZz4oeyBrZXlQcmVmaXg6ICdnYycgfSkKICAgIGJ5dGVjIDcgLy8gImdjIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gYXNzZXJ0KHRoaXMuZ3JvdXBDcmVhdG9ycyhncm91cElkKS5leGlzdHMsICdHcm91cCBkb2VzIG5vdCBleGlzdCcpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEdyb3VwIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gcmV0dXJuIHRoaXMuZ3JvdXBDcmVhdG9ycyhncm91cElkKS52YWx1ZQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo4NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmdldE1lbWJlclN0YXR1c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldE1lbWJlclN0YXR1czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjkyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gY29uc3Qga2V5ID0geyBncm91cElkOiBncm91cElkLCB1c2VyOiB1c2VyIH0KICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWNfMSAvLyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gaWYgKHRoaXMubWVtYmVyU3RhdHVzZXMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogZ2V0TWVtYmVyU3RhdHVzX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6OTYKICAgIC8vIHJldHVybiB0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKCmdldE1lbWJlclN0YXR1c19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmdldE1lbWJlclN0YXR1c0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZ2V0TWVtYmVyU3RhdHVzX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyByZXR1cm4gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYiBnZXRNZW1iZXJTdGF0dXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5nZXRNZW1iZXJTdGF0dXNANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmdldE1lbWJlclJvbGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRNZW1iZXJSb2xlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGtleSA9IHsgZ3JvdXBJZDogZ3JvdXBJZCwgdXNlcjogdXNlciB9CiAgICBzd2FwCiAgICBpdG9iCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIG1lbWJlclJvbGVzID0gQm94TWFwPHsgZ3JvdXBJZDogdWludDY0OyB1c2VyOiBzdHJpbmcgfSwgdWludDY0Pih7IGtleVByZWZpeDogJ21yJyB9KQogICAgYnl0ZWMgNCAvLyAibXIiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTA0CiAgICAvLyBpZiAodGhpcy5tZW1iZXJSb2xlcyhrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRNZW1iZXJSb2xlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyByZXR1cm4gdGhpcy5tZW1iZXJSb2xlcyhrZXkpLnZhbHVlCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCgpnZXRNZW1iZXJSb2xlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6Okdyb3VwUmVnaXN0cnkuZ2V0TWVtYmVyUm9sZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmdldE1lbWJlclJvbGVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyByZXR1cm4gVWludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGIgZ2V0TWVtYmVyUm9sZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmdldE1lbWJlclJvbGVANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmlzTWVtYmVyW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNNZW1iZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gY29uc3Qga2V5ID0geyBncm91cElkOiBncm91cElkLCB1c2VyOiB1c2VyIH0KICAgIHN3YXAKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWNfMSAvLyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGlmICh0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGlzTWVtYmVyX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyByZXR1cm4gdGhpcy5tZW1iZXJTdGF0dXNlcyhrZXkpLnZhbHVlID09PSBVaW50NjQoMikKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGludGNfMiAvLyAyCiAgICA9PQoKaXNNZW1iZXJfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5pc01lbWJlckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmlzTWVtYmVyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjExNgogICAgLy8gcmV0dXJuIGZhbHNlCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTEwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGIgaXNNZW1iZXJfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5pc01lbWJlckA0CgoKLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6Okdyb3VwUmVnaXN0cnkuaXNBZG1pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmlzQWRtaW46CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMjEKICAgIC8vIGNvbnN0IGtleSA9IHsgZ3JvdXBJZDogZ3JvdXBJZCwgdXNlcjogdXNlciB9CiAgICBzd2FwCiAgICBpdG9iCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjXzEgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gbWVtYmVyU3RhdHVzZXMgPSBCb3hNYXA8eyBncm91cElkOiB1aW50NjQ7IHVzZXI6IHN0cmluZyB9LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnbXMnIH0pCiAgICBieXRlY18wIC8vICJtcyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGlmICh0aGlzLm1lbWJlclN0YXR1c2VzKGtleSkuZXhpc3RzICYmIHRoaXMubWVtYmVyUm9sZXMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogaXNBZG1pbl9hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyBtZW1iZXJSb2xlcyA9IEJveE1hcDx7IGdyb3VwSWQ6IHVpbnQ2NDsgdXNlcjogc3RyaW5nIH0sIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdtcicgfSkKICAgIGJ5dGVjIDQgLy8gIm1yIgogICAgZGlnIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHRoaXMubWVtYmVyU3RhdHVzZXMoa2V5KS5leGlzdHMgJiYgdGhpcy5tZW1iZXJSb2xlcyhrZXkpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBpc0FkbWluX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTIzCiAgICAvLyByZXR1cm4gdGhpcy5tZW1iZXJTdGF0dXNlcyhrZXkpLnZhbHVlID09PSBVaW50NjQoMikgJiYgdGhpcy5tZW1iZXJSb2xlcyhrZXkpLnZhbHVlID09PSBVaW50NjQoMSkKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogaXNBZG1pbl9ib29sX2ZhbHNlQDYKICAgIGRpZyAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBpc0FkbWluX2Jvb2xfZmFsc2VANgogICAgaW50Y18xIC8vIDEKCmlzQWRtaW5fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5pc0FkbWluQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMTkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKaXNBZG1pbl9ib29sX2ZhbHNlQDY6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dyb3VwX3JlZ2lzdHJ5L2NvbnRyYWN0LmFsZ28udHM6MTE5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGIgaXNBZG1pbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjpHcm91cFJlZ2lzdHJ5LmlzQWRtaW5AOQoKaXNBZG1pbl9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHJldHVybiBmYWxzZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjExOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBiIGlzQWRtaW5fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5pc0FkbWluQDkKCgovLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czo6R3JvdXBSZWdpc3RyeS5nZXRHcm91cENvdW50W3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0R3JvdXBDb3VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gcmV0dXJuIHRoaXMuZ3JvdXBDb3VudC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ncm91cF9yZWdpc3RyeS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGdyb3VwQ291bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDUgLy8gImdyb3VwQ291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIHJldHVybiB0aGlzLmdyb3VwQ291bnQudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ3JvdXBfcmVnaXN0cnkvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECCCYIAm1zAgAKBBUffHUCACACbXIKZ3JvdXBDb3VudAJnbgJnYzEYQAAEJwUiZzEZFEQxGEEAY4INBKc/H7wEfEqT5gSaadoABMRLvv8EiN7QtwRkj0/TBBWWfBcELVr2UQTqLKowBJ7lslYEb4GOeARLDAVfBK9pd7c2GgCODQAVAGcAxADuARgBbQGXAboB3QIgAmQCrwMcAIAEuER7NjYaAI4BAAEAJwUiZyNDNhoBSSJZJAhLARUSRFcCACInBWVEIwgnBUsBZxYnBksBUEm8SE8CvzEAJwdLAlBJvEhMvysxAFBLASlQTFAoSwFQJBa/JwRMUCMWvypMULAjQzYaAUkVJRJEFzYaAkkiWSQISwEVEkRXAgAxAE8CFitPAlBMKVBJTwJQKEsBUEm9RQFEvkgXJBJEJwRMUL5EFyMSREsBFRZXBgJPAlBQKEsBUCMWvycETFAiFr8jQzYaAUkVJRJEFzEATBYrTwJQTClQTFAoTFBJvUUBREm+SBcjEkQkFr8jQzYaAUkVJRJEFzEATBYrTwJQTClQTFAoTFBJvUUBREm+SBcjEkQiFr8jQzYaAUkVJRJEFzYaAkkiWSQISwEVEkRXAgAxAE8CFitPAlBMKVBJTwJQKEsBUEm9RQFEvkgXJBJEJwRMUL5EFyMSREsBFRZXBgJPAlBQKExQIha/I0M2GgFJFSUSRBcxAEwWK08CUEwpUExQKExQSb1FAURJvkgXJBJEIha/I0M2GgFJFSUSRBcWJwZMUEm9RQFEvkhJFRZXBgJMUCpMULAjQzYaAUkVJRJEFxYnB0xQSb1FAUS+SEkVFlcGAkxQKkxQsCNDNhoBSRUlEkQXNhoCSSJZJAhLARUSRFcCAEwWSwEVFlcGAk8CUEwpUExQKExQSb1FAUEAC0m+RBcWKkxQsCNDIkL/9TYaAUkVJRJEFzYaAkkiWSQISwEVEkRXAgBMFksBFRZXBgJPAlBMKVBMUCcETFBJvUUBQQALSb5EFxYqTFCwI0MiQv/1NhoBSRUlEkQXNhoCSSJZJAhLARUSRFcCAEwWSwEVFlcGAk8CUEwpUExQKExQSb1FAUEAE0m+RBckEoABACJPAlQqTFCwI0MiQv/vIjYaAUkVJRJEFzYaAkkiWSQISwEVEkRXAgBMFksBFRZXBgJPAlBMKVBMUEkoTFBJvUUBQQAzJwRLAlBJRQS9RQFBACVJvkQXJBJBABhLAr5EFyMSQQAOI4ABACJPAlQqTFCwI0MiQv/vIkL/6yInBWVEFipMULAjQw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }