{ "name": "DIDAlgoStorage", "structs": { "Metadata": [ { "name": "start", "type": "uint64" }, { "name": "end", "type": "uint64" }, { "name": "status", "type": "byte" }, { "name": "endSize", "type": "uint64" }, { "name": "lastDeleted", "type": "uint64" } ] }, "methods": [ { "name": "startUpload", "args": [ { "type": "address", "name": "pubKey", "desc": "The pubkey of the DID" }, { "type": "uint64", "name": "numBoxes", "desc": "The number of boxes that the data will take up" }, { "type": "uint64", "name": "endBoxSize", "desc": "The size of the last box" }, { "type": "pay", "name": "mbrPayment", "desc": "Payment from the uploader to cover the box MBR" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "\nAllocate boxes to begin data upload process", "events": [], "recommendations": {} }, { "name": "upload", "args": [ { "type": "address", "name": "pubKey", "desc": "The pubkey of the DID" }, { "type": "uint64", "name": "boxIndex", "desc": "The index of the box to upload the given chunk of data to" }, { "type": "uint64", "name": "offset", "desc": "The offset within the box to start writing the data" }, { "type": "byte[]", "name": "data", "desc": "The data to write" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "\nUpload data to a specific offset in a box", "events": [], "recommendations": {} }, { "name": "finishUpload", "args": [ { "type": "address", "name": "pubKey", "desc": "The address of the DID" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "\nMark uploading as false", "events": [], "recommendations": {} }, { "name": "startDelete", "args": [ { "type": "address", "name": "pubKey", "desc": "The address of the DID" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Starts the deletion process for the data associated with a DID", "events": [], "recommendations": {} }, { "name": "deleteData", "args": [ { "type": "address", "name": "pubKey", "desc": "The address of the DID" }, { "type": "uint64", "name": "boxIndex", "desc": "The index of the box to delete" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Deletes a box of data", "events": [], "recommendations": {} }, { "name": "updateApplication", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "UpdateApplication" ] }, "readonly": false, "desc": "Allow the contract to be updated by the creator", "events": [], "recommendations": {} }, { "name": "dummy", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Dummy function to add extra box references for deleteData.\nBoxes are 32k, but a single app call can only inlcude enough references to read/write 8k\nat a time. Thus when a box is deleted, we need to add additional dummy calls with box\nreferences to increase the total read/write budget to 32k.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "currentIndex": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y3VycmVudEluZGV4" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "dataBoxes": { "keyType": "uint64", "valueType": "AVMBytes", "prefix": "" }, "metadata": { "keyType": "address", "valueType": "Metadata", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 323, 439, 495 ], "errorMessage": "Box must have value" }, { "pc": [ 57 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 132 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 121 ], "errorMessage": "OnCompletion must be UpdateApplication && can only call when not creating" }, { "pc": [ 553, 580 ], "errorMessage": "account funded" }, { "pc": [ 177, 312, 411, 434, 484, 547, 577, 620 ], "errorMessage": "application exists" }, { "pc": [ 183 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 292 ], "errorMessage": "invalid array length header" }, { "pc": [ 300 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 142, 263, 404, 427, 462 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 150, 159, 271, 283, 473 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 170 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIKICAgIGJ5dGVjYmxvY2sgImN1cnJlbnRJbmRleCIgMHgwMCAweDAxIDB4MDIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NDEKICAgIC8vIGN1cnJlbnRJbmRleCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KTsKICAgIGJ5dGVjXzAgLy8gImN1cnJlbnRJbmRleCIKICAgIGludGNfMSAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgRElEQWxnb1N0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTcKICAgIHB1c2hieXRlcyAweDQ2Zjc2NTMzIC8vIG1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3VwZGF0ZUFwcGxpY2F0aW9uX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIERJREFsZ29TdG9yYWdlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg1NjVjNjc1ZCAweDRkYjFjNDE4IDB4MGU3ODcyNTcgMHhiZDJjODRlMiAweDY4OTFiYTkwIDB4YTMwY2U3ZmYgLy8gbWV0aG9kICJzdGFydFVwbG9hZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQscGF5KXZvaWQiLCBtZXRob2QgInVwbG9hZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYnl0ZVtdKXZvaWQiLCBtZXRob2QgImZpbmlzaFVwbG9hZChhZGRyZXNzKXZvaWQiLCBtZXRob2QgInN0YXJ0RGVsZXRlKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiZGVsZXRlRGF0YShhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkdW1teSgpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHN0YXJ0VXBsb2FkIHVwbG9hZCBmaW5pc2hVcGxvYWQgc3RhcnREZWxldGUgZGVsZXRlRGF0YSBtYWluX2R1bW15X3JvdXRlQDEzCiAgICBlcnIKCm1haW5fZHVtbXlfcm91dGVAMTM6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjE4NQogICAgLy8gZHVtbXkoKTogdm9pZCB7fQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl91cGRhdGVBcHBsaWNhdGlvbl9yb3V0ZUA1OgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNzUKICAgIC8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgVXBkYXRlQXBwbGljYXRpb24gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiB1cGRhdGVBcHBsaWNhdGlvbgoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTc6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgRElEQWxnb1N0b3JhZ2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6OkRJREFsZ29TdG9yYWdlLnN0YXJ0VXBsb2FkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRVcGxvYWQ6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjUyLTU3CiAgICAvLyBzdGFydFVwbG9hZCgKICAgIC8vICAgcHViS2V5OiBBZGRyZXNzLAogICAgLy8gICBudW1Cb3hlczogdWludDY0LAogICAgLy8gICBlbmRCb3hTaXplOiB1aW50NjQsCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NTgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBUeG4uYXBwbGljYXRpb25JZC5jcmVhdG9yKTsKICAgIHR4biBTZW5kZXIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjYwCiAgICAvLyBjb25zdCBzdGFydEJveDogdWludDY0ID0gdGhpcy5jdXJyZW50SW5kZXgudmFsdWU7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo0MQogICAgLy8gY3VycmVudEluZGV4ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAiY3VycmVudEluZGV4IgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo2MAogICAgLy8gY29uc3Qgc3RhcnRCb3g6IHVpbnQ2NCA9IHRoaXMuY3VycmVudEluZGV4LnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NjMKICAgIC8vIGNvbnN0IGVuZEJveDogdWludDY0ID0gc3RhcnRCb3ggKyBudW1Cb3hlcyAtIE9ORTsKICAgIGR1cAogICAgZGlnIDQKICAgICsKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjY1LTY3CiAgICAvLyBjb25zdCBtZXRhZGF0YTogTWV0YWRhdGEgPSB7CiAgICAvLyAgIHN0YXJ0OiBzdGFydEJveCwgZW5kOiBlbmRCb3gsIHN0YXR1czogVVBMT0FESU5HLCBlbmRTaXplOiBlbmRCb3hTaXplLCBsYXN0RGVsZXRlZDogMCwKICAgIC8vIH07CiAgICBzd2FwCiAgICBpdG9iCiAgICBkaWcgMQogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjY2CiAgICAvLyBzdGFydDogc3RhcnRCb3gsIGVuZDogZW5kQm94LCBzdGF0dXM6IFVQTE9BRElORywgZW5kU2l6ZTogZW5kQm94U2l6ZSwgbGFzdERlbGV0ZWQ6IDAsCiAgICBieXRlY18xIC8vIDB4MDAKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NjUtNjcKICAgIC8vIGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YSA9IHsKICAgIC8vICAgc3RhcnQ6IHN0YXJ0Qm94LCBlbmQ6IGVuZEJveCwgc3RhdHVzOiBVUExPQURJTkcsIGVuZFNpemU6IGVuZEJveFNpemUsIGxhc3REZWxldGVkOiAwLAogICAgLy8gfTsKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo2NgogICAgLy8gc3RhcnQ6IHN0YXJ0Qm94LCBlbmQ6IGVuZEJveCwgc3RhdHVzOiBVUExPQURJTkcsIGVuZFNpemU6IGVuZEJveFNpemUsIGxhc3REZWxldGVkOiAwLAogICAgaW50Y18xIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NjUtNjcKICAgIC8vIGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YSA9IHsKICAgIC8vICAgc3RhcnQ6IHN0YXJ0Qm94LCBlbmQ6IGVuZEJveCwgc3RhdHVzOiBVUExPQURJTkcsIGVuZFNpemU6IGVuZEJveFNpemUsIGxhc3REZWxldGVkOiAwLAogICAgLy8gfTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo3MQogICAgLy8gdGhpcy5tZXRhZGF0YShwdWJLZXkpLnZhbHVlID0gY2xvbmUobWV0YWRhdGEpOwogICAgdW5jb3ZlciA1CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjczCiAgICAvLyB0aGlzLmN1cnJlbnRJbmRleC52YWx1ZSA9IGVuZEJveCArIDE7CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo0MQogICAgLy8gY3VycmVudEluZGV4ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pOwogICAgYnl0ZWNfMCAvLyAiY3VycmVudEluZGV4IgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo3MwogICAgLy8gdGhpcy5jdXJyZW50SW5kZXgudmFsdWUgPSBlbmRCb3ggKyAxOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NzUKICAgIC8vIGNvbnN0IHRvdGFsQ29zdDogdWludDY0ID0gbnVtQm94ZXMgKiBDT1NUX1BFUl9CT1ggLy8gY29zdCBvZiBkYXRhIGJveGVzCiAgICBkaWcgMgogICAgcHVzaGludCAyNTAwIC8vIDI1MDAKICAgICoKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NzYKICAgIC8vICsgKG51bUJveGVzIC0gMSkgKiBNQVhfQk9YX1NJWkUgKiBDT1NUX1BFUl9CWVRFIC8vIGNvc3Qgb2YgZGF0YQogICAgZGlnIDMKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBwdXNoaW50IDEzMTA3MjAwIC8vIDEzMTA3MjAwCiAgICAqCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjc1LTc2CiAgICAvLyBjb25zdCB0b3RhbENvc3Q6IHVpbnQ2NCA9IG51bUJveGVzICogQ09TVF9QRVJfQk9YIC8vIGNvc3Qgb2YgZGF0YSBib3hlcwogICAgLy8gICArIChudW1Cb3hlcyAtIDEpICogTUFYX0JPWF9TSVpFICogQ09TVF9QRVJfQllURSAvLyBjb3N0IG9mIGRhdGEKICAgICsKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NzcKICAgIC8vICsgbnVtQm94ZXMgKiA4ICogQ09TVF9QRVJfQllURSAvLyBjb3N0IG9mIGRhdGEga2V5cwogICAgdW5jb3ZlciAzCiAgICBwdXNoaW50IDMyMDAgLy8gMzIwMAogICAgKgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo3NS03NwogICAgLy8gY29uc3QgdG90YWxDb3N0OiB1aW50NjQgPSBudW1Cb3hlcyAqIENPU1RfUEVSX0JPWCAvLyBjb3N0IG9mIGRhdGEgYm94ZXMKICAgIC8vICAgKyAobnVtQm94ZXMgLSAxKSAqIE1BWF9CT1hfU0laRSAqIENPU1RfUEVSX0JZVEUgLy8gY29zdCBvZiBkYXRhCiAgICAvLyAgICsgbnVtQm94ZXMgKiA4ICogQ09TVF9QRVJfQllURSAvLyBjb3N0IG9mIGRhdGEga2V5cwogICAgKwogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo3OAogICAgLy8gKyBlbmRCb3hTaXplICogQ09TVF9QRVJfQllURSAvLyBjb3N0IG9mIGxhc3QgZGF0YSBib3gKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAqCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjc1LTc4CiAgICAvLyBjb25zdCB0b3RhbENvc3Q6IHVpbnQ2NCA9IG51bUJveGVzICogQ09TVF9QRVJfQk9YIC8vIGNvc3Qgb2YgZGF0YSBib3hlcwogICAgLy8gICArIChudW1Cb3hlcyAtIDEpICogTUFYX0JPWF9TSVpFICogQ09TVF9QRVJfQllURSAvLyBjb3N0IG9mIGRhdGEKICAgIC8vICAgKyBudW1Cb3hlcyAqIDggKiBDT1NUX1BFUl9CWVRFIC8vIGNvc3Qgb2YgZGF0YSBrZXlzCiAgICAvLyAgICsgZW5kQm94U2l6ZSAqIENPU1RfUEVSX0JZVEUgLy8gY29zdCBvZiBsYXN0IGRhdGEgYm94CiAgICArCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjc1LTc5CiAgICAvLyBjb25zdCB0b3RhbENvc3Q6IHVpbnQ2NCA9IG51bUJveGVzICogQ09TVF9QRVJfQk9YIC8vIGNvc3Qgb2YgZGF0YSBib3hlcwogICAgLy8gICArIChudW1Cb3hlcyAtIDEpICogTUFYX0JPWF9TSVpFICogQ09TVF9QRVJfQllURSAvLyBjb3N0IG9mIGRhdGEKICAgIC8vICAgKyBudW1Cb3hlcyAqIDggKiBDT1NUX1BFUl9CWVRFIC8vIGNvc3Qgb2YgZGF0YSBrZXlzCiAgICAvLyAgICsgZW5kQm94U2l6ZSAqIENPU1RfUEVSX0JZVEUgLy8gY29zdCBvZiBsYXN0IGRhdGEgYm94CiAgICAvLyAgICsgQ09TVF9QRVJfQk9YICsgKDggKyA4ICsgMSArIDggKyAzMiArIDgpICogQ09TVF9QRVJfQllURTsgLy8gY29zdCBvZiBtZXRhZGF0YSBib3gKICAgIHB1c2hpbnQgMjg1MDAgLy8gMjg1MDAKICAgICsKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6ODEKICAgIC8vIGFzc2VydChtYnJQYXltZW50LmFtb3VudCA9PT0gdG90YWxDb3N0KTsKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6NTItNTcKICAgIC8vIHN0YXJ0VXBsb2FkKAogICAgLy8gICBwdWJLZXk6IEFkZHJlc3MsCiAgICAvLyAgIG51bUJveGVzOiB1aW50NjQsCiAgICAvLyAgIGVuZEJveFNpemU6IHVpbnQ2NCwKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gKTogdm9pZCB7CiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjpESURBbGdvU3RvcmFnZS51cGxvYWRbcm91dGluZ10oKSAtPiB2b2lkOgp1cGxvYWQ6CiAgICBpbnRjXzEgLy8gMAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo5NAogICAgLy8gdXBsb2FkKHB1YktleTogQWRkcmVzcywgYm94SW5kZXg6IHVpbnQ2NCwgb2Zmc2V0OiB1aW50NjQsIGRhdGE6IGJ5dGVzKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIGNvdmVyIDIKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6OTUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBUeG4uYXBwbGljYXRpb25JZC5jcmVhdG9yKTsKICAgIHR4biBTZW5kZXIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjk3CiAgICAvLyBjb25zdCBtZXRhZGF0YSA9IGNsb25lKHRoaXMubWV0YWRhdGEocHViS2V5KS52YWx1ZSk7CiAgICBzd2FwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjk4CiAgICAvLyBhc3NlcnQobWV0YWRhdGEuc3RhdHVzID09PSBVUExPQURJTkcpOwogICAgZHVwCiAgICBleHRyYWN0IDE2IDEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMDAKICAgIC8vIGFzc2VydChtZXRhZGF0YS5zdGFydCA8PSBib3hJbmRleCAmJiBib3hJbmRleCA8PSBtZXRhZGF0YS5lbmQpOwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICA+PQogICAgYnogdXBsb2FkX2Jvb2xfZmFsc2VANAogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyA0CiAgICA+PQogICAgYnogdXBsb2FkX2Jvb2xfZmFsc2VANAogICAgaW50Y18wIC8vIDEKCnVwbG9hZF9ib29sX21lcmdlQDU6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEwMAogICAgLy8gYXNzZXJ0KG1ldGFkYXRhLnN0YXJ0IDw9IGJveEluZGV4ICYmIGJveEluZGV4IDw9IG1ldGFkYXRhLmVuZCk7CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTAyCiAgICAvLyBpZiAob2Zmc2V0ID09PSAwKSB7CiAgICBkaWcgMgogICAgYm56IHVwbG9hZF9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEwMwogICAgLy8gdGhpcy5kYXRhQm94ZXMoYm94SW5kZXgpLmNyZWF0ZSh7CiAgICBkaWcgMwogICAgZHVwCiAgICBpdG9iCiAgICBidXJ5IDYKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTA0CiAgICAvLyBzaXplOiBib3hJbmRleCA9PT0gbWV0YWRhdGEuZW5kID8gbWV0YWRhdGEuZW5kU2l6ZSA6IE1BWF9CT1hfU0laRQogICAgZGlnIDEKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIGJ6IHVwbG9hZF90ZXJuYXJ5X2ZhbHNlQDgKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKCnVwbG9hZF90ZXJuYXJ5X21lcmdlQDk6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEwMy0xMDUKICAgIC8vIHRoaXMuZGF0YUJveGVzKGJveEluZGV4KS5jcmVhdGUoewogICAgLy8gICBzaXplOiBib3hJbmRleCA9PT0gbWV0YWRhdGEuZW5kID8gbWV0YWRhdGEuZW5kU2l6ZSA6IE1BWF9CT1hfU0laRQogICAgLy8gfSkKICAgIGRpZyA1CiAgICBzd2FwCiAgICBib3hfY3JlYXRlCiAgICBwb3AKCnVwbG9hZF9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMDkKICAgIC8vIHRoaXMuZGF0YUJveGVzKGJveEluZGV4KS5yZXBsYWNlKG9mZnNldCwgZGF0YSk7CiAgICBkaWcgMwogICAgaXRvYgogICAgZGlnIDMKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo5NAogICAgLy8gdXBsb2FkKHB1YktleTogQWRkcmVzcywgYm94SW5kZXg6IHVpbnQ2NCwgb2Zmc2V0OiB1aW50NjQsIGRhdGE6IGJ5dGVzKTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgp1cGxvYWRfdGVybmFyeV9mYWxzZUA4OgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMDQKICAgIC8vIHNpemU6IGJveEluZGV4ID09PSBtZXRhZGF0YS5lbmQgPyBtZXRhZGF0YS5lbmRTaXplIDogTUFYX0JPWF9TSVpFCiAgICBwdXNoaW50IDMyNzY4IC8vIDMyNzY4CiAgICBiIHVwbG9hZF90ZXJuYXJ5X21lcmdlQDkKCnVwbG9hZF9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiB1cGxvYWRfYm9vbF9tZXJnZUA1CgoKLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czo6RElEQWxnb1N0b3JhZ2UuZmluaXNoVXBsb2FkW3JvdXRpbmddKCkgLT4gdm9pZDoKZmluaXNoVXBsb2FkOgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMTgKICAgIC8vIGZpbmlzaFVwbG9hZChwdWJLZXk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMTkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBUeG4uYXBwbGljYXRpb25JZC5jcmVhdG9yKTsKICAgIHR4biBTZW5kZXIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEyMAogICAgLy8gdGhpcy5tZXRhZGF0YShwdWJLZXkpLnZhbHVlLnN0YXR1cyA9IFJFQURZOwogICAgcHVzaGludCAxNiAvLyAxNgogICAgYnl0ZWNfMiAvLyAweDAxCiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMTgKICAgIC8vIGZpbmlzaFVwbG9hZChwdWJLZXk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjpESURBbGdvU3RvcmFnZS5zdGFydERlbGV0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0RGVsZXRlOgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMjgKICAgIC8vIHN0YXJ0RGVsZXRlKHB1YktleTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEyOQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IFR4bi5hcHBsaWNhdGlvbklkLmNyZWF0b3IpOwogICAgdHhuIFNlbmRlcgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTMxCiAgICAvLyBjb25zdCBtZXRhZGF0YSA9IGNsb25lKHRoaXMubWV0YWRhdGEocHViS2V5KS52YWx1ZSk7CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KG1ldGFkYXRhLnN0YXR1cyA9PT0gUkVBRFkpOwogICAgZXh0cmFjdCAxNiAxCiAgICBieXRlY18yIC8vIDB4MDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTM3CiAgICAvLyB0aGlzLm1ldGFkYXRhKHB1YktleSkudmFsdWUgPSBjbG9uZShtZXRhZGF0YSk7CiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjEzNAogICAgLy8gbWV0YWRhdGEuc3RhdHVzID0gREVMRVRJTkc7CiAgICBieXRlY18zIC8vIDB4MDIKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTM3CiAgICAvLyB0aGlzLm1ldGFkYXRhKHB1YktleSkudmFsdWUgPSBjbG9uZShtZXRhZGF0YSk7CiAgICBib3hfcmVwbGFjZQogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxMjgKICAgIC8vIHN0YXJ0RGVsZXRlKHB1YktleTogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6OkRJREFsZ29TdG9yYWdlLmRlbGV0ZURhdGFbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGVEYXRhOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjE0NgogICAgLy8gZGVsZXRlRGF0YShwdWJLZXk6IEFkZHJlc3MsIGJveEluZGV4OiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTQ3CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gVHhuLmFwcGxpY2F0aW9uSWQuY3JlYXRvcik7CiAgICB0eG4gU2VuZGVyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgPT0KICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNDkKICAgIC8vIGNvbnN0IG1ldGFkYXRhID0gY2xvbmUodGhpcy5tZXRhZGF0YShwdWJLZXkpLnZhbHVlKTsKICAgIHN3YXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQobWV0YWRhdGEuc3RhdHVzID09PSBERUxFVElORyk7CiAgICBkdXAKICAgIGV4dHJhY3QgMTYgMQogICAgYnl0ZWNfMyAvLyAweDAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjE1MQogICAgLy8gYXNzZXJ0KG1ldGFkYXRhLnN0YXJ0IDw9IGJveEluZGV4ICYmIGJveEluZGV4IDw9IG1ldGFkYXRhLmVuZCk7CiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA8PQogICAgYnogZGVsZXRlRGF0YV9ib29sX2ZhbHNlQDQKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAzCiAgICA+PQogICAgYnogZGVsZXRlRGF0YV9ib29sX2ZhbHNlQDQKICAgIGludGNfMCAvLyAxCgpkZWxldGVEYXRhX2Jvb2xfbWVyZ2VANToKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTUxCiAgICAvLyBhc3NlcnQobWV0YWRhdGEuc3RhcnQgPD0gYm94SW5kZXggJiYgYm94SW5kZXggPD0gbWV0YWRhdGEuZW5kKTsKICAgIGFzc2VydAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNTMKICAgIC8vIGlmIChib3hJbmRleCAhPT0gbWV0YWRhdGEuc3RhcnQpIGFzc2VydChtZXRhZGF0YS5sYXN0RGVsZXRlZCA9PT0gYm94SW5kZXggLSAxKTsKICAgIGRpZyAyCiAgICBkaWcgMQogICAgIT0KICAgIGJ6IGRlbGV0ZURhdGFfYWZ0ZXJfaWZfZWxzZUA3CiAgICBkaWcgMQogICAgcHVzaGludCAyNSAvLyAyNQogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgPT0KICAgIGFzc2VydAoKZGVsZXRlRGF0YV9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjE1NQogICAgLy8gY29uc3QgcHJlTUJSID0gVHhuLmFwcGxpY2F0aW9uSWQuYWRkcmVzcy5taW5CYWxhbmNlOwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgc3dhcAogICAgYnVyeSA3CiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTU3CiAgICAvLyB0aGlzLmRhdGFCb3hlcyhib3hJbmRleCkuZGVsZXRlKCk7CiAgICBkaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTU5CiAgICAvLyBpZiAoYm94SW5kZXggPT09IG1ldGFkYXRhLmVuZCkgewogICAgZGlnIDIKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgPT0KICAgIGJ6IGRlbGV0ZURhdGFfZWxzZV9ib2R5QDkKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTYwCiAgICAvLyB0aGlzLm1ldGFkYXRhKHB1YktleSkuZGVsZXRlKCk7CiAgICBkaWcgNAogICAgYm94X2RlbAogICAgcG9wCgpkZWxldGVEYXRhX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjE2Ni0xNjkKICAgIC8vIGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogcHJlTUJSIC0gVHhuLmFwcGxpY2F0aW9uSWQuYWRkcmVzcy5taW5CYWxhbmNlLAogICAgLy8gICByZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNjcKICAgIC8vIGFtb3VudDogcHJlTUJSIC0gVHhuLmFwcGxpY2F0aW9uSWQuYWRkcmVzcy5taW5CYWxhbmNlLAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBkaWcgNgogICAgc3dhcAogICAgLQogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNjgKICAgIC8vIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIGNvbnRyYWN0cy9kaWQtYWxnby1zdG9yYWdlLmFsZ28udHM6MTY2LTE2OQogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBwcmVNQlIgLSBUeG4uYXBwbGljYXRpb25JZC5hZGRyZXNzLm1pbkJhbGFuY2UsCiAgICAvLyAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNDYKICAgIC8vIGRlbGV0ZURhdGEocHViS2V5OiBBZGRyZXNzLCBib3hJbmRleDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpkZWxldGVEYXRhX2Vsc2VfYm9keUA5OgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNjItMTYzCiAgICAvLyBtZXRhZGF0YS5sYXN0RGVsZXRlZCA9IGJveEluZGV4OwogICAgLy8gdGhpcy5tZXRhZGF0YShwdWJLZXkpLnZhbHVlID0gY2xvbmUobWV0YWRhdGEpOwogICAgZGlnIDQKICAgIHB1c2hpbnQgMjUgLy8gMjUKICAgIGRpZyA1CiAgICBib3hfcmVwbGFjZQogICAgYiBkZWxldGVEYXRhX2FmdGVyX2lmX2Vsc2VAMTAKCmRlbGV0ZURhdGFfYm9vbF9mYWxzZUA0OgogICAgaW50Y18xIC8vIDAKICAgIGIgZGVsZXRlRGF0YV9ib29sX21lcmdlQDUKCgovLyBjb250cmFjdHMvZGlkLWFsZ28tc3RvcmFnZS5hbGdvLnRzOjpESURBbGdvU3RvcmFnZS51cGRhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZUFwcGxpY2F0aW9uOgogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNzYKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBUeG4uYXBwbGljYXRpb25JZC5jcmVhdG9yKTsKICAgIHR4biBTZW5kZXIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgLy8gY29udHJhY3RzL2RpZC1hbGdvLXN0b3JhZ2UuYWxnby50czoxNzUKICAgIC8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAQAIICYEDGN1cnJlbnRJbmRleAEAAQEBAjEYQAADKCNnMRtBAFSABEb3ZTM2GgCOAQA7MRkURDEYRIIGBFZcZ10ETbHEGAQOeHJXBL0shOIEaJG6kASjDOf/NhoAjgYAGQCRAR8BNgFWAAEAIkMxGYEEEjEYEERCAekxGRQxGBQQRCJDNhoBSRUlEkQ2GgJJFSQSRBc2GgNJFSQSRBcxFiIJSTgQIhJEMQAxGHIHRBJEIyhlRElLBAgiCUwWSwEWUClQSwMWUCMWUE8FTL8iCChMZ0sCgcQTC0sDIgmBgICgBgsITwOBgBkLCE8CgZADCwiB1N4BCEw4CBJDIzYaAUkVJRJENhoCSRUkEkQXSU4CNhoDSRUkEkQXTgI2GgRJI1mBAghLARUSRFcCAE4CMQAxGHIHRBJETL5MSU4CTgNESVcQASkSRCNbD0EAOEkkW0sED0EALyJESwJAABdLA0kWRQZLASRbEkEAE0mBEVtLBUy5SEsDFksDSwO7IkOBgIACQv/qI0L/zjYaAUkVJRJEMQAxGHIHRBJEgRAquyJDNhoBSRUlEkQxADEYcgdEEkRJvkRXEAEqEkSBECu7IkOAADYaAUcCFSUSRDYaAklOAkkVJBJEF0lOAjEAMRhyB0QSREy+TElOAk4DRElXEAErEkQjW0lPAg5BAGJLASRbSwMPQQBYIkRLAksBE0EAC0sBgRlbSwMiCRJEMRhyCERzAUxFB0RLAkkWvEhLAiRbEkEAIEsEvEixMRhyCERzAURLBkwJMQCyB7IIIrIQI7IBsyJDSwSBGUsFu0L/2iNC/6UxADEYcgdEEkM=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }