From 44d3acec22aa5b397c9f041816e2cd665215c40d Mon Sep 17 00:00:00 2001 From: Bobby Lat Date: Wed, 29 Jan 2025 11:26:06 +0800 Subject: [PATCH 1/2] refactor: compile contracts used by tests on demand as part of test run --- package-lock.json | 2 + package.json | 2 + tests/arc4/bool.spec.ts | 2 +- tests/arc4/byte.spec.ts | 2 +- tests/arc4/emit.spec.ts | 2 +- tests/arc4/str.spec.ts | 2 +- tests/arc4/ufixednxm.spec.ts | 2 +- tests/arc4/uintn.spec.ts | 2 +- .../Arc4PrimitiveOpsContract.approval.teal | 2963 ----------------- .../data/Arc4PrimitiveOpsContract.arc32.json | 1215 ------- .../data/Arc4PrimitiveOpsContract.arc56.json | 1831 ---------- .../data/Arc4PrimitiveOpsContract.clear.teal | 7 - .../data/BoxContract.approval.teal | 158 - .../box-contract/data/BoxContract.arc32.json | 63 - .../box-contract/data/BoxContract.arc56.json | 140 - .../box-contract/data/BoxContract.clear.teal | 7 - .../data/AppExpectingEffects.approval.teal | 179 - .../data/AppExpectingEffects.arc32.json | 77 - .../data/AppExpectingEffects.arc56.json | 189 -- .../data/AppExpectingEffects.clear.teal | 7 - .../data/CryptoOpsContract.approval.teal | 899 ----- .../data/CryptoOpsContract.arc32.json | 385 --- .../data/CryptoOpsContract.arc56.json | 502 --- .../data/CryptoOpsContract.clear.teal | 7 - .../MiscellaneousOpsContract.approval.teal | 1560 --------- .../data/MiscellaneousOpsContract.arc32.json | 814 ----- .../data/MiscellaneousOpsContract.arc56.json | 1036 ------ .../data/MiscellaneousOpsContract.clear.teal | 7 - .../data/BaseOne.approval.teal | 84 - .../multi-inheritance/data/BaseOne.arc32.json | 85 - .../multi-inheritance/data/BaseOne.arc56.json | 149 - .../multi-inheritance/data/BaseOne.clear.teal | 7 - .../data/BaseTwo.approval.teal | 83 - .../multi-inheritance/data/BaseTwo.arc32.json | 86 - .../multi-inheritance/data/BaseTwo.arc56.json | 150 - .../multi-inheritance/data/BaseTwo.clear.teal | 7 - .../data/CommonBase.approval.teal | 65 - .../data/CommonBase.arc32.json | 68 - .../data/CommonBase.arc56.json | 126 - .../data/CommonBase.clear.teal | 7 - .../data/MultiBases.approval.teal | 162 - .../data/MultiBases.arc32.json | 158 - .../data/MultiBases.arc56.json | 249 -- .../data/MultiBases.clear.teal | 7 - .../data/PrimitiveOpsContract.approval.teal | 2601 --------------- .../data/PrimitiveOpsContract.arc32.json | 1309 -------- .../data/PrimitiveOpsContract.arc56.json | 1636 --------- .../data/PrimitiveOpsContract.clear.teal | 7 - .../data/GlobalStateContract.approval.teal | 1057 ------ .../data/GlobalStateContract.arc32.json | 528 --- .../data/GlobalStateContract.arc56.json | 748 ----- .../data/GlobalStateContract.clear.teal | 7 - .../data/ITxnOpsContract.approval.teal | 127 - .../state-ops/data/ITxnOpsContract.arc32.json | 50 - .../state-ops/data/ITxnOpsContract.arc56.json | 102 - .../state-ops/data/ITxnOpsContract.clear.teal | 7 - .../data/ItxnDemoContract.approval.teal | 457 --- .../data/ItxnDemoContract.clear.teal | 7 - .../data/LocalStateContract.approval.teal | 795 ----- .../data/LocalStateContract.arc32.json | 359 -- .../data/LocalStateContract.arc56.json | 519 --- .../data/LocalStateContract.clear.teal | 7 - .../StateAcctParamsGetContract.approval.teal | 836 ----- .../StateAcctParamsGetContract.arc32.json | 271 -- .../StateAcctParamsGetContract.arc56.json | 462 --- .../StateAcctParamsGetContract.clear.teal | 7 - .../data/StateAppGlobalContract.approval.teal | 311 -- .../data/StateAppGlobalContract.arc32.json | 188 -- .../data/StateAppGlobalContract.arc56.json | 272 -- .../data/StateAppGlobalContract.clear.teal | 7 - .../StateAppGlobalExContract.approval.teal | 57 - .../data/StateAppGlobalExContract.arc32.json | 60 - .../data/StateAppGlobalExContract.arc56.json | 104 - .../data/StateAppGlobalExContract.clear.teal | 7 - .../data/StateAppLocalContract.approval.teal | 418 --- .../data/StateAppLocalContract.arc32.json | 251 -- .../data/StateAppLocalContract.arc56.json | 350 -- .../data/StateAppLocalContract.clear.teal | 7 - .../StateAppLocalExContract.approval.teal | 79 - .../data/StateAppLocalExContract.arc32.json | 63 - .../data/StateAppLocalExContract.arc56.json | 118 - .../data/StateAppLocalExContract.clear.teal | 7 - .../data/StateAppParamsContract.approval.teal | 552 --- .../data/StateAppParamsContract.arc32.json | 199 -- .../data/StateAppParamsContract.arc56.json | 319 -- .../data/StateAppParamsContract.clear.teal | 7 - .../StateAssetHoldingContract.approval.teal | 122 - .../data/StateAssetHoldingContract.arc32.json | 81 - .../data/StateAssetHoldingContract.arc56.json | 138 - .../data/StateAssetHoldingContract.clear.teal | 7 - .../StateAssetParamsContract.approval.teal | 733 ---- .../data/StateAssetParamsContract.arc32.json | 253 -- .../data/StateAssetParamsContract.arc56.json | 394 --- .../data/StateAssetParamsContract.clear.teal | 7 - tests/crypto-op-codes.spec.ts | 2 +- tests/global-state-arc4-values.spec.ts | 2 +- tests/local-state-arc4-values.spec.ts | 2 +- tests/log.spec.ts | 2 +- tests/multi-inheritance.spec.ts | 2 +- tests/primitives/biguint.spec.ts | 2 +- tests/primitives/bytes.spec.ts | 2 +- tests/primitives/uint64.spec.ts | 2 +- tests/pure-op-codes.spec.ts | 2 +- tests/state-op-codes.spec.ts | 2 +- tests/test-fixture.ts | 149 +- tests/util.ts | 42 +- vitest.config.mts | 1 + 107 files changed, 156 insertions(+), 30621 deletions(-) delete mode 100644 tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal delete mode 100644 tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json delete mode 100644 tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json delete mode 100644 tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal delete mode 100644 tests/artifacts/box-contract/data/BoxContract.approval.teal delete mode 100644 tests/artifacts/box-contract/data/BoxContract.arc32.json delete mode 100644 tests/artifacts/box-contract/data/BoxContract.arc56.json delete mode 100644 tests/artifacts/box-contract/data/BoxContract.clear.teal delete mode 100644 tests/artifacts/created-app-asset/data/AppExpectingEffects.approval.teal delete mode 100644 tests/artifacts/created-app-asset/data/AppExpectingEffects.arc32.json delete mode 100644 tests/artifacts/created-app-asset/data/AppExpectingEffects.arc56.json delete mode 100644 tests/artifacts/created-app-asset/data/AppExpectingEffects.clear.teal delete mode 100644 tests/artifacts/crypto-ops/data/CryptoOpsContract.approval.teal delete mode 100644 tests/artifacts/crypto-ops/data/CryptoOpsContract.arc32.json delete mode 100644 tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json delete mode 100644 tests/artifacts/crypto-ops/data/CryptoOpsContract.clear.teal delete mode 100644 tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.approval.teal delete mode 100644 tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc32.json delete mode 100644 tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc56.json delete mode 100644 tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.clear.teal delete mode 100644 tests/artifacts/multi-inheritance/data/BaseOne.approval.teal delete mode 100644 tests/artifacts/multi-inheritance/data/BaseOne.arc32.json delete mode 100644 tests/artifacts/multi-inheritance/data/BaseOne.arc56.json delete mode 100644 tests/artifacts/multi-inheritance/data/BaseOne.clear.teal delete mode 100644 tests/artifacts/multi-inheritance/data/BaseTwo.approval.teal delete mode 100644 tests/artifacts/multi-inheritance/data/BaseTwo.arc32.json delete mode 100644 tests/artifacts/multi-inheritance/data/BaseTwo.arc56.json delete mode 100644 tests/artifacts/multi-inheritance/data/BaseTwo.clear.teal delete mode 100644 tests/artifacts/multi-inheritance/data/CommonBase.approval.teal delete mode 100644 tests/artifacts/multi-inheritance/data/CommonBase.arc32.json delete mode 100644 tests/artifacts/multi-inheritance/data/CommonBase.arc56.json delete mode 100644 tests/artifacts/multi-inheritance/data/CommonBase.clear.teal delete mode 100644 tests/artifacts/multi-inheritance/data/MultiBases.approval.teal delete mode 100644 tests/artifacts/multi-inheritance/data/MultiBases.arc32.json delete mode 100644 tests/artifacts/multi-inheritance/data/MultiBases.arc56.json delete mode 100644 tests/artifacts/multi-inheritance/data/MultiBases.clear.teal delete mode 100644 tests/artifacts/primitive-ops/data/PrimitiveOpsContract.approval.teal delete mode 100644 tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc32.json delete mode 100644 tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json delete mode 100644 tests/artifacts/primitive-ops/data/PrimitiveOpsContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/GlobalStateContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/GlobalStateContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/GlobalStateContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/GlobalStateContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/ITxnOpsContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/ITxnOpsContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/ITxnOpsContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/ITxnOpsContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/ItxnDemoContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/ItxnDemoContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/LocalStateContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/LocalStateContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/LocalStateContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/LocalStateContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAcctParamsGetContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAcctParamsGetContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalExContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalExContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalExContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAppGlobalExContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalExContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalExContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalExContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAppLocalExContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppParamsContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAppParamsContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAppParamsContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAppParamsContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAssetHoldingContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAssetHoldingContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAssetHoldingContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAssetHoldingContract.clear.teal delete mode 100644 tests/artifacts/state-ops/data/StateAssetParamsContract.approval.teal delete mode 100644 tests/artifacts/state-ops/data/StateAssetParamsContract.arc32.json delete mode 100644 tests/artifacts/state-ops/data/StateAssetParamsContract.arc56.json delete mode 100644 tests/artifacts/state-ops/data/StateAssetParamsContract.clear.teal diff --git a/package-lock.json b/package-lock.json index 95f7bd3..c24b99f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "eslint": "9.12.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", + "glob": "^11.0.0", "npm-run-all": "4.1.5", "patch-package": "^8.0.0", "polytype": "^0.17.0", @@ -51,6 +52,7 @@ "semantic-release": "^24.1.2", "tsx": "4.19.1", "typescript": "^5.7.2", + "upath": "^2.0.1", "vitest": "2.1.2" }, "peerDependencies": { diff --git a/package.json b/package.json index 69e9c72..561679d 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "eslint": "9.12.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", + "glob": "^11.0.0", "npm-run-all": "4.1.5", "patch-package": "^8.0.0", "polytype": "^0.17.0", @@ -59,6 +60,7 @@ "semantic-release": "^24.1.2", "tsx": "4.19.1", "typescript": "^5.7.2", + "upath": "^2.0.1", "vitest": "2.1.2" }, "peerDependencies": { diff --git a/tests/arc4/bool.spec.ts b/tests/arc4/bool.spec.ts index c34d3fd..8cb3e4e 100644 --- a/tests/arc4/bool.spec.ts +++ b/tests/arc4/bool.spec.ts @@ -8,7 +8,7 @@ import { getAvmResult } from '../avm-invoker' import { createArc4TestFixture } from '../test-fixture' describe('arc4.Bool', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/contract.algo.ts', { Arc4PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) const ctx = new TestExecutionContext() diff --git a/tests/arc4/byte.spec.ts b/tests/arc4/byte.spec.ts index 20f4d01..4a1a2cc 100644 --- a/tests/arc4/byte.spec.ts +++ b/tests/arc4/byte.spec.ts @@ -11,7 +11,7 @@ import { createArc4TestFixture } from '../test-fixture' const invalidBytesLengthError = 'byte string must be 1 byte long' describe('arc4.Byte', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/contract.algo.ts', { Arc4PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) diff --git a/tests/arc4/emit.spec.ts b/tests/arc4/emit.spec.ts index 730192a..789886e 100644 --- a/tests/arc4/emit.spec.ts +++ b/tests/arc4/emit.spec.ts @@ -41,7 +41,7 @@ class SwappedArc4 extends arc4.Struct<{ }> {} describe('arc4.emit', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/contract.algo.ts', { Arc4PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) const ctx = new TestExecutionContext() diff --git a/tests/arc4/str.spec.ts b/tests/arc4/str.spec.ts index e1d3f6c..6076da0 100644 --- a/tests/arc4/str.spec.ts +++ b/tests/arc4/str.spec.ts @@ -9,7 +9,7 @@ import { getAvmResult } from '../avm-invoker' import { createArc4TestFixture } from '../test-fixture' describe('arc4.Str', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/contract.algo.ts', { Arc4PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) const ctx = new TestExecutionContext() diff --git a/tests/arc4/ufixednxm.spec.ts b/tests/arc4/ufixednxm.spec.ts index 6d43bc4..d8b6259 100644 --- a/tests/arc4/ufixednxm.spec.ts +++ b/tests/arc4/ufixednxm.spec.ts @@ -11,7 +11,7 @@ import { createArc4TestFixture } from '../test-fixture' const invalidBytesLengthError = (length: number) => `byte string must correspond to a ufixed${length}` describe('arc4.UFixedNxM', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/contract.algo.ts', { Arc4PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) const ctx = new TestExecutionContext() diff --git a/tests/arc4/uintn.spec.ts b/tests/arc4/uintn.spec.ts index d5075cf..3653f1c 100644 --- a/tests/arc4/uintn.spec.ts +++ b/tests/arc4/uintn.spec.ts @@ -12,7 +12,7 @@ import { createArc4TestFixture } from '../test-fixture' const invalidBytesLengthError = (length: number) => `byte string must correspond to a uint${length}` describe('arc4.UintN', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/arc4-primitive-ops/contract.algo.ts', { Arc4PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) const ctx = new TestExecutionContext() diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal deleted file mode 100644 index a4a66fd..0000000 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal +++ /dev/null @@ -1,2963 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 8 64 0 - bytecblock 0x151f7c75 0x00 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txn NumAppArgs - bz main_bare_routing@60 - pushbytess 0x96f14116 0xed666096 0x2ca0352b 0x85907d40 0x4eb2af4a 0x2cbec45b 0x07666fd9 0x370babd3 0x2b6b3ef0 0x27e21a98 0x339da97c 0x7898ed97 0x1f130cec 0xc748664e 0xa2bac14b 0x7a460cb1 0xdcab1f01 0x97d9064d 0xce06c2a0 0x7c11e375 0xdcdbcee0 0x77a4b68d 0x4f540626 0x095aed41 0xdf78cdc6 0xe3b7e918 0x55337008 0x9bb1cd66 0x81484d9d 0x79e9cb03 0x9a03df10 0xd3f0e44b 0x673db2bd 0x982db233 0xaffbdf0e 0x8e4a30f7 0x288af76e 0x8bd84a04 0xfcd55e1f 0x0f1574fe 0xb2cb13be 0xd059eea7 0x4cc4c157 0x3d17ac6e 0xf7f3d5fc 0xf8c8f8d5 0x43f7162a 0x42e09075 0xd956f575 0x6c0160df 0xa890150b 0x0b2f4c3f 0x9db9d327 0xe4d950a1 0xb605e80c // method "verify_uintn_uintn_eq(byte[],byte[])bool", method "verify_biguintn_uintn_eq(byte[],byte[])bool", method "verify_uintn_biguintn_eq(byte[],byte[])bool", method "verify_biguintn_biguintn_eq(byte[],byte[])bool", method "verify_byte_byte_eq(byte[],byte[])bool", method "verify_uintn_uintn_ne(byte[],byte[])bool", method "verify_biguintn_uintn_ne(byte[],byte[])bool", method "verify_uintn_biguintn_ne(byte[],byte[])bool", method "verify_biguintn_biguintn_ne(byte[],byte[])bool", method "verify_byte_byte_ne(byte[],byte[])bool", method "verify_uintn_uintn_lt(byte[],byte[])bool", method "verify_biguintn_uintn_lt(byte[],byte[])bool", method "verify_uintn_biguintn_lt(byte[],byte[])bool", method "verify_biguintn_biguintn_lt(byte[],byte[])bool", method "verify_byte_byte_lt(byte[],byte[])bool", method "verify_uintn_uintn_le(byte[],byte[])bool", method "verify_biguintn_uintn_le(byte[],byte[])bool", method "verify_uintn_biguintn_le(byte[],byte[])bool", method "verify_biguintn_biguintn_le(byte[],byte[])bool", method "verify_byte_byte_le(byte[],byte[])bool", method "verify_uintn_uintn_gt(byte[],byte[])bool", method "verify_biguintn_uintn_gt(byte[],byte[])bool", method "verify_uintn_biguintn_gt(byte[],byte[])bool", method "verify_biguintn_biguintn_gt(byte[],byte[])bool", method "verify_byte_byte_gt(byte[],byte[])bool", method "verify_uintn_uintn_ge(byte[],byte[])bool", method "verify_biguintn_uintn_ge(byte[],byte[])bool", method "verify_uintn_biguintn_ge(byte[],byte[])bool", method "verify_biguintn_biguintn_ge(byte[],byte[])bool", method "verify_byte_byte_ge(byte[],byte[])bool", method "verify_uintn_init(byte[])uint32", method "verify_biguintn_init(byte[])uint256", method "verify_byte_init(byte[])byte", method "verify_uintn_from_bytes(byte[])uint32", method "verify_biguintn_from_bytes(byte[])uint256", method "verify_byte_from_bytes(byte[])byte", method "verify_uintn_from_log(byte[])uint32", method "verify_biguintn_from_log(byte[])uint256", method "verify_byte_from_log(byte[])byte", method "verify_ufixednxm_bytes(ufixed32x8)byte[]", method "verify_bigufixednxm_bytes(ufixed256x16)byte[]", method "verify_ufixednxm_from_bytes(byte[])ufixed32x8", method "verify_bigufixednxm_from_bytes(byte[])ufixed256x16", method "verify_ufixednxm_from_log(byte[])ufixed32x8", method "verify_bigufixednxm_from_log(byte[])ufixed256x16", method "verify_string_init(string)string", method "verify_string_add(string,string)string", method "verify_string_eq(string,string)bool", method "verify_string_bytes(string)byte[]", method "verify_string_from_bytes(byte[])string", method "verify_string_from_log(byte[])string", method "verify_bool_bytes(bool)byte[]", method "verify_bool_from_bytes(byte[])bool", method "verify_bool_from_log(byte[])bool", method "verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void" - txna ApplicationArgs 0 - match main_verify_uintn_uintn_eq_route@3 main_verify_biguintn_uintn_eq_route@4 main_verify_uintn_biguintn_eq_route@5 main_verify_biguintn_biguintn_eq_route@6 main_verify_byte_byte_eq_route@7 main_verify_uintn_uintn_ne_route@8 main_verify_biguintn_uintn_ne_route@9 main_verify_uintn_biguintn_ne_route@10 main_verify_biguintn_biguintn_ne_route@11 main_verify_byte_byte_ne_route@12 main_verify_uintn_uintn_lt_route@13 main_verify_biguintn_uintn_lt_route@14 main_verify_uintn_biguintn_lt_route@15 main_verify_biguintn_biguintn_lt_route@16 main_verify_byte_byte_lt_route@17 main_verify_uintn_uintn_le_route@18 main_verify_biguintn_uintn_le_route@19 main_verify_uintn_biguintn_le_route@20 main_verify_biguintn_biguintn_le_route@21 main_verify_byte_byte_le_route@22 main_verify_uintn_uintn_gt_route@23 main_verify_biguintn_uintn_gt_route@24 main_verify_uintn_biguintn_gt_route@25 main_verify_biguintn_biguintn_gt_route@26 main_verify_byte_byte_gt_route@27 main_verify_uintn_uintn_ge_route@28 main_verify_biguintn_uintn_ge_route@29 main_verify_uintn_biguintn_ge_route@30 main_verify_biguintn_biguintn_ge_route@31 main_verify_byte_byte_ge_route@32 main_verify_uintn_init_route@33 main_verify_biguintn_init_route@34 main_verify_byte_init_route@35 main_verify_uintn_from_bytes_route@36 main_verify_biguintn_from_bytes_route@37 main_verify_byte_from_bytes_route@38 main_verify_uintn_from_log_route@39 main_verify_biguintn_from_log_route@40 main_verify_byte_from_log_route@41 main_verify_ufixednxm_bytes_route@42 main_verify_bigufixednxm_bytes_route@43 main_verify_ufixednxm_from_bytes_route@44 main_verify_bigufixednxm_from_bytes_route@45 main_verify_ufixednxm_from_log_route@46 main_verify_bigufixednxm_from_log_route@47 main_verify_string_init_route@48 main_verify_string_add_route@49 main_verify_string_eq_route@50 main_verify_string_bytes_route@51 main_verify_string_from_bytes_route@52 main_verify_string_from_log_route@53 main_verify_bool_bytes_route@54 main_verify_bool_from_bytes_route@55 main_verify_bool_from_log_route@56 main_verify_emit_route@57 - -main_after_if_else@64: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - intc_3 // 0 - return - -main_verify_emit_route@57: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:351 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - txna ApplicationArgs 2 - txna ApplicationArgs 3 - txna ApplicationArgs 4 - txna ApplicationArgs 5 - txna ApplicationArgs 6 - txna ApplicationArgs 7 - txna ApplicationArgs 8 - txna ApplicationArgs 9 - txna ApplicationArgs 10 - txna ApplicationArgs 11 - txna ApplicationArgs 12 - txna ApplicationArgs 13 - txna ApplicationArgs 14 - extract 2 0 - txna ApplicationArgs 15 - dup - intc_3 // 0 - extract_uint16 - dig 1 - pushint 2 // 2 - extract_uint16 - substring3 - extract 2 0 - txna ApplicationArgs 15 - dup - pushint 2 // 2 - extract_uint16 - dig 1 - len - substring3 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:351 - // @arc4.abimethod() - callsub verify_emit - intc_0 // 1 - return - -main_verify_bool_from_log_route@56: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:345 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:345 - // @arc4.abimethod() - callsub verify_bool_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bool_from_bytes_route@55: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:341 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:341 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bool_bytes_route@54: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:337 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:337 - // @arc4.abimethod() - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_string_from_log_route@53: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:333 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:333 - // @arc4.abimethod() - callsub verify_string_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_string_from_bytes_route@52: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:329 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:329 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_string_bytes_route@51: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:324 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:324 - // @arc4.abimethod() - callsub verify_string_bytes - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_string_eq_route@50: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:320 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - txna ApplicationArgs 2 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:320 - // @arc4.abimethod() - callsub verify_string_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_string_add_route@49: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:315 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - txna ApplicationArgs 2 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:315 - // @arc4.abimethod() - callsub verify_string_add - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_string_init_route@48: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:310 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:310 - // @arc4.abimethod() - callsub verify_string_init - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bigufixednxm_from_log_route@47: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:306 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:306 - // @arc4.abimethod() - callsub verify_bigufixednxm_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_ufixednxm_from_log_route@46: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:302 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:302 - // @arc4.abimethod() - callsub verify_ufixednxm_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bigufixednxm_from_bytes_route@45: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:298 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:298 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_ufixednxm_from_bytes_route@44: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:294 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:294 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bigufixednxm_bytes_route@43: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:290 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:290 - // @arc4.abimethod() - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_ufixednxm_bytes_route@42: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:286 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:286 - // @arc4.abimethod() - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_from_log_route@41: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:282 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:282 - // @arc4.abimethod() - callsub verify_byte_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_from_log_route@40: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:278 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:278 - // @arc4.abimethod() - callsub verify_biguintn_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_from_log_route@39: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:274 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:274 - // @arc4.abimethod() - callsub verify_uintn_from_log - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_from_bytes_route@38: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:270 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:270 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_from_bytes_route@37: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:266 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:266 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_from_bytes_route@36: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:262 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:262 - // @arc4.abimethod() - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_init_route@35: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:257 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:257 - // @arc4.abimethod() - callsub verify_byte_init - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_init_route@34: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:252 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:252 - // @arc4.abimethod() - callsub verify_biguintn_init - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_init_route@33: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:247 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:247 - // @arc4.abimethod() - callsub verify_uintn_init - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_byte_ge_route@32: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:239 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:239 - // @arc4.abimethod() - callsub verify_byte_byte_ge - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_biguintn_ge_route@31: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:231 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:231 - // @arc4.abimethod() - callsub verify_biguintn_biguintn_ge - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_biguintn_ge_route@30: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:223 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:223 - // @arc4.abimethod() - callsub verify_uintn_biguintn_ge - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_uintn_ge_route@29: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:215 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:215 - // @arc4.abimethod() - callsub verify_biguintn_uintn_ge - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_uintn_ge_route@28: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:207 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:207 - // @arc4.abimethod() - callsub verify_uintn_uintn_ge - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_byte_gt_route@27: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:199 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:199 - // @arc4.abimethod() - callsub verify_byte_byte_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_biguintn_gt_route@26: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:191 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:191 - // @arc4.abimethod() - callsub verify_biguintn_biguintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_biguintn_gt_route@25: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:183 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:183 - // @arc4.abimethod() - callsub verify_uintn_biguintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_uintn_gt_route@24: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:175 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:175 - // @arc4.abimethod() - callsub verify_biguintn_uintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_uintn_gt_route@23: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:167 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:167 - // @arc4.abimethod() - callsub verify_uintn_uintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_byte_le_route@22: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:159 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:159 - // @arc4.abimethod() - callsub verify_byte_byte_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_biguintn_le_route@21: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:151 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:151 - // @arc4.abimethod() - callsub verify_biguintn_biguintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_biguintn_le_route@20: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:143 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:143 - // @arc4.abimethod() - callsub verify_uintn_biguintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_uintn_le_route@19: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:135 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:135 - // @arc4.abimethod() - callsub verify_biguintn_uintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_uintn_le_route@18: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:127 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:127 - // @arc4.abimethod() - callsub verify_uintn_uintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_byte_lt_route@17: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:119 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:119 - // @arc4.abimethod() - callsub verify_byte_byte_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_biguintn_lt_route@16: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:111 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:111 - // @arc4.abimethod() - callsub verify_biguintn_biguintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_biguintn_lt_route@15: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:103 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:103 - // @arc4.abimethod() - callsub verify_uintn_biguintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_uintn_lt_route@14: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:95 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:95 - // @arc4.abimethod() - callsub verify_biguintn_uintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_uintn_lt_route@13: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:87 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:87 - // @arc4.abimethod() - callsub verify_uintn_uintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_byte_ne_route@12: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:79 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:79 - // @arc4.abimethod() - callsub verify_byte_byte_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_biguintn_ne_route@11: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:71 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:71 - // @arc4.abimethod() - callsub verify_biguintn_biguintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_biguintn_ne_route@10: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:63 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:63 - // @arc4.abimethod() - callsub verify_uintn_biguintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_uintn_ne_route@9: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:55 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:55 - // @arc4.abimethod() - callsub verify_biguintn_uintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_uintn_ne_route@8: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:47 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:47 - // @arc4.abimethod() - callsub verify_uintn_uintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_byte_byte_eq_route@7: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:39 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:39 - // @arc4.abimethod() - callsub verify_byte_byte_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_biguintn_eq_route@6: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:31 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:31 - // @arc4.abimethod() - callsub verify_biguintn_biguintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_biguintn_eq_route@5: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:23 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:23 - // @arc4.abimethod() - callsub verify_uintn_biguintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguintn_uintn_eq_route@4: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:15 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:15 - // @arc4.abimethod() - callsub verify_biguintn_uintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uintn_uintn_eq_route@3: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:7 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:7 - // @arc4.abimethod() - callsub verify_uintn_uintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@60: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:6 - // export class Arc4PrimitiveOpsContract extends Contract { - txn OnCompletion - bnz main_after_if_else@64 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_eq(a: bytes, b: bytes) -> uint64: -verify_uintn_uintn_eq: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:7-8 - // @arc4.abimethod() - // public verify_uintn_uintn_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:11 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:12 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:13 - // return aUintN === bUintN - == - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_uintn_eq(a: bytes, b: bytes) -> uint64: -verify_biguintn_uintn_eq: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:15-16 - // @arc4.abimethod() - // public verify_biguintn_uintn_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:19 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:20 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:21 - // return aUintN.bytes.equals(bUintN.bytes) - == - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_biguintn_eq(a: bytes, b: bytes) -> uint64: -verify_uintn_biguintn_eq: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:23-24 - // @arc4.abimethod() - // public verify_uintn_biguintn_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:27 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:28 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:29 - // return aUintN.bytes.equals(bUintN.bytes) - == - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_biguintn_eq(a: bytes, b: bytes) -> uint64: -verify_biguintn_biguintn_eq: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:31-32 - // @arc4.abimethod() - // public verify_biguintn_biguintn_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:35 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:36 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:37 - // return aUintN === bUintN - == - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_byte_eq(a: bytes, b: bytes) -> uint64: -verify_byte_byte_eq: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:39-40 - // @arc4.abimethod() - // public verify_byte_byte_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:43 - // const aByte = new Byte(aBiguint) - frame_dig -2 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:44 - // const bByte = new Byte(bBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:45 - // return aByte === bByte - == - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_ne(a: bytes, b: bytes) -> uint64: -verify_uintn_uintn_ne: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:47-48 - // @arc4.abimethod() - // public verify_uintn_uintn_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:51 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:52 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:53 - // return aUintN !== bUintN - != - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_uintn_ne(a: bytes, b: bytes) -> uint64: -verify_biguintn_uintn_ne: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:55-56 - // @arc4.abimethod() - // public verify_biguintn_uintn_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:59 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:60 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:61 - // return !aUintN.bytes.equals(bUintN.bytes) - == - ! - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_biguintn_ne(a: bytes, b: bytes) -> uint64: -verify_uintn_biguintn_ne: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:63-64 - // @arc4.abimethod() - // public verify_uintn_biguintn_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:67 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:68 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:69 - // return !aUintN.bytes.equals(bUintN.bytes) - == - ! - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_biguintn_ne(a: bytes, b: bytes) -> uint64: -verify_biguintn_biguintn_ne: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:71-72 - // @arc4.abimethod() - // public verify_biguintn_biguintn_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:75 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:76 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:77 - // return aUintN !== bUintN - != - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_byte_ne(a: bytes, b: bytes) -> uint64: -verify_byte_byte_ne: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:79-80 - // @arc4.abimethod() - // public verify_byte_byte_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:83 - // const aByte = new Byte(aBiguint) - frame_dig -2 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:84 - // const bByte = new Byte(bBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:85 - // return aByte !== bByte - != - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_lt(a: bytes, b: bytes) -> uint64: -verify_uintn_uintn_lt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:87-88 - // @arc4.abimethod() - // public verify_uintn_uintn_lt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:91 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:92 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:93 - // return aUintN.native < bUintN.native - swap - btoi - swap - btoi - < - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_uintn_lt(a: bytes, b: bytes) -> uint64: -verify_biguintn_uintn_lt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:95-96 - // @arc4.abimethod() - // public verify_biguintn_uintn_lt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:99 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:100 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:101 - // return aUintN.native < BigUint(bUintN.native) - btoi - itob - b< - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_biguintn_lt(a: bytes, b: bytes) -> uint64: -verify_uintn_biguintn_lt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:103-104 - // @arc4.abimethod() - // public verify_uintn_biguintn_lt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:107 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:108 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:109 - // return BigUint(aUintN.native) < bUintN.native - swap - btoi - itob - b> - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_biguintn_lt(a: bytes, b: bytes) -> uint64: -verify_biguintn_biguintn_lt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:111-112 - // @arc4.abimethod() - // public verify_biguintn_biguintn_lt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:115 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:116 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:117 - // return aUintN.native < bUintN.native - b< - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_byte_lt(a: bytes, b: bytes) -> uint64: -verify_byte_byte_lt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:119-120 - // @arc4.abimethod() - // public verify_byte_byte_lt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:123 - // const aByte = new Byte(aBiguint) - frame_dig -2 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:124 - // const bByte = new Byte(bBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:125 - // return aByte.native < bByte.native - swap - btoi - swap - btoi - < - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_le(a: bytes, b: bytes) -> uint64: -verify_uintn_uintn_le: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:127-128 - // @arc4.abimethod() - // public verify_uintn_uintn_le(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:131 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:132 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:133 - // return aUintN.native <= bUintN.native - swap - btoi - swap - btoi - <= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_uintn_le(a: bytes, b: bytes) -> uint64: -verify_biguintn_uintn_le: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:135-136 - // @arc4.abimethod() - // public verify_biguintn_uintn_le(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:139 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:140 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:141 - // return aUintN.native <= BigUint(bUintN.native) - btoi - itob - b<= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_biguintn_le(a: bytes, b: bytes) -> uint64: -verify_uintn_biguintn_le: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:143-144 - // @arc4.abimethod() - // public verify_uintn_biguintn_le(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:147 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:148 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:149 - // return BigUint(aUintN.native) <= bUintN.native - swap - btoi - itob - b>= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_biguintn_le(a: bytes, b: bytes) -> uint64: -verify_biguintn_biguintn_le: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:151-152 - // @arc4.abimethod() - // public verify_biguintn_biguintn_le(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:155 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:156 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:157 - // return aUintN.native <= bUintN.native - b<= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_byte_le(a: bytes, b: bytes) -> uint64: -verify_byte_byte_le: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:159-160 - // @arc4.abimethod() - // public verify_byte_byte_le(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:163 - // const aByte = new Byte(aBiguint) - frame_dig -2 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:164 - // const bByte = new Byte(bBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:165 - // return aByte.native <= bByte.native - swap - btoi - swap - btoi - <= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_gt(a: bytes, b: bytes) -> uint64: -verify_uintn_uintn_gt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:167-168 - // @arc4.abimethod() - // public verify_uintn_uintn_gt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:171 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:172 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:173 - // return aUintN.native > bUintN.native - swap - btoi - swap - btoi - > - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_uintn_gt(a: bytes, b: bytes) -> uint64: -verify_biguintn_uintn_gt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:175-176 - // @arc4.abimethod() - // public verify_biguintn_uintn_gt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:179 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:180 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:181 - // return aUintN.native > BigUint(bUintN.native) - btoi - itob - b> - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_biguintn_gt(a: bytes, b: bytes) -> uint64: -verify_uintn_biguintn_gt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:183-184 - // @arc4.abimethod() - // public verify_uintn_biguintn_gt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:187 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:188 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:189 - // return BigUint(aUintN.native) > bUintN.native - swap - btoi - itob - b< - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_biguintn_gt(a: bytes, b: bytes) -> uint64: -verify_biguintn_biguintn_gt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:191-192 - // @arc4.abimethod() - // public verify_biguintn_biguintn_gt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:195 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:196 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:197 - // return aUintN.native > bUintN.native - b> - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_byte_gt(a: bytes, b: bytes) -> uint64: -verify_byte_byte_gt: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:199-200 - // @arc4.abimethod() - // public verify_byte_byte_gt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:203 - // const aByte = new Byte(aBiguint) - frame_dig -2 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:204 - // const bByte = new Byte(bBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:205 - // return aByte.native > bByte.native - swap - btoi - swap - btoi - > - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_ge(a: bytes, b: bytes) -> uint64: -verify_uintn_uintn_ge: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:207-208 - // @arc4.abimethod() - // public verify_uintn_uintn_ge(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:211 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:212 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:213 - // return aUintN.native >= bUintN.native - swap - btoi - swap - btoi - >= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_uintn_ge(a: bytes, b: bytes) -> uint64: -verify_biguintn_uintn_ge: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:215-216 - // @arc4.abimethod() - // public verify_biguintn_uintn_ge(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:219 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:220 - // const bUintN = new UintN<64>(bBiguint) - frame_dig -1 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:221 - // return aUintN.native >= BigUint(bUintN.native) - btoi - itob - b>= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_biguintn_ge(a: bytes, b: bytes) -> uint64: -verify_uintn_biguintn_ge: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:223-224 - // @arc4.abimethod() - // public verify_uintn_biguintn_ge(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:227 - // const aUintN = new UintN<64>(aBiguint) - frame_dig -2 - len - intc_1 // 8 - <= - assert // overflow - intc_1 // 8 - bzero - frame_dig -2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:228 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:229 - // return BigUint(aUintN.native) >= bUintN.native - swap - btoi - itob - b<= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_biguintn_ge(a: bytes, b: bytes) -> uint64: -verify_biguintn_biguintn_ge: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:231-232 - // @arc4.abimethod() - // public verify_biguintn_biguintn_ge(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:235 - // const aUintN = new UintN<512>(aBiguint) - frame_dig -2 - len - intc_2 // 64 - <= - assert // overflow - intc_2 // 64 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:236 - // const bUintN = new UintN<512>(bBiguint) - frame_dig -1 - len - intc_2 // 64 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:237 - // return aUintN.native >= bUintN.native - b>= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_byte_ge(a: bytes, b: bytes) -> uint64: -verify_byte_byte_ge: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:239-240 - // @arc4.abimethod() - // public verify_byte_byte_ge(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:243 - // const aByte = new Byte(aBiguint) - frame_dig -2 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -2 - dig 1 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:244 - // const bByte = new Byte(bBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - frame_dig -1 - uncover 2 - b| - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:245 - // return aByte.native >= bByte.native - swap - btoi - swap - btoi - >= - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_init(a: bytes) -> bytes: -verify_uintn_init: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:247-248 - // @arc4.abimethod() - // public verify_uintn_init(a: bytes): UintN<32> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:250 - // return new UintN<32>(aBiguint) - frame_dig -1 - len - pushint 4 // 4 - <= - assert // overflow - pushint 4 // 4 - bzero - frame_dig -1 - b| - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_init(a: bytes) -> bytes: -verify_biguintn_init: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:252-253 - // @arc4.abimethod() - // public verify_biguintn_init(a: bytes): UintN<256> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:255 - // return new UintN<256>(aBiguint) - frame_dig -1 - len - pushint 32 // 32 - <= - assert // overflow - pushint 32 // 32 - bzero - frame_dig -1 - b| - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_init(a: bytes) -> bytes: -verify_byte_init: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:257-258 - // @arc4.abimethod() - // public verify_byte_init(a: bytes): Byte { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:260 - // return new Byte(aBiguint) - frame_dig -1 - len - intc_0 // 1 - <= - assert // overflow - intc_0 // 1 - bzero - frame_dig -1 - b| - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_from_log(a: bytes) -> bytes: -verify_uintn_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:274-275 - // @arc4.abimethod() - // public verify_uintn_from_log(a: bytes): UintN<32> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:276 - // return interpretAsArc4>(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_from_log(a: bytes) -> bytes: -verify_biguintn_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:278-279 - // @arc4.abimethod() - // public verify_biguintn_from_log(a: bytes): UintN<256> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:280 - // return interpretAsArc4>(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_from_log(a: bytes) -> bytes: -verify_byte_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:282-283 - // @arc4.abimethod() - // public verify_byte_from_log(a: bytes): Byte { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:284 - // return interpretAsArc4(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_ufixednxm_from_log(a: bytes) -> bytes: -verify_ufixednxm_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:302-303 - // @arc4.abimethod() - // public verify_ufixednxm_from_log(a: bytes): UFixedNxM<32, 8> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:304 - // return interpretAsArc4>(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bigufixednxm_from_log(a: bytes) -> bytes: -verify_bigufixednxm_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:306-307 - // @arc4.abimethod() - // public verify_bigufixednxm_from_log(a: bytes): UFixedNxM<256, 16> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:308 - // return interpretAsArc4>(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_init(a: bytes) -> bytes: -verify_string_init: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:310-311 - // @arc4.abimethod() - // public verify_string_init(a: string): Str { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:312 - // const result = new Str(`Hello, ${a}`) - pushbytes "Hello, " - frame_dig -1 - concat - dup - len - itob - extract 6 2 - swap - concat - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:313 - // return result - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_add(a: bytes, b: bytes) -> bytes: -verify_string_add: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:315-316 - // @arc4.abimethod() - // public verify_string_add(a: Str, b: Str): Str { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:317 - // const result = a.native.concat(b.native) - frame_dig -2 - extract 2 0 - frame_dig -1 - extract 2 0 - concat - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:318 - // return new Str(result) - dup - len - itob - extract 6 2 - swap - concat - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_eq(a: bytes, b: bytes) -> uint64: -verify_string_eq: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:320-321 - // @arc4.abimethod() - // public verify_string_eq(a: Str, b: Str): boolean { - proto 2 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:322 - // return a === b - frame_dig -2 - frame_dig -1 - == - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_bytes(a: bytes) -> bytes: -verify_string_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:324-325 - // @arc4.abimethod() - // public verify_string_bytes(a: string): bytes { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:326 - // const result = new Str(a) - frame_dig -1 - len - itob - extract 6 2 - frame_dig -1 - concat - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:327 - // return result.bytes - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_from_log(a: bytes) -> bytes: -verify_string_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:333-334 - // @arc4.abimethod() - // public verify_string_from_log(a: bytes): Str { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:335 - // return interpretAsArc4(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bool_from_log(a: bytes) -> bytes: -verify_bool_from_log: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:345-346 - // @arc4.abimethod() - // public verify_bool_from_log(a: bytes): Bool { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:347 - // return interpretAsArc4(a, 'log') - frame_dig -1 - extract 4 0 - frame_dig -1 - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_emit(a: bytes, b: bytes, c: bytes, d: bytes, e: bytes, f: bytes, g: bytes, h: bytes, m: bytes, n: bytes, o: bytes, p: bytes, q: bytes, r: bytes, s: bytes, t: bytes) -> void: -verify_emit: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:351-369 - // @arc4.abimethod() - // public verify_emit( - // a: arc4.Str, - // b: arc4.UintN<512>, - // c: arc4.UintN64, - // d: arc4.DynamicBytes, - // e: arc4.UintN64, - // f: arc4.Bool, - // g: arc4.DynamicBytes, - // h: arc4.Str, - // m: arc4.UintN<64>, - // n: arc4.UintN<256>, - // o: arc4.UFixedNxM<32, 8>, - // p: arc4.UFixedNxM<256, 16>, - // q: arc4.Bool, - // r: bytes, - // s: bytes, - // t: bytes, - // ): void { - proto 16 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:374 - // emit(new SwappedArc4({ m, n, o, p, q, r: arc4_r, s: arc4_s, t: arc4_t })) - frame_dig -8 - frame_dig -7 - concat - frame_dig -6 - concat - frame_dig -5 - concat - frame_dig -4 - concat - frame_dig -3 - concat - pushbytes 0x0054 - concat - frame_dig -2 - len - pushint 84 // 84 - dig 1 - + - itob - extract 6 2 - uncover 2 - swap - concat - frame_dig -2 - concat - frame_dig -1 - concat - pushbytes 0x66bb0333 // method "SwappedArc4(uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))" - swap - concat - log - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:375 - // emit('Swapped', a, b, c, d, e, f, g, h, m, n, o, p, q, arc4_r.copy(), arc4_s.copy(), arc4_t) - frame_dig -16 - len - pushint 173 // 173 - + - pushbytes 0x00ad - frame_dig -15 - concat - frame_dig -14 - concat - dig 1 - itob - extract 6 2 - concat - frame_dig -13 - len - uncover 2 - + - swap - frame_dig -12 - concat - frame_dig -11 - concat - dig 1 - itob - extract 6 2 - concat - frame_dig -10 - len - uncover 2 - + - dup - itob - extract 6 2 - uncover 2 - swap - concat - frame_dig -9 - len - uncover 2 - + - swap - frame_dig -8 - concat - frame_dig -7 - concat - frame_dig -6 - concat - frame_dig -5 - concat - frame_dig -4 - concat - frame_dig -3 - concat - dig 1 - itob - extract 6 2 - concat - swap - uncover 2 - + - itob - extract 6 2 - concat - frame_dig -16 - concat - frame_dig -13 - concat - frame_dig -10 - concat - frame_dig -9 - concat - frame_dig -2 - concat - frame_dig -1 - concat - pushbytes 0xec3319bb // method "Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))" - swap - concat - dup - log - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:376-394 - // emit( - // 'Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))', - // a, - // b, - // c, - // d, - // e, - // f, - // g, - // h, - // m, - // n, - // o, - // p, - // q, - // arc4_r.copy(), - // arc4_s.copy(), - // arc4_t, - // ) - log - retsub diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json deleted file mode 100644 index fc45c9c..0000000 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json +++ /dev/null @@ -1,1215 +0,0 @@ -{ - "hints": { - "verify_uintn_uintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_init(byte[])uint32": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_init(byte[])uint256": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_init(byte[])byte": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_from_bytes(byte[])uint32": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_from_bytes(byte[])uint256": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_from_bytes(byte[])byte": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_from_log(byte[])uint32": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_from_log(byte[])uint256": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_from_log(byte[])byte": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ufixednxm_bytes(ufixed32x8)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bigufixednxm_bytes(ufixed256x16)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ufixednxm_from_bytes(byte[])ufixed32x8": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bigufixednxm_from_bytes(byte[])ufixed256x16": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ufixednxm_from_log(byte[])ufixed32x8": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bigufixednxm_from_log(byte[])ufixed256x16": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_init(string)string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_add(string,string)string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_eq(string,string)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_bytes(string)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_from_bytes(byte[])string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_from_log(byte[])string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bool_bytes(bool)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bool_from_bytes(byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bool_from_log(byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSA4IDY0IDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2MAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4NGViMmFmNGEgMHgyY2JlYzQ1YiAweDA3NjY2ZmQ5IDB4MzcwYmFiZDMgMHgyYjZiM2VmMCAweDI3ZTIxYTk4IDB4MzM5ZGE5N2MgMHg3ODk4ZWQ5NyAweDFmMTMwY2VjIDB4Yzc0ODY2NGUgMHhhMmJhYzE0YiAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4N2MxMWUzNzUgMHhkY2RiY2VlMCAweDc3YTRiNjhkIDB4NGY1NDA2MjYgMHgwOTVhZWQ0MSAweGRmNzhjZGM2IDB4ZTNiN2U5MTggMHg1NTMzNzAwOCAweDliYjFjZDY2IDB4ODE0ODRkOWQgMHg3OWU5Y2IwMyAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg2NzNkYjJiZCAweDk4MmRiMjMzIDB4YWZmYmRmMGUgMHg4ZTRhMzBmNyAweDI4OGFmNzZlIDB4OGJkODRhMDQgMHhmY2Q1NWUxZiAweDBmMTU3NGZlIDB4YjJjYjEzYmUgMHhkMDU5ZWVhNyAweDRjYzRjMTU3IDB4M2QxN2FjNmUgMHhmN2YzZDVmYyAweGY4YzhmOGQ1IDB4NDNmNzE2MmEgMHg0MmUwOTA3NSAweGQ5NTZmNTc1IDB4NmMwMTYwZGYgMHhhODkwMTUwYiAweDBiMmY0YzNmIDB4OWRiOWQzMjcgMHhlNGQ5NTBhMSAweGI2MDVlODBjIC8vIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQyNTYiLCBtZXRob2QgInZlcmlmeV9ieXRlX2luaXQoYnl0ZVtdKWJ5dGUiLCBtZXRob2QgInZlcmlmeV91aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzKGJ5dGVbXSlieXRlIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fZnJvbV9sb2coYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2xvZyhieXRlW10pYnl0ZSIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQzMng4KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQyNTZ4MTYpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXMoYnl0ZVtdKXVmaXhlZDMyeDgiLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlcyhieXRlW10pdWZpeGVkMjU2eDE2IiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQzMng4IiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQyNTZ4MTYiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfaW5pdChzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2FkZChzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19lcShzdHJpbmcsc3RyaW5nKWJvb2wiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfYnl0ZXMoc3RyaW5nKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGJ5dGVbXSlzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYnl0ZVtdKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X2Jvb2xfYnl0ZXMoYm9vbClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fYnl0ZXMoYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fbG9nKGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZW1pdChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCxieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfdWludG5fdWludG5fZXFfcm91dGVAMyBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxX3JvdXRlQDUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZXFfcm91dGVANiBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9uZV9yb3V0ZUA4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lX3JvdXRlQDkgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbmVfcm91dGVAMTAgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbmVfcm91dGVAMTEgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX25lX3JvdXRlQDEyIG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDE0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE1IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE2IG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sdF9yb3V0ZUAxNyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9sZV9yb3V0ZUAxOCBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sZV9yb3V0ZUAxOSBtYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMCBtYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMSBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfbGVfcm91dGVAMjIgbWFpbl92ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjMgbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fZ3Rfcm91dGVAMjQgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fZ3Rfcm91dGVAMjUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjYgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2d0X3JvdXRlQDI3IG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI5IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMwIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMxIG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9nZV9yb3V0ZUAzMiBtYWluX3ZlcmlmeV91aW50bl9pbml0X3JvdXRlQDMzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2luaXRfcm91dGVAMzQgbWFpbl92ZXJpZnlfYnl0ZV9pbml0X3JvdXRlQDM1IG1haW5fdmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzYgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNyBtYWluX3ZlcmlmeV9ieXRlX2Zyb21fYnl0ZXNfcm91dGVAMzggbWFpbl92ZXJpZnlfdWludG5fZnJvbV9sb2dfcm91dGVAMzkgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9sb2dfcm91dGVANDAgbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2xvZ19yb3V0ZUA0MSBtYWluX3ZlcmlmeV91Zml4ZWRueG1fYnl0ZXNfcm91dGVANDIgbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzIG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ0IG1haW5fdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ1IG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZ19yb3V0ZUA0NiBtYWluX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDcgbWFpbl92ZXJpZnlfc3RyaW5nX2luaXRfcm91dGVANDggbWFpbl92ZXJpZnlfc3RyaW5nX2FkZF9yb3V0ZUA0OSBtYWluX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANTAgbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzX3JvdXRlQDUyIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MyBtYWluX3ZlcmlmeV9ib29sX2J5dGVzX3JvdXRlQDU0IG1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9ieXRlc19yb3V0ZUA1NSBtYWluX3ZlcmlmeV9ib29sX2Zyb21fbG9nX3JvdXRlQDU2IG1haW5fdmVyaWZ5X2VtaXRfcm91dGVANTcKCm1haW5fYWZ0ZXJfaWZfZWxzZUA2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18zIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZW1pdF9yb3V0ZUA1NzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDExCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDE0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VtaXQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9sb2dfcm91dGVANTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYm9vbF9mcm9tX2J5dGVzX3JvdXRlQDU1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfYnl0ZXNfcm91dGVANTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fbG9nX3JvdXRlQDUzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNfcm91dGVANTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19lcV9yb3V0ZUA1MDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19hZGRfcm91dGVANDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfYWRkCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zdHJpbmdfaW5pdF9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfaW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VmaXhlZG54bV9ieXRlc19yb3V0ZUA0MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2Zyb21fbG9nX3JvdXRlQDQxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9mcm9tX2xvZ19yb3V0ZUAzOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzX3JvdXRlQDM4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2luaXRfcm91dGVAMzU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9pbml0X3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2luaXRfcm91dGVAMzM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5faW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2dlX3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9nZV9yb3V0ZUAyOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9nZV9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2J5dGVfZ3Rfcm91dGVAMjc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sZV9yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9ieXRlX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbGVfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbGVfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbGVfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2x0X3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sdF9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbHRfcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9uZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbmVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2VxX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9lcV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANjQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ny04CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYVVpbnROID09PSBiVWludE4KICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNS0xNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyByZXR1cm4gYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcmV0dXJuIGFVaW50Ti5ieXRlcy5lcXVhbHMoYlVpbnROLmJ5dGVzKQogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxLTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIHJldHVybiBhVWludE4gPT09IGJVaW50TgogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzktNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByZXR1cm4gYUJ5dGUgPT09IGJCeXRlCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDctNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHJldHVybiBhVWludE4gIT09IGJVaW50TgogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHJldHVybiAhYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgIQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjMtNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gcmV0dXJuICFhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3MS03MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyByZXR1cm4gYVVpbnROICE9PSBiVWludE4KICAgICE9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5LTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIGFCeXRlICE9PSBiQnl0ZQogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk1LTk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPCBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTEtMTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgYlVpbnROLm5hdGl2ZQogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE5LTEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIzCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPCBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNy0xMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMxCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzUtMTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQzLTE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NwogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPD0gYlVpbnROLm5hdGl2ZQogICAgYjw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1OS0xNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY1CiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlIDw9IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2Ny0xNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzMKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc1LTE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODMtMTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgaXRvYgogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MS0xOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPiBiVWludE4ubmF0aXZlCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTktMjAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gcmV0dXJuIGFCeXRlLm5hdGl2ZSA+IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA3LTIwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMwogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNS0yMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gQmlnVWludChiVWludE4ubmF0aXZlKQogICAgYnRvaQogICAgaXRvYgogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjMtMjI0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID49IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMxLTIzMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM3CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+PSBiVWludE4ubmF0aXZlCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM5LTI0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPj0gYkJ5dGUubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA+PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDctMjQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MzI+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gcmV0dXJuIG5ldyBVaW50TjwzMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTItMjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIHJldHVybiBuZXcgVWludE48MjU2PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU3LTI1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9pbml0KGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIHJldHVybiBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc0LTI3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpOiBVaW50TjwzMj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVpbnROPDMyPj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OC0yNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODAKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VWludE48MjU2Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODItMjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2Zyb21fbG9nKGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qnl0ZT4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAyLTMwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDMyLCA4PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDMyLCA4Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA2LTMwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDI1NiwgMTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVRml4ZWROeE08MjU2LCAxNj4+KGEsICdsb2cnKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDQgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAtMzExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfaW5pdChhOiBzdHJpbmcpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEyCiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGBIZWxsbywgJHthfWApCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfYWRkKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNS0zMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19hZGQoYTogU3RyLCBiOiBTdHIpOiBTdHIgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCByZXN1bHQgPSBhLm5hdGl2ZS5jb25jYXQoYi5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHJldHVybiBuZXcgU3RyKHJlc3VsdCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfc3RyaW5nX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMC0zMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19lcShhOiBTdHIsIGI6IFN0cik6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIyCiAgICAvLyByZXR1cm4gYSA9PT0gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjQtMzI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfYnl0ZXMoYTogc3RyaW5nKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyByZXR1cm4gcmVzdWx0LmJ5dGVzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzMtMzM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYTogYnl0ZXMpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFN0cj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYm9vbF9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDUtMzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ib29sX2Zyb21fbG9nKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDcKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2VtaXQoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzLCBmOiBieXRlcywgZzogYnl0ZXMsIGg6IGJ5dGVzLCBtOiBieXRlcywgbjogYnl0ZXMsIG86IGJ5dGVzLCBwOiBieXRlcywgcTogYnl0ZXMsIHI6IGJ5dGVzLCBzOiBieXRlcywgdDogYnl0ZXMpIC0+IHZvaWQ6CnZlcmlmeV9lbWl0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1MS0zNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VtaXQoCiAgICAvLyAgIGE6IGFyYzQuU3RyLAogICAgLy8gICBiOiBhcmM0LlVpbnROPDUxMj4sCiAgICAvLyAgIGM6IGFyYzQuVWludE42NCwKICAgIC8vICAgZDogYXJjNC5EeW5hbWljQnl0ZXMsCiAgICAvLyAgIGU6IGFyYzQuVWludE42NCwKICAgIC8vICAgZjogYXJjNC5Cb29sLAogICAgLy8gICBnOiBhcmM0LkR5bmFtaWNCeXRlcywKICAgIC8vICAgaDogYXJjNC5TdHIsCiAgICAvLyAgIG06IGFyYzQuVWludE48NjQ+LAogICAgLy8gICBuOiBhcmM0LlVpbnROPDI1Nj4sCiAgICAvLyAgIG86IGFyYzQuVUZpeGVkTnhNPDMyLCA4PiwKICAgIC8vICAgcDogYXJjNC5VRml4ZWROeE08MjU2LCAxNj4sCiAgICAvLyAgIHE6IGFyYzQuQm9vbCwKICAgIC8vICAgcjogYnl0ZXMsCiAgICAvLyAgIHM6IGJ5dGVzLAogICAgLy8gICB0OiBieXRlcywKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gMTYgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NAogICAgLy8gZW1pdChuZXcgU3dhcHBlZEFyYzQoeyBtLCBuLCBvLCBwLCBxLCByOiBhcmM0X3IsIHM6IGFyYzRfcywgdDogYXJjNF90IH0pKQogICAgZnJhbWVfZGlnIC04CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwNTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIHB1c2hpbnQgODQgLy8gODQKICAgIGRpZyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NjZiYjAzMzMgLy8gbWV0aG9kICJTd2FwcGVkQXJjNCh1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzUKICAgIC8vIGVtaXQoJ1N3YXBwZWQnLCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBtLCBuLCBvLCBwLCBxLCBhcmM0X3IuY29weSgpLCBhcmM0X3MuY29weSgpLCBhcmM0X3QpCiAgICBmcmFtZV9kaWcgLTE2CiAgICBsZW4KICAgIHB1c2hpbnQgMTczIC8vIDE3MwogICAgKwogICAgcHVzaGJ5dGVzIDB4MDBhZAogICAgZnJhbWVfZGlnIC0xNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTE0CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIC0xMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTExCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtOAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGVjMzMxOWJiIC8vIG1ldGhvZCAiU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzYtMzk0CiAgICAvLyBlbWl0KAogICAgLy8gICAnU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKScsCiAgICAvLyAgIGEsCiAgICAvLyAgIGIsCiAgICAvLyAgIGMsCiAgICAvLyAgIGQsCiAgICAvLyAgIGUsCiAgICAvLyAgIGYsCiAgICAvLyAgIGcsCiAgICAvLyAgIGgsCiAgICAvLyAgIG0sCiAgICAvLyAgIG4sCiAgICAvLyAgIG8sCiAgICAvLyAgIHAsCiAgICAvLyAgIHEsCiAgICAvLyAgIGFyYzRfci5jb3B5KCksCiAgICAvLyAgIGFyYzRfcy5jb3B5KCksCiAgICAvLyAgIGFyYzRfdCwKICAgIC8vICkKICAgIGxvZwogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "Arc4PrimitiveOpsContract", - "methods": [ - { - "name": "verify_uintn_uintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint32" - } - }, - { - "name": "verify_biguintn_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint256" - } - }, - { - "name": "verify_byte_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "verify_uintn_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint32" - } - }, - { - "name": "verify_biguintn_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint256" - } - }, - { - "name": "verify_byte_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "verify_uintn_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint32" - } - }, - { - "name": "verify_biguintn_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint256" - } - }, - { - "name": "verify_byte_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "verify_ufixednxm_bytes", - "args": [ - { - "type": "ufixed32x8", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bigufixednxm_bytes", - "args": [ - { - "type": "ufixed256x16", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_ufixednxm_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed32x8" - } - }, - { - "name": "verify_bigufixednxm_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed256x16" - } - }, - { - "name": "verify_ufixednxm_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed32x8" - } - }, - { - "name": "verify_bigufixednxm_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed256x16" - } - }, - { - "name": "verify_string_init", - "args": [ - { - "type": "string", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_string_add", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "string", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_string_eq", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "string", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_string_bytes", - "args": [ - { - "type": "string", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_string_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_string_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_bool_bytes", - "args": [ - { - "type": "bool", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bool_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_bool_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_emit", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "uint512", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "uint64", - "name": "e" - }, - { - "type": "bool", - "name": "f" - }, - { - "type": "byte[]", - "name": "g" - }, - { - "type": "string", - "name": "h" - }, - { - "type": "uint64", - "name": "m" - }, - { - "type": "uint256", - "name": "n" - }, - { - "type": "ufixed32x8", - "name": "o" - }, - { - "type": "ufixed256x16", - "name": "p" - }, - { - "type": "bool", - "name": "q" - }, - { - "type": "byte[]", - "name": "r" - }, - { - "type": "byte[]", - "name": "s" - }, - { - "type": "byte[]", - "name": "t" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json deleted file mode 100644 index a159be2..0000000 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json +++ /dev/null @@ -1,1831 +0,0 @@ -{ - "name": "Arc4PrimitiveOpsContract", - "structs": {}, - "methods": [ - { - "name": "verify_uintn_uintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_uintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_biguintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_biguintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_byte_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_uintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_uintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_biguintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_biguintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_byte_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_uintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_uintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_biguintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_biguintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_byte_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_uintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_uintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_biguintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_biguintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_byte_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_uintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_uintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_biguintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_biguintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_byte_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_uintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_uintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_biguintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_biguintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_byte_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint32" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint256" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint32" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint256" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uintn_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint32" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguintn_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint256" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_byte_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ufixednxm_bytes", - "args": [ - { - "type": "ufixed32x8", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bigufixednxm_bytes", - "args": [ - { - "type": "ufixed256x16", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ufixednxm_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "ufixed32x8" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bigufixednxm_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "ufixed256x16" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ufixednxm_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "ufixed32x8" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bigufixednxm_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "ufixed256x16" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_string_init", - "args": [ - { - "type": "string", - "name": "a" - } - ], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_string_add", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "string", - "name": "b" - } - ], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_string_eq", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "string", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_string_bytes", - "args": [ - { - "type": "string", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_string_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_string_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bool_bytes", - "args": [ - { - "type": "bool", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bool_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bool_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_emit", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "uint512", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "uint64", - "name": "e" - }, - { - "type": "bool", - "name": "f" - }, - { - "type": "byte[]", - "name": "g" - }, - { - "type": "string", - "name": "h" - }, - { - "type": "uint64", - "name": "m" - }, - { - "type": "uint256", - "name": "n" - }, - { - "type": "ufixed32x8", - "name": "o" - }, - { - "type": "ufixed256x16", - "name": "p" - }, - { - "type": "bool", - "name": "q" - }, - { - "type": "byte[]", - "name": "r" - }, - { - "type": "byte[]", - "name": "s" - }, - { - "type": "byte[]", - "name": "t" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [ - { - "name": "SwappedArc4", - "args": [ - { - "type": "uint64", - "name": "m" - }, - { - "type": "uint256", - "name": "n" - }, - { - "type": "ufixed32x8", - "name": "o" - }, - { - "type": "ufixed256x16", - "name": "p" - }, - { - "type": "bool", - "name": "q" - }, - { - "type": "uint8[3]", - "name": "r" - }, - { - "type": "uint16[]", - "name": "s" - }, - { - "type": "(uint32,uint64,string)", - "name": "t" - } - ] - }, - { - "name": "Swapped", - "args": [ - { - "type": "string", - "name": "0" - }, - { - "type": "uint512", - "name": "1" - }, - { - "type": "uint64", - "name": "2" - }, - { - "type": "byte[]", - "name": "3" - }, - { - "type": "uint64", - "name": "4" - }, - { - "type": "bool", - "name": "5" - }, - { - "type": "byte[]", - "name": "6" - }, - { - "type": "string", - "name": "7" - }, - { - "type": "uint64", - "name": "8" - }, - { - "type": "uint256", - "name": "9" - }, - { - "type": "ufixed32x8", - "name": "10" - }, - { - "type": "ufixed256x16", - "name": "11" - }, - { - "type": "bool", - "name": "12" - }, - { - "type": "uint8[3]", - "name": "13" - }, - { - "type": "uint16[]", - "name": "14" - }, - { - "type": "(uint32,uint64,string)", - "name": "15" - } - ] - } - ], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 2992, - 3009, - 3026, - 3043, - 3060, - 3147, - 3164 - ], - "errorMessage": "Bytes has valid prefix" - }, - { - "pc": [ - 418, - 504, - 526, - 545, - 569, - 591, - 610, - 640, - 667, - 689, - 711, - 733, - 755, - 774, - 793, - 817, - 841, - 863, - 885, - 907, - 926, - 945, - 964, - 986, - 1008, - 1030, - 1063, - 1096, - 1129, - 1162, - 1195, - 1228, - 1261, - 1294, - 1327, - 1360, - 1393, - 1426, - 1459, - 1492, - 1525, - 1558, - 1591, - 1624, - 1657, - 1690, - 1723, - 1756, - 1789, - 1822, - 1855, - 1888, - 1921, - 1954, - 1987 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 2025 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 421, - 507, - 529, - 548, - 572, - 594, - 613, - 643, - 670, - 692, - 714, - 736, - 758, - 777, - 796, - 820, - 844, - 866, - 888, - 910, - 929, - 948, - 967, - 989, - 1011, - 1033, - 1066, - 1099, - 1132, - 1165, - 1198, - 1231, - 1264, - 1297, - 1330, - 1363, - 1396, - 1429, - 1462, - 1495, - 1528, - 1561, - 1594, - 1627, - 1660, - 1693, - 1726, - 1759, - 1792, - 1825, - 1858, - 1891, - 1924, - 1957, - 1990 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 2036, - 2049, - 2065, - 2076, - 2092, - 2103, - 2119, - 2132, - 2148, - 2161, - 2177, - 2190, - 2206, - 2217, - 2234, - 2245, - 2262, - 2275, - 2291, - 2304, - 2320, - 2333, - 2353, - 2364, - 2382, - 2393, - 2412, - 2425, - 2441, - 2454, - 2474, - 2487, - 2507, - 2518, - 2536, - 2547, - 2566, - 2579, - 2595, - 2608, - 2628, - 2641, - 2661, - 2672, - 2690, - 2701, - 2720, - 2733, - 2749, - 2762, - 2782, - 2795, - 2815, - 2826, - 2844, - 2855, - 2874, - 2887, - 2903, - 2916, - 2937, - 2954, - 2970 - ], - "errorMessage": "overflow" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSA4IDY0IDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2MAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4NGViMmFmNGEgMHgyY2JlYzQ1YiAweDA3NjY2ZmQ5IDB4MzcwYmFiZDMgMHgyYjZiM2VmMCAweDI3ZTIxYTk4IDB4MzM5ZGE5N2MgMHg3ODk4ZWQ5NyAweDFmMTMwY2VjIDB4Yzc0ODY2NGUgMHhhMmJhYzE0YiAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4N2MxMWUzNzUgMHhkY2RiY2VlMCAweDc3YTRiNjhkIDB4NGY1NDA2MjYgMHgwOTVhZWQ0MSAweGRmNzhjZGM2IDB4ZTNiN2U5MTggMHg1NTMzNzAwOCAweDliYjFjZDY2IDB4ODE0ODRkOWQgMHg3OWU5Y2IwMyAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg2NzNkYjJiZCAweDk4MmRiMjMzIDB4YWZmYmRmMGUgMHg4ZTRhMzBmNyAweDI4OGFmNzZlIDB4OGJkODRhMDQgMHhmY2Q1NWUxZiAweDBmMTU3NGZlIDB4YjJjYjEzYmUgMHhkMDU5ZWVhNyAweDRjYzRjMTU3IDB4M2QxN2FjNmUgMHhmN2YzZDVmYyAweGY4YzhmOGQ1IDB4NDNmNzE2MmEgMHg0MmUwOTA3NSAweGQ5NTZmNTc1IDB4NmMwMTYwZGYgMHhhODkwMTUwYiAweDBiMmY0YzNmIDB4OWRiOWQzMjcgMHhlNGQ5NTBhMSAweGI2MDVlODBjIC8vIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQyNTYiLCBtZXRob2QgInZlcmlmeV9ieXRlX2luaXQoYnl0ZVtdKWJ5dGUiLCBtZXRob2QgInZlcmlmeV91aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzKGJ5dGVbXSlieXRlIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fZnJvbV9sb2coYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2xvZyhieXRlW10pYnl0ZSIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQzMng4KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQyNTZ4MTYpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXMoYnl0ZVtdKXVmaXhlZDMyeDgiLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlcyhieXRlW10pdWZpeGVkMjU2eDE2IiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQzMng4IiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQyNTZ4MTYiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfaW5pdChzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2FkZChzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19lcShzdHJpbmcsc3RyaW5nKWJvb2wiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfYnl0ZXMoc3RyaW5nKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGJ5dGVbXSlzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYnl0ZVtdKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X2Jvb2xfYnl0ZXMoYm9vbClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fYnl0ZXMoYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fbG9nKGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZW1pdChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCxieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfdWludG5fdWludG5fZXFfcm91dGVAMyBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxX3JvdXRlQDUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZXFfcm91dGVANiBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9uZV9yb3V0ZUA4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lX3JvdXRlQDkgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbmVfcm91dGVAMTAgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbmVfcm91dGVAMTEgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX25lX3JvdXRlQDEyIG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDE0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE1IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE2IG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sdF9yb3V0ZUAxNyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9sZV9yb3V0ZUAxOCBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sZV9yb3V0ZUAxOSBtYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMCBtYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMSBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfbGVfcm91dGVAMjIgbWFpbl92ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjMgbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fZ3Rfcm91dGVAMjQgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fZ3Rfcm91dGVAMjUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjYgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2d0X3JvdXRlQDI3IG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI5IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMwIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMxIG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9nZV9yb3V0ZUAzMiBtYWluX3ZlcmlmeV91aW50bl9pbml0X3JvdXRlQDMzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2luaXRfcm91dGVAMzQgbWFpbl92ZXJpZnlfYnl0ZV9pbml0X3JvdXRlQDM1IG1haW5fdmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzYgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNyBtYWluX3ZlcmlmeV9ieXRlX2Zyb21fYnl0ZXNfcm91dGVAMzggbWFpbl92ZXJpZnlfdWludG5fZnJvbV9sb2dfcm91dGVAMzkgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9sb2dfcm91dGVANDAgbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2xvZ19yb3V0ZUA0MSBtYWluX3ZlcmlmeV91Zml4ZWRueG1fYnl0ZXNfcm91dGVANDIgbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzIG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ0IG1haW5fdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ1IG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZ19yb3V0ZUA0NiBtYWluX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDcgbWFpbl92ZXJpZnlfc3RyaW5nX2luaXRfcm91dGVANDggbWFpbl92ZXJpZnlfc3RyaW5nX2FkZF9yb3V0ZUA0OSBtYWluX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANTAgbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzX3JvdXRlQDUyIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MyBtYWluX3ZlcmlmeV9ib29sX2J5dGVzX3JvdXRlQDU0IG1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9ieXRlc19yb3V0ZUA1NSBtYWluX3ZlcmlmeV9ib29sX2Zyb21fbG9nX3JvdXRlQDU2IG1haW5fdmVyaWZ5X2VtaXRfcm91dGVANTcKCm1haW5fYWZ0ZXJfaWZfZWxzZUA2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18zIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZW1pdF9yb3V0ZUA1NzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDExCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDE0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VtaXQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9sb2dfcm91dGVANTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYm9vbF9mcm9tX2J5dGVzX3JvdXRlQDU1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfYnl0ZXNfcm91dGVANTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fbG9nX3JvdXRlQDUzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNfcm91dGVANTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19lcV9yb3V0ZUA1MDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19hZGRfcm91dGVANDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfYWRkCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zdHJpbmdfaW5pdF9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfaW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VmaXhlZG54bV9ieXRlc19yb3V0ZUA0MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2Zyb21fbG9nX3JvdXRlQDQxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9mcm9tX2xvZ19yb3V0ZUAzOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzX3JvdXRlQDM4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2luaXRfcm91dGVAMzU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9pbml0X3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2luaXRfcm91dGVAMzM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5faW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2dlX3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9nZV9yb3V0ZUAyOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9nZV9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2J5dGVfZ3Rfcm91dGVAMjc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sZV9yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9ieXRlX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbGVfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbGVfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbGVfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2x0X3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sdF9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbHRfcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9uZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbmVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2VxX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9lcV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANjQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ny04CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyByZXR1cm4gYVVpbnROID09PSBiVWludE4KICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNS0xNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyByZXR1cm4gYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcmV0dXJuIGFVaW50Ti5ieXRlcy5lcXVhbHMoYlVpbnROLmJ5dGVzKQogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxLTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIHJldHVybiBhVWludE4gPT09IGJVaW50TgogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzktNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByZXR1cm4gYUJ5dGUgPT09IGJCeXRlCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDctNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHJldHVybiBhVWludE4gIT09IGJVaW50TgogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHJldHVybiAhYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgIQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjMtNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gcmV0dXJuICFhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3MS03MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3CiAgICAvLyByZXR1cm4gYVVpbnROICE9PSBiVWludE4KICAgICE9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5LTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gcmV0dXJuIGFCeXRlICE9PSBiQnl0ZQogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTIKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk1LTk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPCBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTEtMTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgYlVpbnROLm5hdGl2ZQogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE5LTEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIzCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPCBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNy0xMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMxCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzUtMTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQzLTE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NwogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPD0gYlVpbnROLm5hdGl2ZQogICAgYjw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1OS0xNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY1CiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlIDw9IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2Ny0xNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzMKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc1LTE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODMtMTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgaXRvYgogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MS0xOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPiBiVWludE4ubmF0aXZlCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTktMjAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gcmV0dXJuIGFCeXRlLm5hdGl2ZSA+IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA3LTIwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMwogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNS0yMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gQmlnVWludChiVWludE4ubmF0aXZlKQogICAgYnRvaQogICAgaXRvYgogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjMtMjI0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID49IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMxLTIzMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM3CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+PSBiVWludE4ubmF0aXZlCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM5LTI0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPj0gYkJ5dGUubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA+PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDctMjQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MzI+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gcmV0dXJuIG5ldyBVaW50TjwzMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTItMjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIHJldHVybiBuZXcgVWludE48MjU2PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU3LTI1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9pbml0KGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIHJldHVybiBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc0LTI3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpOiBVaW50TjwzMj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVpbnROPDMyPj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OC0yNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODAKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VWludE48MjU2Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODItMjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2Zyb21fbG9nKGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qnl0ZT4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAyLTMwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDMyLCA4PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDMyLCA4Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA2LTMwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDI1NiwgMTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVRml4ZWROeE08MjU2LCAxNj4+KGEsICdsb2cnKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDQgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAtMzExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfaW5pdChhOiBzdHJpbmcpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEyCiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGBIZWxsbywgJHthfWApCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfYWRkKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNS0zMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19hZGQoYTogU3RyLCBiOiBTdHIpOiBTdHIgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCByZXN1bHQgPSBhLm5hdGl2ZS5jb25jYXQoYi5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIHJldHVybiBuZXcgU3RyKHJlc3VsdCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfc3RyaW5nX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMC0zMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19lcShhOiBTdHIsIGI6IFN0cik6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIyCiAgICAvLyByZXR1cm4gYSA9PT0gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjQtMzI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfYnl0ZXMoYTogc3RyaW5nKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyByZXR1cm4gcmVzdWx0LmJ5dGVzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzMtMzM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYTogYnl0ZXMpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFN0cj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYm9vbF9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDUtMzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ib29sX2Zyb21fbG9nKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDcKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2VtaXQoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzLCBmOiBieXRlcywgZzogYnl0ZXMsIGg6IGJ5dGVzLCBtOiBieXRlcywgbjogYnl0ZXMsIG86IGJ5dGVzLCBwOiBieXRlcywgcTogYnl0ZXMsIHI6IGJ5dGVzLCBzOiBieXRlcywgdDogYnl0ZXMpIC0+IHZvaWQ6CnZlcmlmeV9lbWl0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1MS0zNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VtaXQoCiAgICAvLyAgIGE6IGFyYzQuU3RyLAogICAgLy8gICBiOiBhcmM0LlVpbnROPDUxMj4sCiAgICAvLyAgIGM6IGFyYzQuVWludE42NCwKICAgIC8vICAgZDogYXJjNC5EeW5hbWljQnl0ZXMsCiAgICAvLyAgIGU6IGFyYzQuVWludE42NCwKICAgIC8vICAgZjogYXJjNC5Cb29sLAogICAgLy8gICBnOiBhcmM0LkR5bmFtaWNCeXRlcywKICAgIC8vICAgaDogYXJjNC5TdHIsCiAgICAvLyAgIG06IGFyYzQuVWludE48NjQ+LAogICAgLy8gICBuOiBhcmM0LlVpbnROPDI1Nj4sCiAgICAvLyAgIG86IGFyYzQuVUZpeGVkTnhNPDMyLCA4PiwKICAgIC8vICAgcDogYXJjNC5VRml4ZWROeE08MjU2LCAxNj4sCiAgICAvLyAgIHE6IGFyYzQuQm9vbCwKICAgIC8vICAgcjogYnl0ZXMsCiAgICAvLyAgIHM6IGJ5dGVzLAogICAgLy8gICB0OiBieXRlcywKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gMTYgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NAogICAgLy8gZW1pdChuZXcgU3dhcHBlZEFyYzQoeyBtLCBuLCBvLCBwLCBxLCByOiBhcmM0X3IsIHM6IGFyYzRfcywgdDogYXJjNF90IH0pKQogICAgZnJhbWVfZGlnIC04CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwNTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIHB1c2hpbnQgODQgLy8gODQKICAgIGRpZyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NjZiYjAzMzMgLy8gbWV0aG9kICJTd2FwcGVkQXJjNCh1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzUKICAgIC8vIGVtaXQoJ1N3YXBwZWQnLCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBtLCBuLCBvLCBwLCBxLCBhcmM0X3IuY29weSgpLCBhcmM0X3MuY29weSgpLCBhcmM0X3QpCiAgICBmcmFtZV9kaWcgLTE2CiAgICBsZW4KICAgIHB1c2hpbnQgMTczIC8vIDE3MwogICAgKwogICAgcHVzaGJ5dGVzIDB4MDBhZAogICAgZnJhbWVfZGlnIC0xNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTE0CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIC0xMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTExCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtOAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGVjMzMxOWJiIC8vIG1ldGhvZCAiU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzYtMzk0CiAgICAvLyBlbWl0KAogICAgLy8gICAnU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKScsCiAgICAvLyAgIGEsCiAgICAvLyAgIGIsCiAgICAvLyAgIGMsCiAgICAvLyAgIGQsCiAgICAvLyAgIGUsCiAgICAvLyAgIGYsCiAgICAvLyAgIGcsCiAgICAvLyAgIGgsCiAgICAvLyAgIG0sCiAgICAvLyAgIG4sCiAgICAvLyAgIG8sCiAgICAvLyAgIHAsCiAgICAvLyAgIHEsCiAgICAvLyAgIGFyYzRfci5jb3B5KCksCiAgICAvLyAgIGFyYzRfcy5jb3B5KCksCiAgICAvLyAgIGFyYzRfdCwKICAgIC8vICkKICAgIGxvZwogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiAEAQhAACYCBBUffHUBADEbQQfMgjcElvFBFgTtZmCWBCygNSsEhZB9QAROsq9KBCy+xFsEB2Zv2QQ3C6vTBCtrPvAEJ+IamAQznal8BHiY7ZcEHxMM7ATHSGZOBKK6wUsEekYMsQTcqx8BBJfZBk0EzgbCoAR8EeN1BNzbzuAEd6S2jQRPVAYmBAla7UEE33jNxgTjt+kYBFUzcAgEm7HNZgSBSE2dBHnpywMEmgPfEATT8ORLBGc9sr0EmC2yMwSv+98OBI5KMPcEKIr3bgSL2EoEBPzVXh8EDxV0/gSyyxO+BNBZ7qcETMTBVwQ9F6xuBPfz1fwE+Mj41QRD9xYqBELgkHUE2Vb1dQRsAWDfBKiQFQsECy9MPwSdudMnBOTZUKEEtgXoDDYaAI43BiMGAgXhBcAFnwV+BV0FPAUbBPoE2QS4BJcEdgRVBDQEEwPyA9EDsAOPA24DTQMsAwsC6gLJAqgChwJmAlACOgIkAhEB/gHrAdUBvwGpAZEBeQFmAVMBPQEnAREA+wDgAMIArwCZAIEAbgBYAAIlQzEZFEQxGEQ2GgE2GgI2GgM2GgQ2GgU2GgY2Ggc2Ggg2Ggk2Ggo2Ggs2Ggw2Gg02Gg5XAgA2Gg9JJVlLAYECWVJXAgA2Gg9JgQJZSwEVUlcCAIgKayJDMRkURDEYRDYaAVcCAIgKSChMULAiQzEZFEQxGEQ2GgFXAgAoTFCwIkMxGRREMRhENhoBSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIAiAn2KExQsCJDMRkURDEYRDYaAVcCAChMULAiQzEZFEQxGEQ2GgFXAgCICb9JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgE2GgKICZgpJU8CVChMULAiQzEZFEQxGEQ2GgE2GgKICWYoTFCwIkMxGRREMRhENhoBVwIAiAk4KExQsCJDMRkURDEYRDYaAVcCAIgJEShMULAiQzEZFEQxGEQ2GgFXAgCICOooTFCwIkMxGRREMRhENhoBVwIAKExQsCJDMRkURDEYRDYaAVcCAChMULAiQzEZFEQxGEQ2GgFJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgCICG0oTFCwIkMxGRREMRhENhoBVwIAiAhGKExQsCJDMRkURDEYRDYaAVcCAIgIHyhMULAiQzEZFEQxGEQ2GgFXAgAoTFCwIkMxGRREMRhENhoBVwIAKExQsCJDMRkURDEYRDYaAVcCAChMULAiQzEZFEQxGEQ2GgFXAgCIB8EoTFCwIkMxGRREMRhENhoBVwIAiAeaKExQsCJDMRkURDEYRDYaAVcCAIgHcyhMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBzYpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBvgpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBrkpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBnspJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBjkpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBfcpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBbkpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBXopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBTwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBPopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBLgpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBHopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBDspJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA/0pJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA7spJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA3kpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAzspJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAvwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAr4pJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAnwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAj4pJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAgApJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAcMpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAYYpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAUgpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAQopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAMwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAJApJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAFQpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIABYpJU8CVChMULAiQzEZQPm3MRgURCJDigIBi/4VIw5EI6+L/ksBq4v/FSMORIv/TwKrEomKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rEomKAgGL/hUjDkQjr4v+q4v/FSQORCSvi/+rEomKAgGL/hUkDkQkr4v+SwGri/8VJA5Ei/9PAqsSiYoCAYv+FSIORCKvi/5LAauL/xUiDkSL/08CqxKJigIBi/4VIw5EI6+L/ksBq4v/FSMORIv/TwKrE4mKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rEhSJigIBi/4VIw5EI6+L/quL/xUkDkQkr4v/qxIUiYoCAYv+FSQORCSvi/5LAauL/xUkDkSL/08CqxOJigIBi/4VIg5EIq+L/ksBq4v/FSIORIv/TwKrE4mKAgGL/hUjDkQjr4v+SwGri/8VIw5Ei/9PAqtMF0wXDImKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rFxakiYoCAYv+FSMORCOvi/6ri/8VJA5EJK+L/6tMFxaliYoCAYv+FSQORCSvi/5LAauL/xUkDkSL/08Cq6SJigIBi/4VIg5EIq+L/ksBq4v/FSIORIv/TwKrTBdMFwyJigIBi/4VIw5EI6+L/ksBq4v/FSMORIv/TwKrTBdMFw6JigIBi/4VJA5EJK+L/quL/xUjDkQjr4v/qxcWpomKAgGL/hUjDkQjr4v+q4v/FSQORCSvi/+rTBcWp4mKAgGL/hUkDkQkr4v+SwGri/8VJA5Ei/9PAqumiYoCAYv+FSIORCKvi/5LAauL/xUiDkSL/08Cq0wXTBcOiYoCAYv+FSMORCOvi/5LAauL/xUjDkSL/08Cq0wXTBcNiYoCAYv+FSQORCSvi/6ri/8VIw5EI6+L/6sXFqWJigIBi/4VIw5EI6+L/quL/xUkDkQkr4v/q0wXFqSJigIBi/4VJA5EJK+L/ksBq4v/FSQORIv/TwKrpYmKAgGL/hUiDkQir4v+SwGri/8VIg5Ei/9PAqtMF0wXDYmKAgGL/hUjDkQjr4v+SwGri/8VIw5Ei/9PAqtMF0wXD4mKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rFxaniYoCAYv+FSMORCOvi/6ri/8VJA5EJK+L/6tMFxamiYoCAYv+FSQORCSvi/5LAauL/xUkDkSL/08Cq6eJigIBi/4VIg5EIq+L/ksBq4v/FSIORIv/TwKrTBdMFw+JigEBi/8VgQQORIEEr4v/q4mKAQGL/xWBIA5EgSCvi/+riYoBAYv/FSIORCKvi/+riYoBAYv/VwQAi/9XAAQoEkSJigEBi/9XBACL/1cABCgSRImKAQGL/1cEAIv/VwAEKBJEiYoBAYv/VwQAi/9XAAQoEkSJigEBi/9XBACL/1cABCgSRImKAQGAB0hlbGxvLCCL/1BJFRZXBgJMUImKAgGL/lcCAIv/VwIAUEkVFlcGAkxQiYoCAYv+i/8SiYoBAYv/FRZXBgKL/1CJigEBi/9XBACL/1cABCgSRImKAQGL/1cEAIv/VwAEKBJEiYoQAIv4i/lQi/pQi/tQi/xQi/1QgAIAVFCL/hWBVEsBCBZXBgJPAkxQi/5Qi/9QgARmuwMzTFCwi/AVga0BCIACAK2L8VCL8lBLARZXBgJQi/MVTwIITIv0UIv1UEsBFlcGAlCL9hVPAghJFlcGAk8CTFCL9xVPAghMi/hQi/lQi/pQi/tQi/xQi/1QSwEWVwYCUExPAggWVwYCUIvwUIvzUIv2UIv3UIv+UIv/UIAE7DMZu0xQSbCwiQ==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [ - { - "name": "SwappedArc4", - "args": [ - { - "type": "uint64", - "name": "m" - }, - { - "type": "uint256", - "name": "n" - }, - { - "type": "ufixed32x8", - "name": "o" - }, - { - "type": "ufixed256x16", - "name": "p" - }, - { - "type": "bool", - "name": "q" - }, - { - "type": "uint8[3]", - "name": "r" - }, - { - "type": "uint16[]", - "name": "s" - }, - { - "type": "(uint32,uint64,string)", - "name": "t" - } - ] - }, - { - "name": "Swapped", - "args": [ - { - "type": "string", - "name": "0" - }, - { - "type": "uint512", - "name": "1" - }, - { - "type": "uint64", - "name": "2" - }, - { - "type": "byte[]", - "name": "3" - }, - { - "type": "uint64", - "name": "4" - }, - { - "type": "bool", - "name": "5" - }, - { - "type": "byte[]", - "name": "6" - }, - { - "type": "string", - "name": "7" - }, - { - "type": "uint64", - "name": "8" - }, - { - "type": "uint256", - "name": "9" - }, - { - "type": "ufixed32x8", - "name": "10" - }, - { - "type": "ufixed256x16", - "name": "11" - }, - { - "type": "bool", - "name": "12" - }, - { - "type": "uint8[3]", - "name": "13" - }, - { - "type": "uint16[]", - "name": "14" - }, - { - "type": "(uint32,uint64,string)", - "name": "15" - } - ] - } - ], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/box-contract/data/BoxContract.approval.teal b/tests/artifacts/box-contract/data/BoxContract.approval.teal deleted file mode 100644 index fc39c66..0000000 --- a/tests/artifacts/box-contract/data/BoxContract.approval.teal +++ /dev/null @@ -1,158 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 - bytecblock "oca" "txn" - // tests/artifacts/box-contract/contract.algo.ts:4 - // export class BoxContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@7 - pushbytess 0xf87ada89 0xef186cf7 // method "storeEnums()void", method "read_enums()(uint64,uint64)" - txna ApplicationArgs 0 - match main_storeEnums_route@3 main_read_enums_route@4 - -main_after_if_else@11: - // tests/artifacts/box-contract/contract.algo.ts:4 - // export class BoxContract extends arc4.Contract { - pushint 0 // 0 - return - -main_read_enums_route@4: - // tests/artifacts/box-contract/contract.algo.ts:14 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub read_enums - pushbytes 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_storeEnums_route@3: - // tests/artifacts/box-contract/contract.algo.ts:8 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub storeEnums - intc_0 // 1 - return - -main_bare_routing@7: - // tests/artifacts/box-contract/contract.algo.ts:4 - // export class BoxContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@11 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/box-contract/contract.algo.ts::BoxContract.storeEnums() -> void: -storeEnums: - // tests/artifacts/box-contract/contract.algo.ts:8-9 - // @arc4.abimethod() - // public storeEnums(): void { - proto 0 0 - // tests/artifacts/box-contract/contract.algo.ts:10 - // this.oca.value = arc4.OnCompleteAction.OptIn - intc_0 // 1 - itob - // tests/artifacts/box-contract/contract.algo.ts:5 - // oca = Box({ key: Bytes('oca') }) - bytec_0 // "oca" - // tests/artifacts/box-contract/contract.algo.ts:10 - // this.oca.value = arc4.OnCompleteAction.OptIn - swap - box_put - // tests/artifacts/box-contract/contract.algo.ts:11 - // this.txn.value = TransactionType.ApplicationCall - pushint 6 // 6 - itob - // tests/artifacts/box-contract/contract.algo.ts:6 - // txn = Box({ key: Bytes('txn') }) - bytec_1 // "txn" - // tests/artifacts/box-contract/contract.algo.ts:11 - // this.txn.value = TransactionType.ApplicationCall - swap - box_put - retsub - - -// tests/artifacts/box-contract/contract.algo.ts::BoxContract.read_enums() -> bytes: -read_enums: - // tests/artifacts/box-contract/contract.algo.ts:14-15 - // @arc4.abimethod() - // public read_enums(): Tuple<[UintN64, UintN64]> { - proto 0 1 - // tests/artifacts/box-contract/contract.algo.ts:16 - // assert(op.Box.get(Bytes('oca'))[0] === op.itob(this.oca.value)) - bytec_0 // "oca" - box_get - pop - // tests/artifacts/box-contract/contract.algo.ts:5 - // oca = Box({ key: Bytes('oca') }) - bytec_0 // "oca" - // tests/artifacts/box-contract/contract.algo.ts:16 - // assert(op.Box.get(Bytes('oca'))[0] === op.itob(this.oca.value)) - box_get - swap - btoi - swap - assert // Box must have value - itob - == - assert - // tests/artifacts/box-contract/contract.algo.ts:17 - // assert(op.Box.get(Bytes('txn'))[0] === op.itob(this.txn.value)) - bytec_1 // "txn" - box_get - pop - // tests/artifacts/box-contract/contract.algo.ts:6 - // txn = Box({ key: Bytes('txn') }) - bytec_1 // "txn" - // tests/artifacts/box-contract/contract.algo.ts:17 - // assert(op.Box.get(Bytes('txn'))[0] === op.itob(this.txn.value)) - box_get - swap - btoi - swap - assert // Box must have value - itob - == - assert - // tests/artifacts/box-contract/contract.algo.ts:5 - // oca = Box({ key: Bytes('oca') }) - bytec_0 // "oca" - // tests/artifacts/box-contract/contract.algo.ts:19 - // return new Tuple(new UintN64(this.oca.value), new UintN64(this.txn.value)) - box_get - swap - btoi - swap - assert // Box must have value - itob - // tests/artifacts/box-contract/contract.algo.ts:6 - // txn = Box({ key: Bytes('txn') }) - bytec_1 // "txn" - // tests/artifacts/box-contract/contract.algo.ts:19 - // return new Tuple(new UintN64(this.oca.value), new UintN64(this.txn.value)) - box_get - swap - btoi - swap - assert // Box must have value - itob - concat - retsub diff --git a/tests/artifacts/box-contract/data/BoxContract.arc32.json b/tests/artifacts/box-contract/data/BoxContract.arc32.json deleted file mode 100644 index 7aee844..0000000 --- a/tests/artifacts/box-contract/data/BoxContract.arc32.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "hints": { - "storeEnums()void": { - "call_config": { - "no_op": "CALL" - } - }, - "read_enums()(uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAib2NhIiAidHhuIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHhmODdhZGE4OSAweGVmMTg2Y2Y3IC8vIG1ldGhvZCAic3RvcmVFbnVtcygpdm9pZCIsIG1ldGhvZCAicmVhZF9lbnVtcygpKHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9zdG9yZUVudW1zX3JvdXRlQDMgbWFpbl9yZWFkX2VudW1zX3JvdXRlQDQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fcmVhZF9lbnVtc19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRfZW51bXMKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdG9yZUVudW1zX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBzdG9yZUVudW1zCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnN0b3JlRW51bXMoKSAtPiB2b2lkOgpzdG9yZUVudW1zOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjgtOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBzdG9yZUVudW1zKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIHRoaXMub2NhLnZhbHVlID0gYXJjNC5PbkNvbXBsZXRlQWN0aW9uLk9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIG9jYSA9IEJveDxhcmM0Lk9uQ29tcGxldGVBY3Rpb24+KHsga2V5OiBCeXRlcygnb2NhJykgfSkKICAgIGJ5dGVjXzAgLy8gIm9jYSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gdGhpcy5vY2EudmFsdWUgPSBhcmM0Lk9uQ29tcGxldGVBY3Rpb24uT3B0SW4KICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdGhpcy50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBwdXNoaW50IDYgLy8gNgogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHR4biA9IEJveDxUcmFuc2FjdGlvblR5cGU+KHsga2V5OiBCeXRlcygndHhuJykgfSkKICAgIGJ5dGVjXzEgLy8gInR4biIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdGhpcy50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnJlYWRfZW51bXMoKSAtPiBieXRlczoKcmVhZF9lbnVtczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyByZWFkX2VudW1zKCk6IFR1cGxlPFtVaW50TjY0LCBVaW50TjY0XT4gewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCdvY2EnKSlbMF0gPT09IG9wLml0b2IodGhpcy5vY2EudmFsdWUpKQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygnb2NhJykpWzBdID09PSBvcC5pdG9iKHRoaXMub2NhLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCd0eG4nKSlbMF0gPT09IG9wLml0b2IodGhpcy50eG4udmFsdWUpKQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gdHhuID0gQm94PFRyYW5zYWN0aW9uVHlwZT4oeyBrZXk6IEJ5dGVzKCd0eG4nKSB9KQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygndHhuJykpWzBdID09PSBvcC5pdG9iKHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyByZXR1cm4gbmV3IFR1cGxlKG5ldyBVaW50TjY0KHRoaXMub2NhLnZhbHVlKSwgbmV3IFVpbnRONjQodGhpcy50eG4udmFsdWUpKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czo2CiAgICAvLyB0eG4gPSBCb3g8VHJhbnNhY3Rpb25UeXBlPih7IGtleTogQnl0ZXMoJ3R4bicpIH0pCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBuZXcgVHVwbGUobmV3IFVpbnRONjQodGhpcy5vY2EudmFsdWUpLCBuZXcgVWludE42NCh0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "BoxContract", - "methods": [ - { - "name": "storeEnums", - "args": [], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "read_enums", - "args": [], - "readonly": false, - "returns": { - "type": "(uint64,uint64)" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/box-contract/data/BoxContract.arc56.json b/tests/artifacts/box-contract/data/BoxContract.arc56.json deleted file mode 100644 index 96a4fb7..0000000 --- a/tests/artifacts/box-contract/data/BoxContract.arc56.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "name": "BoxContract", - "structs": {}, - "methods": [ - { - "name": "storeEnums", - "args": [], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "read_enums", - "args": [], - "returns": { - "type": "(uint64,uint64)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": { - "oca": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "b2Nh" - }, - "txn": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "dHhu" - } - } - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 113, - 125, - 134, - 141 - ], - "errorMessage": "Box must have value" - }, - { - "pc": [ - 46, - 67 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 84 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 49, - 70 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAib2NhIiAidHhuIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHhmODdhZGE4OSAweGVmMTg2Y2Y3IC8vIG1ldGhvZCAic3RvcmVFbnVtcygpdm9pZCIsIG1ldGhvZCAicmVhZF9lbnVtcygpKHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9zdG9yZUVudW1zX3JvdXRlQDMgbWFpbl9yZWFkX2VudW1zX3JvdXRlQDQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQm94Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fcmVhZF9lbnVtc19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJlYWRfZW51bXMKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdG9yZUVudW1zX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBzdG9yZUVudW1zCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3hDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnN0b3JlRW51bXMoKSAtPiB2b2lkOgpzdG9yZUVudW1zOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjgtOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBzdG9yZUVudW1zKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIHRoaXMub2NhLnZhbHVlID0gYXJjNC5PbkNvbXBsZXRlQWN0aW9uLk9wdEluCiAgICBpbnRjXzAgLy8gMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIG9jYSA9IEJveDxhcmM0Lk9uQ29tcGxldGVBY3Rpb24+KHsga2V5OiBCeXRlcygnb2NhJykgfSkKICAgIGJ5dGVjXzAgLy8gIm9jYSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gdGhpcy5vY2EudmFsdWUgPSBhcmM0Lk9uQ29tcGxldGVBY3Rpb24uT3B0SW4KICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdGhpcy50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBwdXNoaW50IDYgLy8gNgogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHR4biA9IEJveDxUcmFuc2FjdGlvblR5cGU+KHsga2V5OiBCeXRlcygndHhuJykgfSkKICAgIGJ5dGVjXzEgLy8gInR4biIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdGhpcy50eG4udmFsdWUgPSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6OkJveENvbnRyYWN0LnJlYWRfZW51bXMoKSAtPiBieXRlczoKcmVhZF9lbnVtczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyByZWFkX2VudW1zKCk6IFR1cGxlPFtVaW50TjY0LCBVaW50TjY0XT4gewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCdvY2EnKSlbMF0gPT09IG9wLml0b2IodGhpcy5vY2EudmFsdWUpKQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygnb2NhJykpWzBdID09PSBvcC5pdG9iKHRoaXMub2NhLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGFzc2VydChvcC5Cb3guZ2V0KEJ5dGVzKCd0eG4nKSlbMF0gPT09IG9wLml0b2IodGhpcy50eG4udmFsdWUpKQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgYm94X2dldAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gdHhuID0gQm94PFRyYW5zYWN0aW9uVHlwZT4oeyBrZXk6IEJ5dGVzKCd0eG4nKSB9KQogICAgYnl0ZWNfMSAvLyAidHhuIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBhc3NlcnQob3AuQm94LmdldChCeXRlcygndHhuJykpWzBdID09PSBvcC5pdG9iKHRoaXMudHhuLnZhbHVlKSkKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gb2NhID0gQm94PGFyYzQuT25Db21wbGV0ZUFjdGlvbj4oeyBrZXk6IEJ5dGVzKCdvY2EnKSB9KQogICAgYnl0ZWNfMCAvLyAib2NhIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2JveC1jb250cmFjdC9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyByZXR1cm4gbmV3IFR1cGxlKG5ldyBVaW50TjY0KHRoaXMub2NhLnZhbHVlKSwgbmV3IFVpbnRONjQodGhpcy50eG4udmFsdWUpKQogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9ib3gtY29udHJhY3QvY29udHJhY3QuYWxnby50czo2CiAgICAvLyB0eG4gPSBCb3g8VHJhbnNhY3Rpb25UeXBlPih7IGtleTogQnl0ZXMoJ3R4bicpIH0pCiAgICBieXRlY18xIC8vICJ0eG4iCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYm94LWNvbnRyYWN0L2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBuZXcgVHVwbGUobmV3IFVpbnRONjQodGhpcy5vY2EudmFsdWUpLCBuZXcgVWludE42NCh0aGlzLnR4bi52YWx1ZSkpCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaXRvYgogICAgY29uY2F0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiABASYCA29jYQN0eG4xG0EAOYICBPh62okE7xhs9zYaAI4CABgAA4EAQzEZFEQxGESIADGABBUffHVMULAiQzEZFEQxGESIAA0iQzEZQP/XMRgURCJDigAAIhYoTL+BBhYpTL+JigABKL5IKL5MF0xEFhJEKb5IKb5MF0xEFhJEKL5MF0xEFim+TBdMRBZQiQ==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/box-contract/data/BoxContract.clear.teal b/tests/artifacts/box-contract/data/BoxContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/box-contract/data/BoxContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/created-app-asset/data/AppExpectingEffects.approval.teal b/tests/artifacts/created-app-asset/data/AppExpectingEffects.approval.teal deleted file mode 100644 index c4483c2..0000000 --- a/tests/artifacts/created-app-asset/data/AppExpectingEffects.approval.teal +++ /dev/null @@ -1,179 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 6 - bytecblock 0x151f7c75 - // tests/artifacts/created-app-asset/contract.algo.ts:6 - // export class AppExpectingEffects extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@7 - pushbytess 0x6d3a0439 0x62a0ef62 // method "create_group(acfg,appl)(uint64,uint64)", method "log_group(appl)void" - txna ApplicationArgs 0 - match main_create_group_route@3 main_log_group_route@4 - -main_after_if_else@11: - // tests/artifacts/created-app-asset/contract.algo.ts:6 - // export class AppExpectingEffects extends arc4.Contract { - intc_1 // 0 - return - -main_log_group_route@4: - // tests/artifacts/created-app-asset/contract.algo.ts:17 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/created-app-asset/contract.algo.ts:6 - // export class AppExpectingEffects extends arc4.Contract { - txn GroupIndex - intc_0 // 1 - - - dup - gtxns TypeEnum - intc_2 // appl - == - assert // transaction type is appl - // tests/artifacts/created-app-asset/contract.algo.ts:17 - // @arc4.abimethod() - callsub log_group - intc_0 // 1 - return - -main_create_group_route@3: - // tests/artifacts/created-app-asset/contract.algo.ts:7 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/created-app-asset/contract.algo.ts:6 - // export class AppExpectingEffects extends arc4.Contract { - txn GroupIndex - pushint 2 // 2 - - - dup - gtxns TypeEnum - pushint 3 // acfg - == - assert // transaction type is acfg - txn GroupIndex - intc_0 // 1 - - - dup - gtxns TypeEnum - intc_2 // appl - == - assert // transaction type is appl - // tests/artifacts/created-app-asset/contract.algo.ts:7 - // @arc4.abimethod() - callsub create_group - swap - itob - swap - itob - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@7: - // tests/artifacts/created-app-asset/contract.algo.ts:6 - // export class AppExpectingEffects extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@11 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/created-app-asset/contract.algo.ts::AppExpectingEffects.create_group(assetCreate: uint64, appCreate: uint64) -> uint64, uint64: -create_group: - // tests/artifacts/created-app-asset/contract.algo.ts:7-8 - // @arc4.abimethod() - // public create_group(assetCreate: gtxn.AssetConfigTxn, appCreate: gtxn.ApplicationTxn): readonly [uint64, uint64] { - proto 2 2 - // tests/artifacts/created-app-asset/contract.algo.ts:9 - // assert(assetCreate.createdAsset.id, 'expected asset created') - frame_dig -2 - gtxns CreatedAssetID - dup - assert // expected asset created - // tests/artifacts/created-app-asset/contract.algo.ts:10 - // assert(op.gaid(assetCreate.groupIndex) === assetCreate.createdAsset.id, 'expected correct asset id') - frame_dig -2 - gtxns GroupIndex - gaids - dig 1 - == - assert // expected correct asset id - // tests/artifacts/created-app-asset/contract.algo.ts:11 - // assert(appCreate.createdApp.id, 'expected app created') - frame_dig -1 - gtxns CreatedApplicationID - dup - assert // expected app created - // tests/artifacts/created-app-asset/contract.algo.ts:12 - // assert(op.gaid(appCreate.groupIndex) === appCreate.createdApp.id, 'expected correct app id') - frame_dig -1 - gtxns GroupIndex - gaids - dig 1 - == - assert // expected correct app id - // tests/artifacts/created-app-asset/contract.algo.ts:14 - // return [assetCreate.createdAsset.id, appCreate.createdApp.id] - retsub - - -// tests/artifacts/created-app-asset/contract.algo.ts::AppExpectingEffects.log_group(appCall: uint64) -> void: -log_group: - // tests/artifacts/created-app-asset/contract.algo.ts:17-18 - // @arc4.abimethod() - // public log_group(appCall: gtxn.ApplicationTxn): void { - proto 1 0 - // tests/artifacts/created-app-asset/contract.algo.ts:19 - // assert(appCall.appArgs(0) === methodSelector('some_value()uint64'), 'expected correct method called') - frame_dig -1 - intc_1 // 0 - gtxnsas ApplicationArgs - pushbytes 0xd3479e65 // method "some_value()uint64" - == - assert // expected correct method called - // tests/artifacts/created-app-asset/contract.algo.ts:20 - // assert(appCall.numLogs === 1, 'expected logs') - frame_dig -1 - gtxns NumLogs - intc_0 // 1 - == - assert // expected logs - // tests/artifacts/created-app-asset/contract.algo.ts:21 - // assert(interpretAsArc4(appCall.lastLog, 'log').native === (appCall.groupIndex + 1) * Global.groupSize) - frame_dig -1 - gtxns LastLog - dup - extract 4 0 - swap - extract 0 4 - bytec_0 // 0x151f7c75 - == - assert // Bytes has valid prefix - btoi - frame_dig -1 - gtxns GroupIndex - intc_0 // 1 - + - global GroupSize - * - == - assert - retsub diff --git a/tests/artifacts/created-app-asset/data/AppExpectingEffects.arc32.json b/tests/artifacts/created-app-asset/data/AppExpectingEffects.arc32.json deleted file mode 100644 index fc11712..0000000 --- a/tests/artifacts/created-app-asset/data/AppExpectingEffects.arc32.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "hints": { - "create_group(acfg,appl)(uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "log_group(appl)void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFwcEV4cGVjdGluZ0VmZmVjdHMgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4NmQzYTA0MzkgMHg2MmEwZWY2MiAvLyBtZXRob2QgImNyZWF0ZV9ncm91cChhY2ZnLGFwcGwpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJsb2dfZ3JvdXAoYXBwbCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jcmVhdGVfZ3JvdXBfcm91dGVAMyBtYWluX2xvZ19ncm91cF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXBwRXhwZWN0aW5nRWZmZWN0cyBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9sb2dfZ3JvdXBfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXBwRXhwZWN0aW5nRWZmZWN0cyBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gYXBwbAogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFwcGwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBsb2dfZ3JvdXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX2dyb3VwX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXBwRXhwZWN0aW5nRWZmZWN0cyBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFjZmcKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18yIC8vIGFwcGwKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBhcHBsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBjcmVhdGVfZ3JvdXAKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcHBFeHBlY3RpbmdFZmZlY3RzIGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjpBcHBFeHBlY3RpbmdFZmZlY3RzLmNyZWF0ZV9ncm91cChhc3NldENyZWF0ZTogdWludDY0LCBhcHBDcmVhdGU6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQ6CmNyZWF0ZV9ncm91cDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjctOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBjcmVhdGVfZ3JvdXAoYXNzZXRDcmVhdGU6IGd0eG4uQXNzZXRDb25maWdUeG4sIGFwcENyZWF0ZTogZ3R4bi5BcHBsaWNhdGlvblR4bik6IHJlYWRvbmx5IFt1aW50NjQsIHVpbnQ2NF0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo5CiAgICAvLyBhc3NlcnQoYXNzZXRDcmVhdGUuY3JlYXRlZEFzc2V0LmlkLCAnZXhwZWN0ZWQgYXNzZXQgY3JlYXRlZCcpCiAgICBmcmFtZV9kaWcgLTIKICAgIGd0eG5zIENyZWF0ZWRBc3NldElECiAgICBkdXAKICAgIGFzc2VydCAvLyBleHBlY3RlZCBhc3NldCBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KG9wLmdhaWQoYXNzZXRDcmVhdGUuZ3JvdXBJbmRleCkgPT09IGFzc2V0Q3JlYXRlLmNyZWF0ZWRBc3NldC5pZCwgJ2V4cGVjdGVkIGNvcnJlY3QgYXNzZXQgaWQnKQogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBHcm91cEluZGV4CiAgICBnYWlkcwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCBhc3NldCBpZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIGFzc2VydChhcHBDcmVhdGUuY3JlYXRlZEFwcC5pZCwgJ2V4cGVjdGVkIGFwcCBjcmVhdGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIGR1cAogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFwcCBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYXNzZXJ0KG9wLmdhaWQoYXBwQ3JlYXRlLmdyb3VwSW5kZXgpID09PSBhcHBDcmVhdGUuY3JlYXRlZEFwcC5pZCwgJ2V4cGVjdGVkIGNvcnJlY3QgYXBwIGlkJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgR3JvdXBJbmRleAogICAgZ2FpZHMKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgYXBwIGlkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFthc3NldENyZWF0ZS5jcmVhdGVkQXNzZXQuaWQsIGFwcENyZWF0ZS5jcmVhdGVkQXBwLmlkXQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OkFwcEV4cGVjdGluZ0VmZmVjdHMubG9nX2dyb3VwKGFwcENhbGw6IHVpbnQ2NCkgLT4gdm9pZDoKbG9nX2dyb3VwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbG9nX2dyb3VwKGFwcENhbGw6IGd0eG4uQXBwbGljYXRpb25UeG4pOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGFzc2VydChhcHBDYWxsLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdzb21lX3ZhbHVlKCl1aW50NjQnKSwgJ2V4cGVjdGVkIGNvcnJlY3QgbWV0aG9kIGNhbGxlZCcpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgcHVzaGJ5dGVzIDB4ZDM0NzllNjUgLy8gbWV0aG9kICJzb21lX3ZhbHVlKCl1aW50NjQiCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgbWV0aG9kIGNhbGxlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGFzc2VydChhcHBDYWxsLm51bUxvZ3MgPT09IDEsICdleHBlY3RlZCBsb2dzJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgTnVtTG9ncwogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgbG9ncwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIGFzc2VydChpbnRlcnByZXRBc0FyYzQ8VWludE42ND4oYXBwQ2FsbC5sYXN0TG9nLCAnbG9nJykubmF0aXZlID09PSAoYXBwQ2FsbC5ncm91cEluZGV4ICsgMSkgKiBHbG9iYWwuZ3JvdXBTaXplKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGdsb2JhbCBHcm91cFNpemUKICAgICoKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "AppExpectingEffects", - "methods": [ - { - "name": "create_group", - "args": [ - { - "type": "acfg", - "name": "assetCreate" - }, - { - "type": "appl", - "name": "appCreate" - } - ], - "readonly": false, - "returns": { - "type": "(uint64,uint64)" - } - }, - { - "name": "log_group", - "args": [ - { - "type": "appl", - "name": "appCall" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/created-app-asset/data/AppExpectingEffects.arc56.json b/tests/artifacts/created-app-asset/data/AppExpectingEffects.arc56.json deleted file mode 100644 index 3192661..0000000 --- a/tests/artifacts/created-app-asset/data/AppExpectingEffects.arc56.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "name": "AppExpectingEffects", - "structs": {}, - "methods": [ - { - "name": "create_group", - "args": [ - { - "type": "acfg", - "name": "assetCreate" - }, - { - "type": "appl", - "name": "appCreate" - } - ], - "returns": { - "type": "(uint64,uint64)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "log_group", - "args": [ - { - "type": "appl", - "name": "appCall" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 188 - ], - "errorMessage": "Bytes has valid prefix" - }, - { - "pc": [ - 44, - 66 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 114 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 47, - 69 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 140 - ], - "errorMessage": "expected app created" - }, - { - "pc": [ - 125 - ], - "errorMessage": "expected asset created" - }, - { - "pc": [ - 149 - ], - "errorMessage": "expected correct app id" - }, - { - "pc": [ - 134 - ], - "errorMessage": "expected correct asset id" - }, - { - "pc": [ - 166 - ], - "errorMessage": "expected correct method called" - }, - { - "pc": [ - 173 - ], - "errorMessage": "expected logs" - }, - { - "pc": [ - 81 - ], - "errorMessage": "transaction type is acfg" - }, - { - "pc": [ - 57, - 91 - ], - "errorMessage": "transaction type is appl" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDYKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEFwcEV4cGVjdGluZ0VmZmVjdHMgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4NmQzYTA0MzkgMHg2MmEwZWY2MiAvLyBtZXRob2QgImNyZWF0ZV9ncm91cChhY2ZnLGFwcGwpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJsb2dfZ3JvdXAoYXBwbCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jcmVhdGVfZ3JvdXBfcm91dGVAMyBtYWluX2xvZ19ncm91cF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXBwRXhwZWN0aW5nRWZmZWN0cyBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9sb2dfZ3JvdXBfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXBwRXhwZWN0aW5nRWZmZWN0cyBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gYXBwbAogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFwcGwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBsb2dfZ3JvdXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX2dyb3VwX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgQXBwRXhwZWN0aW5nRWZmZWN0cyBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFjZmcKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18yIC8vIGFwcGwKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBhcHBsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBjcmVhdGVfZ3JvdXAKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBBcHBFeHBlY3RpbmdFZmZlY3RzIGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjpBcHBFeHBlY3RpbmdFZmZlY3RzLmNyZWF0ZV9ncm91cChhc3NldENyZWF0ZTogdWludDY0LCBhcHBDcmVhdGU6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQ6CmNyZWF0ZV9ncm91cDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcmVhdGVkLWFwcC1hc3NldC9jb250cmFjdC5hbGdvLnRzOjctOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBjcmVhdGVfZ3JvdXAoYXNzZXRDcmVhdGU6IGd0eG4uQXNzZXRDb25maWdUeG4sIGFwcENyZWF0ZTogZ3R4bi5BcHBsaWNhdGlvblR4bik6IHJlYWRvbmx5IFt1aW50NjQsIHVpbnQ2NF0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czo5CiAgICAvLyBhc3NlcnQoYXNzZXRDcmVhdGUuY3JlYXRlZEFzc2V0LmlkLCAnZXhwZWN0ZWQgYXNzZXQgY3JlYXRlZCcpCiAgICBmcmFtZV9kaWcgLTIKICAgIGd0eG5zIENyZWF0ZWRBc3NldElECiAgICBkdXAKICAgIGFzc2VydCAvLyBleHBlY3RlZCBhc3NldCBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gYXNzZXJ0KG9wLmdhaWQoYXNzZXRDcmVhdGUuZ3JvdXBJbmRleCkgPT09IGFzc2V0Q3JlYXRlLmNyZWF0ZWRBc3NldC5pZCwgJ2V4cGVjdGVkIGNvcnJlY3QgYXNzZXQgaWQnKQogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBHcm91cEluZGV4CiAgICBnYWlkcwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgY29ycmVjdCBhc3NldCBpZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIGFzc2VydChhcHBDcmVhdGUuY3JlYXRlZEFwcC5pZCwgJ2V4cGVjdGVkIGFwcCBjcmVhdGVkJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIGR1cAogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFwcCBjcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYXNzZXJ0KG9wLmdhaWQoYXBwQ3JlYXRlLmdyb3VwSW5kZXgpID09PSBhcHBDcmVhdGUuY3JlYXRlZEFwcC5pZCwgJ2V4cGVjdGVkIGNvcnJlY3QgYXBwIGlkJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgR3JvdXBJbmRleAogICAgZ2FpZHMKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgYXBwIGlkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3JlYXRlZC1hcHAtYXNzZXQvY29udHJhY3QuYWxnby50czoxNAogICAgLy8gcmV0dXJuIFthc3NldENyZWF0ZS5jcmVhdGVkQXNzZXQuaWQsIGFwcENyZWF0ZS5jcmVhdGVkQXBwLmlkXQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6OkFwcEV4cGVjdGluZ0VmZmVjdHMubG9nX2dyb3VwKGFwcENhbGw6IHVpbnQ2NCkgLT4gdm9pZDoKbG9nX2dyb3VwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTctMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgbG9nX2dyb3VwKGFwcENhbGw6IGd0eG4uQXBwbGljYXRpb25UeG4pOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGFzc2VydChhcHBDYWxsLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdzb21lX3ZhbHVlKCl1aW50NjQnKSwgJ2V4cGVjdGVkIGNvcnJlY3QgbWV0aG9kIGNhbGxlZCcpCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgcHVzaGJ5dGVzIDB4ZDM0NzllNjUgLy8gbWV0aG9kICJzb21lX3ZhbHVlKCl1aW50NjQiCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGNvcnJlY3QgbWV0aG9kIGNhbGxlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGFzc2VydChhcHBDYWxsLm51bUxvZ3MgPT09IDEsICdleHBlY3RlZCBsb2dzJykKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgTnVtTG9ncwogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgbG9ncwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyZWF0ZWQtYXBwLWFzc2V0L2NvbnRyYWN0LmFsZ28udHM6MjEKICAgIC8vIGFzc2VydChpbnRlcnByZXRBc0FyYzQ8VWludE42ND4oYXBwQ2FsbC5sYXN0TG9nLCAnbG9nJykubmF0aXZlID09PSAoYXBwQ2FsbC5ncm91cEluZGV4ICsgMSkgKiBHbG9iYWwuZ3JvdXBTaXplKQogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGdsb2JhbCBHcm91cFNpemUKICAgICoKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiADAQAGJgEEFR98dTEbQQBYggIEbToEOQRioO9iNhoAjgIAGAACI0MxGRREMRhEMRYiCUk4ECQSRIgAWiJDMRkURDEYRDEWgQIJSTgQgQMSRDEWIglJOBAkEkSIABZMFkwWUChMULAiQzEZQP+4MRgURCJDigICi/44PElEi/44Fj1LARJEi/84PUlEi/84Fj1LARJEiYoBAIv/I8IagATTR55lEkSL/zg7IhJEi/84PklXBABMVwAEKBJEF4v/OBYiCDIECxJEiQ==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/created-app-asset/data/AppExpectingEffects.clear.teal b/tests/artifacts/created-app-asset/data/AppExpectingEffects.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/created-app-asset/data/AppExpectingEffects.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/crypto-ops/data/CryptoOpsContract.approval.teal b/tests/artifacts/crypto-ops/data/CryptoOpsContract.approval.teal deleted file mode 100644 index b626511..0000000 --- a/tests/artifacts/crypto-ops/data/CryptoOpsContract.approval.teal +++ /dev/null @@ -1,899 +0,0 @@ -#pragma version 11 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 0 1 4 3000 - bytecblock 0x151f7c75 0x00 0x0004 0x068101 - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@19 - pushbytess 0x3456c4c3 0xe8442b84 0x65f567aa 0x258455b1 0x35af0f38 0x6582c997 0x6298ffbb 0x3885b54f 0x2164e0bf 0x755b79a5 0xf06bb077 0x133f8ccc 0x2f7c68a9 0xc43f0220 // method "verify_sha256(byte[],uint64)byte[]", method "verify_sha3_256(byte[],uint64)byte[]", method "verify_keccak_256(byte[],uint64)byte[]", method "verify_sha512_256(byte[],uint64)byte[]", method "verify_ed25519verify(byte[],byte[],byte[])bool", method "verify_ed25519verify_bare(byte[],byte[],byte[])bool", method "verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool", method "verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool", method "verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])", method "verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])", method "verify_ecdsa_decompress_k1(byte[])(byte[],byte[])", method "verify_ecdsa_decompress_r1(byte[])(byte[],byte[])", method "verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)", method "verify_mimc(byte[])byte[]" - txna ApplicationArgs 0 - match main_verify_sha256_route@3 main_verify_sha3_256_route@4 main_verify_keccak_256_route@5 main_verify_sha512_256_route@6 main_verify_ed25519verify_route@7 main_verify_ed25519verify_bare_route@8 main_verify_ecdsa_verify_k1_route@9 main_verify_ecdsa_verify_r1_route@10 main_verify_ecdsa_recover_k1_route@11 main_verify_ecdsa_recover_r1_route@12 main_verify_ecdsa_decompress_k1_route@13 main_verify_ecdsa_decompress_r1_route@14 main_verify_vrf_verify_route@15 main_verify_mimc_route@16 - -main_after_if_else@23: - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - intc_0 // 0 - return - -main_verify_mimc_route@16: - // tests/artifacts/crypto-ops/contract.algo.ts:106 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:106 - // @arc4.abimethod() - callsub verify_mimc - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_vrf_verify_route@15: - // tests/artifacts/crypto-ops/contract.algo.ts:99 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:99 - // @arc4.abimethod() - callsub verify_vrf_verify - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - bytec_1 // 0x00 - intc_0 // 0 - uncover 3 - setbit - pushbytes 0x0003 - swap - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ecdsa_decompress_r1_route@14: - // tests/artifacts/crypto-ops/contract.algo.ts:93 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:93 - // @arc4.abimethod() - callsub verify_ecdsa_decompress_r1 - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - intc_2 // 4 - + - itob - extract 6 2 - bytec_2 // 0x0004 - swap - concat - uncover 2 - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ecdsa_decompress_k1_route@13: - // tests/artifacts/crypto-ops/contract.algo.ts:87 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:87 - // @arc4.abimethod() - callsub verify_ecdsa_decompress_k1 - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - intc_2 // 4 - + - itob - extract 6 2 - bytec_2 // 0x0004 - swap - concat - uncover 2 - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ecdsa_recover_r1_route@12: - // tests/artifacts/crypto-ops/contract.algo.ts:78 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - extract 2 0 - txna ApplicationArgs 4 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:78 - // @arc4.abimethod() - callsub verify_ecdsa_recover_r1 - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - intc_2 // 4 - + - itob - extract 6 2 - bytec_2 // 0x0004 - swap - concat - uncover 2 - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ecdsa_recover_k1_route@11: - // tests/artifacts/crypto-ops/contract.algo.ts:72 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - extract 2 0 - txna ApplicationArgs 4 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:72 - // @arc4.abimethod() - callsub verify_ecdsa_recover_k1 - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - dig 1 - len - intc_2 // 4 - + - itob - extract 6 2 - bytec_2 // 0x0004 - swap - concat - uncover 2 - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ecdsa_verify_r1_route@10: - // tests/artifacts/crypto-ops/contract.algo.ts:65 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - extract 2 0 - txna ApplicationArgs 4 - extract 2 0 - txna ApplicationArgs 5 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:65 - // @arc4.abimethod() - callsub verify_ecdsa_verify_r1 - bytec_1 // 0x00 - intc_0 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ecdsa_verify_k1_route@9: - // tests/artifacts/crypto-ops/contract.algo.ts:58 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - extract 2 0 - txna ApplicationArgs 4 - extract 2 0 - txna ApplicationArgs 5 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:58 - // @arc4.abimethod() - callsub verify_ecdsa_verify_k1 - bytec_1 // 0x00 - intc_0 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ed25519verify_bare_route@8: - // tests/artifacts/crypto-ops/contract.algo.ts:51 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:51 - // @arc4.abimethod() - callsub verify_ed25519verify_bare - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_ed25519verify_route@7: - // tests/artifacts/crypto-ops/contract.algo.ts:44 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/crypto-ops/contract.algo.ts:44 - // @arc4.abimethod() - callsub verify_ed25519verify - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_sha512_256_route@6: - // tests/artifacts/crypto-ops/contract.algo.ts:37 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/crypto-ops/contract.algo.ts:37 - // @arc4.abimethod() - callsub verify_sha512_256 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_keccak_256_route@5: - // tests/artifacts/crypto-ops/contract.algo.ts:30 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/crypto-ops/contract.algo.ts:30 - // @arc4.abimethod() - callsub verify_keccak_256 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_sha3_256_route@4: - // tests/artifacts/crypto-ops/contract.algo.ts:23 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/crypto-ops/contract.algo.ts:23 - // @arc4.abimethod() - callsub verify_sha3_256 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_verify_sha256_route@3: - // tests/artifacts/crypto-ops/contract.algo.ts:16 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/crypto-ops/contract.algo.ts:16 - // @arc4.abimethod() - callsub verify_sha256 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_1 // 1 - return - -main_bare_routing@19: - // tests/artifacts/crypto-ops/contract.algo.ts:14-15 - // @contract({ name: 'CryptoOpsContract', avmVersion: 11 }) - // export class CryptoOpsContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@23 - txn ApplicationID - ! - assert // can only call when creating - intc_1 // 1 - return - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_sha256(a: bytes, pad_size: uint64) -> bytes: -verify_sha256: - // tests/artifacts/crypto-ops/contract.algo.ts:16-17 - // @arc4.abimethod() - // public verify_sha256(a: bytes, pad_size: uint64): bytes { - proto 2 1 - // tests/artifacts/crypto-ops/contract.algo.ts:18 - // const paddedA = op.bzero(pad_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/crypto-ops/contract.algo.ts:19 - // const result = op.sha256(paddedA) - sha256 - // tests/artifacts/crypto-ops/contract.algo.ts:20 - // return result - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_sha3_256(a: bytes, pad_size: uint64) -> bytes: -verify_sha3_256: - // tests/artifacts/crypto-ops/contract.algo.ts:23-24 - // @arc4.abimethod() - // public verify_sha3_256(a: bytes, pad_size: uint64): bytes { - proto 2 1 - // tests/artifacts/crypto-ops/contract.algo.ts:25 - // const paddedA = op.bzero(pad_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/crypto-ops/contract.algo.ts:26 - // const result = op.sha3_256(paddedA) - sha3_256 - // tests/artifacts/crypto-ops/contract.algo.ts:27 - // return result - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_keccak_256(a: bytes, pad_size: uint64) -> bytes: -verify_keccak_256: - // tests/artifacts/crypto-ops/contract.algo.ts:30-31 - // @arc4.abimethod() - // public verify_keccak_256(a: bytes, pad_size: uint64): bytes { - proto 2 1 - // tests/artifacts/crypto-ops/contract.algo.ts:32 - // const paddedA = op.bzero(pad_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/crypto-ops/contract.algo.ts:33 - // const result = op.keccak256(paddedA) - keccak256 - // tests/artifacts/crypto-ops/contract.algo.ts:34 - // return result - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_sha512_256(a: bytes, pad_size: uint64) -> bytes: -verify_sha512_256: - // tests/artifacts/crypto-ops/contract.algo.ts:37-38 - // @arc4.abimethod() - // public verify_sha512_256(a: bytes, pad_size: uint64): bytes { - proto 2 1 - // tests/artifacts/crypto-ops/contract.algo.ts:39 - // const paddedA = op.bzero(pad_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/crypto-ops/contract.algo.ts:40 - // const result = op.sha512_256(paddedA) - sha512_256 - // tests/artifacts/crypto-ops/contract.algo.ts:41 - // return result - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ed25519verify(a: bytes, b: bytes, c: bytes) -> bytes: -verify_ed25519verify: - // tests/artifacts/crypto-ops/contract.algo.ts:44-45 - // @arc4.abimethod() - // public verify_ed25519verify(a: bytes, b: bytes, c: bytes): Bool { - proto 3 1 - // tests/artifacts/crypto-ops/contract.algo.ts:46 - // ensureBudget(1900, OpUpFeeSource.GroupCredit) - pushint 1900 // 1900 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:47 - // const result = op.ed25519verify(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - ed25519verify - // tests/artifacts/crypto-ops/contract.algo.ts:48 - // return new Bool(result) - bytec_1 // 0x00 - intc_0 // 0 - uncover 2 - setbit - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ed25519verify_bare(a: bytes, b: bytes, c: bytes) -> bytes: -verify_ed25519verify_bare: - // tests/artifacts/crypto-ops/contract.algo.ts:51-52 - // @arc4.abimethod() - // public verify_ed25519verify_bare(a: bytes, b: bytes, c: bytes): Bool { - proto 3 1 - // tests/artifacts/crypto-ops/contract.algo.ts:53 - // ensureBudget(1900, OpUpFeeSource.GroupCredit) - pushint 1900 // 1900 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:54 - // const result = op.ed25519verifyBare(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - ed25519verify_bare - // tests/artifacts/crypto-ops/contract.algo.ts:55 - // return new Bool(result) - bytec_1 // 0x00 - intc_0 // 0 - uncover 2 - setbit - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ecdsa_verify_k1(a: bytes, b: bytes, c: bytes, d: bytes, e: bytes) -> uint64: -verify_ecdsa_verify_k1: - // tests/artifacts/crypto-ops/contract.algo.ts:58-59 - // @arc4.abimethod() - // public verify_ecdsa_verify_k1(a: bytes, b: bytes, c: bytes, d: bytes, e: bytes): boolean { - proto 5 1 - // tests/artifacts/crypto-ops/contract.algo.ts:60 - // ensureBudget(3000, OpUpFeeSource.GroupCredit) - intc_3 // 3000 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:61 - // const result_k1 = op.ecdsaVerify(Ecdsa.Secp256k1, a, b, c, d, e) - frame_dig -5 - frame_dig -4 - frame_dig -3 - frame_dig -2 - frame_dig -1 - ecdsa_verify Secp256k1 - // tests/artifacts/crypto-ops/contract.algo.ts:62 - // return result_k1 - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ecdsa_verify_r1(a: bytes, b: bytes, c: bytes, d: bytes, e: bytes) -> uint64: -verify_ecdsa_verify_r1: - // tests/artifacts/crypto-ops/contract.algo.ts:65-66 - // @arc4.abimethod() - // public verify_ecdsa_verify_r1(a: bytes, b: bytes, c: bytes, d: bytes, e: bytes): boolean { - proto 5 1 - // tests/artifacts/crypto-ops/contract.algo.ts:67 - // ensureBudget(3000, OpUpFeeSource.GroupCredit) - intc_3 // 3000 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:68 - // const result_r1 = op.ecdsaVerify(Ecdsa.Secp256r1, a, b, c, d, e) - frame_dig -5 - frame_dig -4 - frame_dig -3 - frame_dig -2 - frame_dig -1 - ecdsa_verify Secp256r1 - // tests/artifacts/crypto-ops/contract.algo.ts:69 - // return result_r1 - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ecdsa_recover_k1(a: bytes, b: uint64, c: bytes, d: bytes) -> bytes, bytes: -verify_ecdsa_recover_k1: - // tests/artifacts/crypto-ops/contract.algo.ts:72-73 - // @arc4.abimethod() - // public verify_ecdsa_recover_k1(a: bytes, b: uint64, c: bytes, d: bytes): readonly [bytes, bytes] { - proto 4 2 - // tests/artifacts/crypto-ops/contract.algo.ts:74 - // ensureBudget(3000, OpUpFeeSource.GroupCredit) - intc_3 // 3000 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:75 - // return op.ecdsaPkRecover(Ecdsa.Secp256k1, a, b, c, d) - frame_dig -4 - frame_dig -3 - frame_dig -2 - frame_dig -1 - ecdsa_pk_recover Secp256k1 - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ecdsa_recover_r1(a: bytes, b: uint64, c: bytes, d: bytes) -> bytes, bytes: -verify_ecdsa_recover_r1: - // tests/artifacts/crypto-ops/contract.algo.ts:78-79 - // @arc4.abimethod() - // public verify_ecdsa_recover_r1(a: bytes, b: uint64, c: bytes, d: bytes): readonly [bytes, bytes] { - proto 4 2 - // tests/artifacts/crypto-ops/contract.algo.ts:83 - // ensureBudget(3000, OpUpFeeSource.GroupCredit) - intc_3 // 3000 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:84 - // return op.ecdsaPkRecover(Ecdsa.Secp256r1, a, b, c, d) - frame_dig -4 - frame_dig -3 - frame_dig -2 - frame_dig -1 - ecdsa_pk_recover Secp256r1 - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ecdsa_decompress_k1(a: bytes) -> bytes, bytes: -verify_ecdsa_decompress_k1: - // tests/artifacts/crypto-ops/contract.algo.ts:87-88 - // @arc4.abimethod() - // public verify_ecdsa_decompress_k1(a: bytes): readonly [bytes, bytes] { - proto 1 2 - // tests/artifacts/crypto-ops/contract.algo.ts:89 - // ensureBudget(700, OpUpFeeSource.GroupCredit) - pushint 700 // 700 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:90 - // return op.ecdsaPkDecompress(Ecdsa.Secp256k1, a) - frame_dig -1 - ecdsa_pk_decompress Secp256k1 - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_ecdsa_decompress_r1(a: bytes) -> bytes, bytes: -verify_ecdsa_decompress_r1: - // tests/artifacts/crypto-ops/contract.algo.ts:93-94 - // @arc4.abimethod() - // public verify_ecdsa_decompress_r1(a: bytes): readonly [bytes, bytes] { - proto 1 2 - // tests/artifacts/crypto-ops/contract.algo.ts:95 - // ensureBudget(700, OpUpFeeSource.GroupCredit) - pushint 700 // 700 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:96 - // return op.ecdsaPkDecompress(Ecdsa.Secp256r1, a) - frame_dig -1 - ecdsa_pk_decompress Secp256r1 - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_vrf_verify(a: bytes, b: bytes, c: bytes) -> bytes, uint64: -verify_vrf_verify: - // tests/artifacts/crypto-ops/contract.algo.ts:99-100 - // @arc4.abimethod() - // public verify_vrf_verify(a: bytes, b: bytes, c: bytes): readonly [bytes, boolean] { - proto 3 2 - // tests/artifacts/crypto-ops/contract.algo.ts:101 - // ensureBudget(5700, OpUpFeeSource.GroupCredit) - pushint 5700 // 5700 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:102 - // const result = op.vrfVerify(VrfVerify.VrfAlgorand, a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - vrf_verify VrfAlgorand - // tests/artifacts/crypto-ops/contract.algo.ts:103 - // return result - retsub - - -// tests/artifacts/crypto-ops/contract.algo.ts::CryptoOpsContract.verify_mimc(a: bytes) -> bytes: -verify_mimc: - // tests/artifacts/crypto-ops/contract.algo.ts:106-107 - // @arc4.abimethod() - // public verify_mimc(a: bytes): bytes { - proto 1 1 - // tests/artifacts/crypto-ops/contract.algo.ts:108 - // ensureBudget(5700, OpUpFeeSource.GroupCredit) - pushint 5700 // 5700 - intc_0 // 0 - callsub ensure_budget - // tests/artifacts/crypto-ops/contract.algo.ts:109 - // const result = op.mimc(MimcConfigurations.BN254Mp110, a) - frame_dig -1 - mimc BN254Mp110 - // tests/artifacts/crypto-ops/contract.algo.ts:110 - // return result - retsub - - -// _puya_lib.util.ensure_budget(required_budget: uint64, fee_source: uint64) -> void: -ensure_budget: - proto 2 0 - frame_dig -2 - pushint 10 // 10 - + - -ensure_budget_while_top@1: - frame_dig 0 - global OpcodeBudget - > - bz ensure_budget_after_while@7 - itxn_begin - pushint 6 // appl - itxn_field TypeEnum - pushint 5 // DeleteApplication - itxn_field OnCompletion - bytec_3 // 0x068101 - itxn_field ApprovalProgram - bytec_3 // 0x068101 - itxn_field ClearStateProgram - frame_dig -1 - switch ensure_budget_switch_case_0@3 ensure_budget_switch_case_1@4 - -ensure_budget_switch_case_next@6: - itxn_submit - b ensure_budget_while_top@1 - -ensure_budget_switch_case_1@4: - global MinTxnFee - itxn_field Fee - b ensure_budget_switch_case_next@6 - -ensure_budget_switch_case_0@3: - intc_0 // 0 - itxn_field Fee - b ensure_budget_switch_case_next@6 - -ensure_budget_after_while@7: - retsub diff --git a/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc32.json b/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc32.json deleted file mode 100644 index 56233a1..0000000 --- a/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc32.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "hints": { - "verify_sha256(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_sha3_256(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_keccak_256(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_sha512_256(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ed25519verify(byte[],byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ed25519verify_bare(byte[],byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ecdsa_verify_k1(byte[],byte[],byte[],byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ecdsa_verify_r1(byte[],byte[],byte[],byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ecdsa_recover_k1(byte[],uint64,byte[],byte[])(byte[],byte[])": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ecdsa_recover_r1(byte[],uint64,byte[],byte[])(byte[],byte[])": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ecdsa_decompress_k1(byte[])(byte[],byte[])": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ecdsa_decompress_r1(byte[])(byte[],byte[])": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_vrf_verify(byte[],byte[],byte[])(byte[],bool)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_mimc(byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQgMzAwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAgMHgwMDA0IDB4MDY4MTAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTkKICAgIHB1c2hieXRlc3MgMHgzNDU2YzRjMyAweGU4NDQyYjg0IDB4NjVmNTY3YWEgMHgyNTg0NTViMSAweDM1YWYwZjM4IDB4NjU4MmM5OTcgMHg2Mjk4ZmZiYiAweDM4ODViNTRmIDB4MjE2NGUwYmYgMHg3NTViNzlhNSAweGYwNmJiMDc3IDB4MTMzZjhjY2MgMHgyZjdjNjhhOSAweGM0M2YwMjIwIC8vIG1ldGhvZCAidmVyaWZ5X3NoYTI1NihieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NoYTNfMjU2KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfa2VjY2FrXzI1NihieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NoYTUxMl8yNTYoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9lZDI1NTE5dmVyaWZ5KGJ5dGVbXSxieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmUoYnl0ZVtdLGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMShieXRlW10sYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lY2RzYV92ZXJpZnlfcjEoYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMShieXRlW10sdWludDY0LGJ5dGVbXSxieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMShieXRlW10sdWludDY0LGJ5dGVbXSxieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19rMShieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMShieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfdnJmX3ZlcmlmeShieXRlW10sYnl0ZVtdLGJ5dGVbXSkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJ2ZXJpZnlfbWltYyhieXRlW10pYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfc2hhMjU2X3JvdXRlQDMgbWFpbl92ZXJpZnlfc2hhM18yNTZfcm91dGVANCBtYWluX3ZlcmlmeV9rZWNjYWtfMjU2X3JvdXRlQDUgbWFpbl92ZXJpZnlfc2hhNTEyXzI1Nl9yb3V0ZUA2IG1haW5fdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfcm91dGVANyBtYWluX3ZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmVfcm91dGVAOCBtYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfazFfcm91dGVAOSBtYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfcjFfcm91dGVAMTAgbWFpbl92ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMV9yb3V0ZUAxMSBtYWluX3ZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxX3JvdXRlQDEyIG1haW5fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazFfcm91dGVAMTMgbWFpbl92ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMV9yb3V0ZUAxNCBtYWluX3ZlcmlmeV92cmZfdmVyaWZ5X3JvdXRlQDE1IG1haW5fdmVyaWZ5X21pbWNfcm91dGVAMTYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X21pbWNfcm91dGVAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfbWltYwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3ZyZl92ZXJpZnlfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdnJmX3ZlcmlmeQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjFfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzIgLy8gMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazFfcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazEKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzIgLy8gMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VjZHNhX3JlY292ZXJfcjFfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMiAvLyAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18yIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfcjFfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9lY2RzYV92ZXJpZnlfcjEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfazFfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZV9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZWQyNTUxOXZlcmlmeV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VkMjU1MTl2ZXJpZnkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3NoYTUxMl8yNTZfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2hhNTEyXzI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2tlY2Nha18yNTZfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfa2VjY2FrXzI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3NoYTNfMjU2X3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NoYTNfMjU2CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2hhMjU2X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NoYTI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyMwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfc2hhMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X3NoYTI1NjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYtMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NoYTI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaGEyNTYocGFkZGVkQSkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3NoYTNfMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X3NoYTNfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2hhM18yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfc2l6ZSkuY29uY2F0KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2hhM18yNTYocGFkZGVkQSkKICAgIHNoYTNfMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfa2VjY2FrXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9rZWNjYWtfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozMC0zMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfa2VjY2FrXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozMgogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5rZWNjYWsyNTYocGFkZGVkQSkKICAgIGtlY2NhazI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3NoYTUxMl8yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfc2hhNTEyXzI1NjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NoYTUxMl8yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfc2l6ZSkuY29uY2F0KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2hhNTEyXzI1NihwYWRkZWRBKQogICAgc2hhNTEyXzI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VkMjU1MTl2ZXJpZnkoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9lZDI1NTE5dmVyaWZ5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NC00NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZWQyNTUxOXZlcmlmeShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGVuc3VyZUJ1ZGdldCgxOTAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCAxOTAwIC8vIDE5MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmVkMjU1MTl2ZXJpZnkoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVkMjU1MTl2ZXJpZnkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHJldHVybiBuZXcgQm9vbChyZXN1bHQpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEtNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGVuc3VyZUJ1ZGdldCgxOTAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCAxOTAwIC8vIDE5MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmVkMjU1MTl2ZXJpZnlCYXJlKGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlZDI1NTE5dmVyaWZ5X2JhcmUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIHJldHVybiBuZXcgQm9vbChyZXN1bHQpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcywgZTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgtNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcywgZTogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDUgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gZW5zdXJlQnVkZ2V0KDMwMDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBpbnRjXzMgLy8gMzAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gY29uc3QgcmVzdWx0X2sxID0gb3AuZWNkc2FWZXJpZnkoRWNkc2EuU2VjcDI1NmsxLCBhLCBiLCBjLCBkLCBlKQogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVjZHNhX3ZlcmlmeSBTZWNwMjU2azEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjIKICAgIC8vIHJldHVybiByZXN1bHRfazEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6OkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9lY2RzYV92ZXJpZnlfcjEoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9lY2RzYV92ZXJpZnlfcjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1LTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV92ZXJpZnlfcjEoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byA1IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGVuc3VyZUJ1ZGdldCgzMDAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgaW50Y18zIC8vIDMwMDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IHJlc3VsdF9yMSA9IG9wLmVjZHNhVmVyaWZ5KEVjZHNhLlNlY3AyNTZyMSwgYSwgYiwgYywgZCwgZSkKICAgIGZyYW1lX2RpZyAtNQogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV92ZXJpZnkgU2VjcDI1NnIxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyByZXR1cm4gcmVzdWx0X3IxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMShhOiBieXRlcywgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKdmVyaWZ5X2VjZHNhX3JlY292ZXJfazE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyLTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzLCBkOiBieXRlcyk6IHJlYWRvbmx5IFtieXRlcywgYnl0ZXNdIHsKICAgIHByb3RvIDQgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gZW5zdXJlQnVkZ2V0KDMwMDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBpbnRjXzMgLy8gMzAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gcmV0dXJuIG9wLmVjZHNhUGtSZWNvdmVyKEVjZHNhLlNlY3AyNTZrMSwgYSwgYiwgYywgZCkKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZWNkc2FfcGtfcmVjb3ZlciBTZWNwMjU2azEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6OkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzLCBkOiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgp2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzgtNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX3JlY292ZXJfcjEoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogYnl0ZXMsIGQ6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gNCAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBlbnN1cmVCdWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMyAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa1JlY292ZXIoRWNkc2EuU2VjcDI1NnIxLCBhLCBiLCBjLCBkKQogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19yZWNvdmVyIFNlY3AyNTZyMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazEoYTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX2sxKGE6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gMSAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBlbnN1cmVCdWRnZXQoNzAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCA3MDAgLy8gNzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa0RlY29tcHJlc3MoRWNkc2EuU2VjcDI1NmsxLCBhKQogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZrMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEoYTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX3IxKGE6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gMSAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyBlbnN1cmVCdWRnZXQoNzAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCA3MDAgLy8gNzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa0RlY29tcHJlc3MoRWNkc2EuU2VjcDI1NnIxLCBhKQogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZyMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3ZyZl92ZXJpZnkoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gYnl0ZXMsIHVpbnQ2NDoKdmVyaWZ5X3ZyZl92ZXJpZnk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5LTEwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdnJmX3ZlcmlmeShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBib29sZWFuXSB7CiAgICBwcm90byAzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBlbnN1cmVCdWRnZXQoNTcwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgNTcwMCAvLyA1NzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AudnJmVmVyaWZ5KFZyZlZlcmlmeS5WcmZBbGdvcmFuZCwgYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHZyZl92ZXJpZnkgVnJmQWxnb3JhbmQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfbWltYyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9taW1jOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMDYtMTA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9taW1jKGE6IGJ5dGVzKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gZW5zdXJlQnVkZ2V0KDU3MDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBwdXNoaW50IDU3MDAgLy8gNTcwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLm1pbWMoTWltY0NvbmZpZ3VyYXRpb25zLkJOMjU0TXAxMTAsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIG1pbWMgQk4yNTRNcDExMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANwogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjXzMgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlY18zIC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANDoKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA2CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMzoKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANgoKZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA3OgogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "CryptoOpsContract", - "methods": [ - { - "name": "verify_sha256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_sha3_256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_keccak_256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_sha512_256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_ed25519verify", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_ed25519verify_bare", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_ecdsa_verify_k1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "byte[]", - "name": "e" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_ecdsa_verify_r1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "byte[]", - "name": "e" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_ecdsa_recover_k1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - } - ], - "readonly": false, - "returns": { - "type": "(byte[],byte[])" - } - }, - { - "name": "verify_ecdsa_recover_r1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - } - ], - "readonly": false, - "returns": { - "type": "(byte[],byte[])" - } - }, - { - "name": "verify_ecdsa_decompress_k1", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "(byte[],byte[])" - } - }, - { - "name": "verify_ecdsa_decompress_r1", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "(byte[],byte[])" - } - }, - { - "name": "verify_vrf_verify", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "(byte[],bool)" - } - }, - { - "name": "verify_mimc", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json b/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json deleted file mode 100644 index 86de184..0000000 --- a/tests/artifacts/crypto-ops/data/CryptoOpsContract.arc56.json +++ /dev/null @@ -1,502 +0,0 @@ -{ - "name": "CryptoOpsContract", - "structs": {}, - "methods": [ - { - "name": "verify_sha256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_sha3_256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_keccak_256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_sha512_256", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ed25519verify", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ed25519verify_bare", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ecdsa_verify_k1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "byte[]", - "name": "e" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ecdsa_verify_r1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "byte[]", - "name": "e" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ecdsa_recover_k1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - } - ], - "returns": { - "type": "(byte[],byte[])" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ecdsa_recover_r1", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - } - ], - "returns": { - "type": "(byte[],byte[])" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ecdsa_decompress_k1", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "(byte[],byte[])" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_ecdsa_decompress_r1", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "(byte[],byte[])" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_vrf_verify", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "(byte[],bool)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_mimc", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 139, - 169, - 226, - 285, - 344, - 419, - 494, - 545, - 596, - 630, - 664, - 698, - 732, - 766 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 805 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 142, - 172, - 229, - 288, - 347, - 422, - 497, - 548, - 599, - 633, - 667, - 701, - 735, - 769 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQgMzAwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAgMHgwMDA0IDB4MDY4MTAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTkKICAgIHB1c2hieXRlc3MgMHgzNDU2YzRjMyAweGU4NDQyYjg0IDB4NjVmNTY3YWEgMHgyNTg0NTViMSAweDM1YWYwZjM4IDB4NjU4MmM5OTcgMHg2Mjk4ZmZiYiAweDM4ODViNTRmIDB4MjE2NGUwYmYgMHg3NTViNzlhNSAweGYwNmJiMDc3IDB4MTMzZjhjY2MgMHgyZjdjNjhhOSAweGM0M2YwMjIwIC8vIG1ldGhvZCAidmVyaWZ5X3NoYTI1NihieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NoYTNfMjU2KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfa2VjY2FrXzI1NihieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NoYTUxMl8yNTYoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9lZDI1NTE5dmVyaWZ5KGJ5dGVbXSxieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmUoYnl0ZVtdLGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMShieXRlW10sYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9lY2RzYV92ZXJpZnlfcjEoYnl0ZVtdLGJ5dGVbXSxieXRlW10sYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMShieXRlW10sdWludDY0LGJ5dGVbXSxieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMShieXRlW10sdWludDY0LGJ5dGVbXSxieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19rMShieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMShieXRlW10pKGJ5dGVbXSxieXRlW10pIiwgbWV0aG9kICJ2ZXJpZnlfdnJmX3ZlcmlmeShieXRlW10sYnl0ZVtdLGJ5dGVbXSkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJ2ZXJpZnlfbWltYyhieXRlW10pYnl0ZVtdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfc2hhMjU2X3JvdXRlQDMgbWFpbl92ZXJpZnlfc2hhM18yNTZfcm91dGVANCBtYWluX3ZlcmlmeV9rZWNjYWtfMjU2X3JvdXRlQDUgbWFpbl92ZXJpZnlfc2hhNTEyXzI1Nl9yb3V0ZUA2IG1haW5fdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfcm91dGVANyBtYWluX3ZlcmlmeV9lZDI1NTE5dmVyaWZ5X2JhcmVfcm91dGVAOCBtYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfazFfcm91dGVAOSBtYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfcjFfcm91dGVAMTAgbWFpbl92ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMV9yb3V0ZUAxMSBtYWluX3ZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxX3JvdXRlQDEyIG1haW5fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazFfcm91dGVAMTMgbWFpbl92ZXJpZnlfZWNkc2FfZGVjb21wcmVzc19yMV9yb3V0ZUAxNCBtYWluX3ZlcmlmeV92cmZfdmVyaWZ5X3JvdXRlQDE1IG1haW5fdmVyaWZ5X21pbWNfcm91dGVAMTYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X21pbWNfcm91dGVAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfbWltYwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3ZyZl92ZXJpZnlfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdnJmX3ZlcmlmeQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgcHVzaGJ5dGVzIDB4MDAwMwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjFfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzIgLy8gMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazFfcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazEKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjXzIgLy8gMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VjZHNhX3JlY292ZXJfcjFfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMQogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGludGNfMiAvLyA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWNfMiAvLyAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18yIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlY18yIC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfcjFfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9lY2RzYV92ZXJpZnlfcjEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9lY2RzYV92ZXJpZnlfazFfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZV9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZWQyNTUxOXZlcmlmeV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VkMjU1MTl2ZXJpZnkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3NoYTUxMl8yNTZfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2hhNTEyXzI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2tlY2Nha18yNTZfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQtMTUKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdDcnlwdG9PcHNDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgQ3J5cHRvT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfa2VjY2FrXzI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3NoYTNfMjU2X3JvdXRlQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NoYTNfMjU2CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2hhMjU2X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0LTE1CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnQ3J5cHRvT3BzQ29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIENyeXB0b09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NoYTI1NgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxNC0xNQogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ0NyeXB0b09wc0NvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBDcnlwdG9PcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyMwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfc2hhMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X3NoYTI1NjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYtMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NoYTI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaGEyNTYocGFkZGVkQSkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3NoYTNfMjU2KGE6IGJ5dGVzLCBwYWRfc2l6ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X3NoYTNfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2hhM18yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfc2l6ZSkuY29uY2F0KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2hhM18yNTYocGFkZGVkQSkKICAgIHNoYTNfMjU2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfa2VjY2FrXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9rZWNjYWtfMjU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozMC0zMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfa2VjY2FrXzI1NihhOiBieXRlcywgcGFkX3NpemU6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozMgogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5rZWNjYWsyNTYocGFkZGVkQSkKICAgIGtlY2NhazI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3NoYTUxMl8yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfc2hhNTEyXzI1NjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NoYTUxMl8yNTYoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfc2l6ZSkuY29uY2F0KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2hhNTEyXzI1NihwYWRkZWRBKQogICAgc2hhNTEyXzI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VkMjU1MTl2ZXJpZnkoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9lZDI1NTE5dmVyaWZ5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo0NC00NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZWQyNTUxOXZlcmlmeShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGVuc3VyZUJ1ZGdldCgxOTAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCAxOTAwIC8vIDE5MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmVkMjU1MTl2ZXJpZnkoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVkMjU1MTl2ZXJpZnkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHJldHVybiBuZXcgQm9vbChyZXN1bHQpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEtNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VkMjU1MTl2ZXJpZnlfYmFyZShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIGVuc3VyZUJ1ZGdldCgxOTAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCAxOTAwIC8vIDE5MDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmVkMjU1MTl2ZXJpZnlCYXJlKGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlZDI1NTE5dmVyaWZ5X2JhcmUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIHJldHVybiBuZXcgQm9vbChyZXN1bHQpCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcywgZTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgtNTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX3ZlcmlmeV9rMShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcywgZTogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDUgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo2MAogICAgLy8gZW5zdXJlQnVkZ2V0KDMwMDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBpbnRjXzMgLy8gMzAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gY29uc3QgcmVzdWx0X2sxID0gb3AuZWNkc2FWZXJpZnkoRWNkc2EuU2VjcDI1NmsxLCBhLCBiLCBjLCBkLCBlKQogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGVjZHNhX3ZlcmlmeSBTZWNwMjU2azEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjIKICAgIC8vIHJldHVybiByZXN1bHRfazEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6OkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9lY2RzYV92ZXJpZnlfcjEoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9lY2RzYV92ZXJpZnlfcjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1LTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV92ZXJpZnlfcjEoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byA1IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGVuc3VyZUJ1ZGdldCgzMDAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgaW50Y18zIC8vIDMwMDAKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IHJlc3VsdF9yMSA9IG9wLmVjZHNhVmVyaWZ5KEVjZHNhLlNlY3AyNTZyMSwgYSwgYiwgYywgZCwgZSkKICAgIGZyYW1lX2RpZyAtNQogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV92ZXJpZnkgU2VjcDI1NnIxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyByZXR1cm4gcmVzdWx0X3IxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfZWNkc2FfcmVjb3Zlcl9rMShhOiBieXRlcywgYjogdWludDY0LCBjOiBieXRlcywgZDogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKdmVyaWZ5X2VjZHNhX3JlY292ZXJfazE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyLTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV9yZWNvdmVyX2sxKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzLCBkOiBieXRlcyk6IHJlYWRvbmx5IFtieXRlcywgYnl0ZXNdIHsKICAgIHByb3RvIDQgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gZW5zdXJlQnVkZ2V0KDMwMDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBpbnRjXzMgLy8gMzAwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gcmV0dXJuIG9wLmVjZHNhUGtSZWNvdmVyKEVjZHNhLlNlY3AyNTZrMSwgYSwgYiwgYywgZCkKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZWNkc2FfcGtfcmVjb3ZlciBTZWNwMjU2azEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6OkNyeXB0b09wc0NvbnRyYWN0LnZlcmlmeV9lY2RzYV9yZWNvdmVyX3IxKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzLCBkOiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgp2ZXJpZnlfZWNkc2FfcmVjb3Zlcl9yMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6NzgtNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VjZHNhX3JlY292ZXJfcjEoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogYnl0ZXMsIGQ6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gNCAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBlbnN1cmVCdWRnZXQoMzAwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIGludGNfMyAvLyAzMDAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa1JlY292ZXIoRWNkc2EuU2VjcDI1NnIxLCBhLCBiLCBjLCBkKQogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19yZWNvdmVyIFNlY3AyNTZyMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazEoYTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfazE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3LTg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX2sxKGE6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gMSAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBlbnN1cmVCdWRnZXQoNzAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCA3MDAgLy8gNzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa0RlY29tcHJlc3MoRWNkc2EuU2VjcDI1NmsxLCBhKQogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZrMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjEoYTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKdmVyaWZ5X2VjZHNhX2RlY29tcHJlc3NfcjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9lY2RzYV9kZWNvbXByZXNzX3IxKGE6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBieXRlc10gewogICAgcHJvdG8gMSAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyBlbnN1cmVCdWRnZXQoNzAwLCBPcFVwRmVlU291cmNlLkdyb3VwQ3JlZGl0KQogICAgcHVzaGludCA3MDAgLy8gNzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyByZXR1cm4gb3AuZWNkc2FQa0RlY29tcHJlc3MoRWNkc2EuU2VjcDI1NnIxLCBhKQogICAgZnJhbWVfZGlnIC0xCiAgICBlY2RzYV9wa19kZWNvbXByZXNzIFNlY3AyNTZyMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czo6Q3J5cHRvT3BzQ29udHJhY3QudmVyaWZ5X3ZyZl92ZXJpZnkoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gYnl0ZXMsIHVpbnQ2NDoKdmVyaWZ5X3ZyZl92ZXJpZnk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5LTEwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdnJmX3ZlcmlmeShhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzKTogcmVhZG9ubHkgW2J5dGVzLCBib29sZWFuXSB7CiAgICBwcm90byAzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBlbnN1cmVCdWRnZXQoNTcwMCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCkKICAgIHB1c2hpbnQgNTcwMCAvLyA1NzAwCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AudnJmVmVyaWZ5KFZyZlZlcmlmeS5WcmZBbGdvcmFuZCwgYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHZyZl92ZXJpZnkgVnJmQWxnb3JhbmQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9jcnlwdG8tb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjpDcnlwdG9PcHNDb250cmFjdC52ZXJpZnlfbWltYyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9taW1jOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMDYtMTA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9taW1jKGE6IGJ5dGVzKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvY3J5cHRvLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gZW5zdXJlQnVkZ2V0KDU3MDAsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpCiAgICBwdXNoaW50IDU3MDAgLy8gNTcwMAogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLm1pbWMoTWltY0NvbmZpZ3VyYXRpb25zLkJOMjU0TXAxMTAsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIG1pbWMgQk4yNTRNcDExMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2NyeXB0by1vcHMvY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANwogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjXzMgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlY18zIC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMyBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANAoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDY6CiAgICBpdHhuX3N1Ym1pdAogICAgYiBlbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxCgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzFANDoKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA2CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlXzBAMzoKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANgoKZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA3OgogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CyAEAAEEuBcmBAQVH3x1AQACAAQDBoEBMRtBAwCCDgQ0VsTDBOhEK4QEZfVnqgQlhFWxBDWvDzgEZYLJlwRimP+7BDiFtU8EIWTgvwR1W3mlBPBrsHcEEz+MzAQvfGipBMQ/AiA2GgCODgJ1AlMCMQIPAe0BywGYAWUBGgDPAJQAWQAgAAIiQzEZFEQxGEQ2GgFXAgCIA2tJFRZXBgJMUChMULAjQzEZFEQxGEQ2GgFXAgA2GgJXAgA2GgNXAgCIAy5LARUWVwYCTwJQKSJPA1SAAgADTFBMUChMULAjQzEZFEQxGEQ2GgFXAgCIAvJLARUWVwYCTwJQSwEVFlcGAk8CUEsBFSQIFlcGAipMUE8CUExQKExQsCNDMRkURDEYRDYaAVcCAIgCqEsBFRZXBgJPAlBLARUWVwYCTwJQSwEVJAgWVwYCKkxQTwJQTFAoTFCwI0MxGRREMRhENhoBVwIANhoCFzYaA1cCADYaBFcCAIgCSksBFRZXBgJPAlBLARUWVwYCTwJQSwEVJAgWVwYCKkxQTwJQTFAoTFCwI0MxGRREMRhENhoBVwIANhoCFzYaA1cCADYaBFcCAIgB7EsBFRZXBgJPAlBLARUWVwYCTwJQSwEVJAgWVwYCKkxQTwJQTFAoTFCwI0MxGRREMRhENhoBVwIANhoCVwIANhoDVwIANhoEVwIANhoFVwIAiAGEKSJPAlQoTFCwI0MxGRREMRhENhoBVwIANhoCVwIANhoDVwIANhoEVwIANhoFVwIAiAE8KSJPAlQoTFCwI0MxGRREMRhENhoBVwIANhoCVwIANhoDVwIAiAD+KExQsCNDMRkURDEYRDYaAVcCADYaAlcCADYaA1cCAIgAxShMULAjQzEZFEQxGEQ2GgFXAgA2GgIXiACgSRUWVwYCTFAoTFCwI0MxGRREMRhENhoBVwIANhoCF4gAc0kVFlcGAkxQKExQsCNDMRkURDEYRDYaAVcCADYaAheIAEZJFRZXBgJMUChMULAjQzEZFEQxGEQ2GgFXAgA2GgIXiAAZSRUWVwYCTFAoTFCwI0MxGUD9ZDEYFEQjQ4oCAYv/r4v+UAGJigIBi/+vi/5QmImKAgGL/6+L/lACiYoCAYv/r4v+UAOJigMBgewOIogAtIv9i/6L/wQpIk8CVImKAwGB7A4iiACdi/2L/ov/hCkiTwJUiYoFASUiiACIi/uL/Iv9i/6L/wUAiYoFASUiiABzi/uL/Iv9i/6L/wUBiYoEAiUiiABei/yL/Yv+i/8HAImKBAIlIogAS4v8i/2L/ov/BwGJigECgbwFIogANov/BgCJigECgbwFIogAJ4v/BgGJigMCgcQsIogAGIv9i/6L/9AAiYoBAYHELCKIAAWL/+YAiYoCAIv+gQoIiwAyDA1BACixgQayEIEFshkrsh4rsh+L/40CAAsABLNC/90yALIBQv/1IrIBQv/viQ==", - "clear": "C4EBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/crypto-ops/data/CryptoOpsContract.clear.teal b/tests/artifacts/crypto-ops/data/CryptoOpsContract.clear.teal deleted file mode 100644 index 42f81b0..0000000 --- a/tests/artifacts/crypto-ops/data/CryptoOpsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 11 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.approval.teal b/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.approval.teal deleted file mode 100644 index 5be7933..0000000 --- a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.approval.teal +++ /dev/null @@ -1,1560 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 - bytecblock 0x151f7c75 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@40 - pushbytess 0x45847eea 0xf57aceb5 0x7d631730 0xa1b24441 0xcd7be1ac 0x7cfda64b 0x54a910d9 0xc46568de 0x7a46a6ae 0x04372209 0x7e5f6d72 0x24ebcf84 0x9c0b3397 0x0ad40da4 0x95178870 0xdeedc99b 0xab2150bb 0x02a54017 0x3db66b41 0xc7ea8c2a 0x1dcea50c 0x16166f9a 0x2f472065 0xc58d30e0 0xd5a739c3 0x61f3b3e1 0x56cf368b 0x919ffbd2 0x8e30f4e7 0x89f81d92 0xd5260327 0x114c8c6d 0x39e9e62a 0xd6a4c05e 0x1ef8151a // method "verify_addw(uint64,uint64)(uint64,uint64)", method "verify_base64_decode_standard(byte[])byte[]", method "verify_base64_decode_url(byte[])byte[]", method "verify_bytes_bitlen(byte[],uint64)uint64", method "verify_uint64_bitlen(uint64)uint64", method "verify_bsqrt(byte[])byte[]", method "verify_btoi(byte[])uint64", method "verify_bzero(uint64)byte[]", method "verify_concat(byte[],byte[],uint64,uint64)byte[]", method "verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)", method "verify_divw(uint64,uint64,uint64)uint64", method "verify_err()void", method "verify_exp(uint64,uint64)uint64", method "verify_expw(uint64,uint64)(uint64,uint64)", method "verify_extract(byte[],uint64,uint64)byte[]", method "verify_extract_from_2(byte[])byte[]", method "verify_extract_uint16(byte[],uint64)uint64", method "verify_extract_uint32(byte[],uint64)uint64", method "verify_extract_uint64(byte[],uint64)uint64", method "verify_getbit_bytes(byte[],uint64)uint64", method "verify_getbit_uint64(uint64,uint64)uint64", method "verify_getbyte(byte[],uint64)uint64", method "verify_itob(uint64)byte[]", method "verify_bytes_len(byte[],uint64)uint64", method "verify_mulw(uint64,uint64)(uint64,uint64)", method "verify_replace(byte[],uint64,byte[])byte[]", method "verify_select_bytes(byte[],byte[],uint64)byte[]", method "verify_select_uint64(uint64,uint64,uint64)uint64", method "verify_setbit_bytes(byte[],uint64,uint64)byte[]", method "verify_setbit_uint64(uint64,uint64,uint64)uint64", method "verify_setbyte(byte[],uint64,uint64)byte[]", method "verify_shl(uint64,uint64)uint64", method "verify_shr(uint64,uint64)uint64", method "verify_sqrt(uint64)uint64", method "verify_substring(byte[],uint64,uint64)byte[]" - txna ApplicationArgs 0 - match main_verify_addw_route@3 main_verify_base64_decode_standard_route@4 main_verify_base64_decode_url_route@5 main_verify_bytes_bitlen_route@6 main_verify_uint64_bitlen_route@7 main_verify_bsqrt_route@8 main_verify_btoi_route@9 main_verify_bzero_route@10 main_verify_concat_route@11 main_verify_divmodw_route@12 main_verify_divw_route@13 main_verify_err_route@14 main_verify_exp_route@15 main_verify_expw_route@16 main_verify_extract_route@17 main_verify_extract_from_2_route@18 main_verify_extract_uint16_route@19 main_verify_extract_uint32_route@20 main_verify_extract_uint64_route@21 main_verify_getbit_bytes_route@22 main_verify_getbit_uint64_route@23 main_verify_getbyte_route@24 main_verify_itob_route@25 main_verify_bytes_len_route@26 main_verify_mulw_route@27 main_verify_replace_route@28 main_verify_select_bytes_route@29 main_verify_select_uint64_route@30 main_verify_setbit_bytes_route@31 main_verify_setbit_uint64_route@32 main_verify_setbyte_route@33 main_verify_shl_route@34 main_verify_shr_route@35 main_verify_sqrt_route@36 main_verify_substring_route@37 - -main_after_if_else@44: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - pushint 0 // 0 - return - -main_verify_substring_route@37: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:214 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:214 - // @arc4.abimethod() - callsub verify_substring - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_sqrt_route@36: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:208 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:208 - // @arc4.abimethod() - callsub verify_sqrt - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_shr_route@35: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:202 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:202 - // @arc4.abimethod() - callsub verify_shr - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_shl_route@34: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:196 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:196 - // @arc4.abimethod() - callsub verify_shl - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_setbyte_route@33: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:190 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:190 - // @arc4.abimethod() - callsub verify_setbyte - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_setbit_uint64_route@32: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:184 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:184 - // @arc4.abimethod() - callsub verify_setbit_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_setbit_bytes_route@31: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:178 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:178 - // @arc4.abimethod() - callsub verify_setbit_bytes - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_select_uint64_route@30: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:172 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:172 - // @arc4.abimethod() - callsub verify_select_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_select_bytes_route@29: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:166 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:166 - // @arc4.abimethod() - callsub verify_select_bytes - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_replace_route@28: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:160 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:160 - // @arc4.abimethod() - callsub verify_replace - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_mulw_route@27: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:154 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:154 - // @arc4.abimethod() - callsub verify_mulw - swap - itob - swap - itob - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_len_route@26: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:147 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:147 - // @arc4.abimethod() - callsub verify_bytes_len - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_itob_route@25: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:141 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:141 - // @arc4.abimethod() - callsub verify_itob - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_getbyte_route@24: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:135 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:135 - // @arc4.abimethod() - callsub verify_getbyte - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_getbit_uint64_route@23: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:129 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:129 - // @arc4.abimethod() - callsub verify_getbit_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_getbit_bytes_route@22: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:123 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:123 - // @arc4.abimethod() - callsub verify_getbit_bytes - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_extract_uint64_route@21: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:117 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:117 - // @arc4.abimethod() - callsub verify_extract_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_extract_uint32_route@20: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:111 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:111 - // @arc4.abimethod() - callsub verify_extract_uint32 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_extract_uint16_route@19: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:105 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:105 - // @arc4.abimethod() - callsub verify_extract_uint16 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_extract_from_2_route@18: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:99 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:99 - // @arc4.abimethod() - callsub verify_extract_from_2 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_extract_route@17: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:93 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:93 - // @arc4.abimethod() - callsub verify_extract - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_expw_route@16: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:87 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:87 - // @arc4.abimethod() - callsub verify_expw - swap - itob - swap - itob - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_exp_route@15: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:81 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:81 - // @arc4.abimethod() - callsub verify_exp - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_err_route@14: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:76 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:78 - // err() - err - -main_verify_divw_route@13: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:70 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:70 - // @arc4.abimethod() - callsub verify_divw - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_divmodw_route@12: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:64 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - btoi - txna ApplicationArgs 4 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:64 - // @arc4.abimethod() - callsub verify_divmodw - uncover 3 - itob - uncover 3 - itob - uncover 3 - itob - uncover 3 - itob - uncover 3 - uncover 3 - concat - uncover 2 - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_concat_route@11: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:55 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - btoi - txna ApplicationArgs 4 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:55 - // @arc4.abimethod() - callsub verify_concat - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bzero_route@10: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:49 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:49 - // @arc4.abimethod() - callsub verify_bzero - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_btoi_route@9: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:43 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:43 - // @arc4.abimethod() - callsub verify_btoi - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bsqrt_route@8: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:36 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:36 - // @arc4.abimethod() - callsub verify_bsqrt - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_bitlen_route@7: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:30 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:30 - // @arc4.abimethod() - callsub verify_uint64_bitlen - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_bitlen_route@6: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:23 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:23 - // @arc4.abimethod() - callsub verify_bytes_bitlen - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_base64_decode_url_route@5: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:17 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:17 - // @arc4.abimethod() - callsub verify_base64_decode_url - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_base64_decode_standard_route@4: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:11 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:11 - // @arc4.abimethod() - callsub verify_base64_decode_standard - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_addw_route@3: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:5 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:5 - // @arc4.abimethod() - callsub verify_addw - swap - itob - swap - itob - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@40: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:4 - // export class MiscellaneousOpsContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@44 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_addw(a: uint64, b: uint64) -> uint64, uint64: -verify_addw: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:5-6 - // @arc4.abimethod() - // public verify_addw(a: uint64, b: uint64): readonly [uint64, uint64] { - proto 2 2 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:7 - // const result = op.addw(a, b) - frame_dig -2 - frame_dig -1 - addw - // tests/artifacts/miscellaneous-ops/contract.algo.ts:8 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_base64_decode_standard(a: bytes) -> bytes: -verify_base64_decode_standard: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:11-12 - // @arc4.abimethod() - // public verify_base64_decode_standard(a: bytes): bytes { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:13 - // const result = op.base64Decode(Base64.StdEncoding, a) - frame_dig -1 - base64_decode StdEncoding - // tests/artifacts/miscellaneous-ops/contract.algo.ts:14 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_base64_decode_url(a: bytes) -> bytes: -verify_base64_decode_url: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:17-18 - // @arc4.abimethod() - // public verify_base64_decode_url(a: bytes): bytes { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:19 - // const result = op.base64Decode(Base64.URLEncoding, a) - frame_dig -1 - base64_decode URLEncoding - // tests/artifacts/miscellaneous-ops/contract.algo.ts:20 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_bytes_bitlen(a: bytes, pad_a_size: uint64) -> uint64: -verify_bytes_bitlen: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:23-24 - // @arc4.abimethod() - // public verify_bytes_bitlen(a: bytes, pad_a_size: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:25 - // const paddedA = op.bzero(pad_a_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/miscellaneous-ops/contract.algo.ts:26 - // const result = op.bitLength(paddedA) - bitlen - // tests/artifacts/miscellaneous-ops/contract.algo.ts:27 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_uint64_bitlen(a: uint64) -> uint64: -verify_uint64_bitlen: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:30-31 - // @arc4.abimethod() - // public verify_uint64_bitlen(a: uint64): uint64 { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:32 - // const result = op.bitLength(a) - frame_dig -1 - bitlen - // tests/artifacts/miscellaneous-ops/contract.algo.ts:33 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_bsqrt(a: bytes) -> bytes: -verify_bsqrt: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:36-37 - // @arc4.abimethod() - // public verify_bsqrt(a: bytes): bytes { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:39 - // const result = op.bsqrt(a_biguint) - frame_dig -1 - bsqrt - // tests/artifacts/miscellaneous-ops/contract.algo.ts:40 - // return Bytes(result) - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_btoi(a: bytes) -> uint64: -verify_btoi: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:43-44 - // @arc4.abimethod() - // public verify_btoi(a: bytes): uint64 { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:45 - // const result = op.btoi(a) - frame_dig -1 - btoi - // tests/artifacts/miscellaneous-ops/contract.algo.ts:46 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_bzero(a: uint64) -> bytes: -verify_bzero: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:49-50 - // @arc4.abimethod() - // public verify_bzero(a: uint64): bytes { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:51 - // const result = op.bzero(a) - frame_dig -1 - bzero - // tests/artifacts/miscellaneous-ops/contract.algo.ts:52 - // return op.sha256(result) - sha256 - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_concat(a: bytes, b: bytes, pad_a_size: uint64, pad_b_size: uint64) -> bytes: -verify_concat: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:55-56 - // @arc4.abimethod() - // public verify_concat(a: bytes, b: bytes, pad_a_size: uint64, pad_b_size: uint64): bytes { - proto 4 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:57 - // const paddedA = op.bzero(pad_a_size).concat(a) - frame_dig -2 - bzero - frame_dig -4 - concat - // tests/artifacts/miscellaneous-ops/contract.algo.ts:58 - // const paddedB = op.bzero(pad_b_size).concat(b) - frame_dig -1 - bzero - frame_dig -3 - concat - // tests/artifacts/miscellaneous-ops/contract.algo.ts:59 - // const result = paddedA.concat(paddedB) - concat - // tests/artifacts/miscellaneous-ops/contract.algo.ts:60 - // const resultHash = op.sha256(result) - sha256 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:61 - // return resultHash - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_divmodw(a: uint64, b: uint64, c: uint64, d: uint64) -> uint64, uint64, uint64, uint64: -verify_divmodw: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:64-65 - // @arc4.abimethod() - // public verify_divmodw(a: uint64, b: uint64, c: uint64, d: uint64): readonly [uint64, uint64, uint64, uint64] { - proto 4 4 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:66 - // const result = op.divmodw(a, b, c, d) - frame_dig -4 - frame_dig -3 - frame_dig -2 - frame_dig -1 - divmodw - // tests/artifacts/miscellaneous-ops/contract.algo.ts:67 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_divw(a: uint64, b: uint64, c: uint64) -> uint64: -verify_divw: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:70-71 - // @arc4.abimethod() - // public verify_divw(a: uint64, b: uint64, c: uint64): uint64 { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:72 - // const result = op.divw(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - divw - // tests/artifacts/miscellaneous-ops/contract.algo.ts:73 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_exp(a: uint64, b: uint64) -> uint64: -verify_exp: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:81-82 - // @arc4.abimethod() - // public verify_exp(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:83 - // const result = op.exp(a, b) - frame_dig -2 - frame_dig -1 - exp - // tests/artifacts/miscellaneous-ops/contract.algo.ts:84 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_expw(a: uint64, b: uint64) -> uint64, uint64: -verify_expw: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:87-88 - // @arc4.abimethod() - // public verify_expw(a: uint64, b: uint64): readonly [uint64, uint64] { - proto 2 2 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:89 - // const result = op.expw(a, b) - frame_dig -2 - frame_dig -1 - expw - // tests/artifacts/miscellaneous-ops/contract.algo.ts:90 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_extract(a: bytes, b: uint64, c: uint64) -> bytes: -verify_extract: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:93-94 - // @arc4.abimethod() - // public verify_extract(a: bytes, b: uint64, c: uint64): bytes { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:95 - // const result = op.extract(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - extract3 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:96 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_extract_from_2(a: bytes) -> bytes: -verify_extract_from_2: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:99-100 - // @arc4.abimethod() - // public verify_extract_from_2(a: bytes): bytes { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:101 - // const result = op.extract(a, 2) - frame_dig -1 - extract 2 0 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:102 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_extract_uint16(a: bytes, b: uint64) -> uint64: -verify_extract_uint16: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:105-106 - // @arc4.abimethod() - // public verify_extract_uint16(a: bytes, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:107 - // const result = op.extractUint16(a, b) - frame_dig -2 - frame_dig -1 - extract_uint16 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:108 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_extract_uint32(a: bytes, b: uint64) -> uint64: -verify_extract_uint32: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:111-112 - // @arc4.abimethod() - // public verify_extract_uint32(a: bytes, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:113 - // const result = op.extractUint32(a, b) - frame_dig -2 - frame_dig -1 - extract_uint32 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:114 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_extract_uint64(a: bytes, b: uint64) -> uint64: -verify_extract_uint64: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:117-118 - // @arc4.abimethod() - // public verify_extract_uint64(a: bytes, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:119 - // const result = op.extractUint64(a, b) - frame_dig -2 - frame_dig -1 - extract_uint64 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:120 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_getbit_bytes(a: bytes, b: uint64) -> uint64: -verify_getbit_bytes: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:123-124 - // @arc4.abimethod() - // public verify_getbit_bytes(a: bytes, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:125 - // const result = op.getBit(a, b) - frame_dig -2 - frame_dig -1 - getbit - // tests/artifacts/miscellaneous-ops/contract.algo.ts:126 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_getbit_uint64(a: uint64, b: uint64) -> uint64: -verify_getbit_uint64: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:129-130 - // @arc4.abimethod() - // public verify_getbit_uint64(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:131 - // const result = op.getBit(a, b) - frame_dig -2 - frame_dig -1 - getbit - // tests/artifacts/miscellaneous-ops/contract.algo.ts:132 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_getbyte(a: bytes, b: uint64) -> uint64: -verify_getbyte: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:135-136 - // @arc4.abimethod() - // public verify_getbyte(a: bytes, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:137 - // const result = op.getByte(a, b) - frame_dig -2 - frame_dig -1 - getbyte - // tests/artifacts/miscellaneous-ops/contract.algo.ts:138 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_itob(a: uint64) -> bytes: -verify_itob: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:141-142 - // @arc4.abimethod() - // public verify_itob(a: uint64): bytes { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:143 - // const result = op.itob(a) - frame_dig -1 - itob - // tests/artifacts/miscellaneous-ops/contract.algo.ts:144 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_bytes_len(a: bytes, pad_a_size: uint64) -> uint64: -verify_bytes_len: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:147-148 - // @arc4.abimethod() - // public verify_bytes_len(a: bytes, pad_a_size: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:149 - // const paddedA = op.bzero(pad_a_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/miscellaneous-ops/contract.algo.ts:150 - // const result = op.len(paddedA) - len - // tests/artifacts/miscellaneous-ops/contract.algo.ts:151 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_mulw(a: uint64, b: uint64) -> uint64, uint64: -verify_mulw: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:154-155 - // @arc4.abimethod() - // public verify_mulw(a: uint64, b: uint64): readonly [uint64, uint64] { - proto 2 2 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:156 - // const result = op.mulw(a, b) - frame_dig -2 - frame_dig -1 - mulw - // tests/artifacts/miscellaneous-ops/contract.algo.ts:157 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_replace(a: bytes, b: uint64, c: bytes) -> bytes: -verify_replace: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:160-161 - // @arc4.abimethod() - // public verify_replace(a: bytes, b: uint64, c: bytes): bytes { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:162 - // const result = op.replace(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - replace3 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:163 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_select_bytes(a: bytes, b: bytes, c: uint64) -> bytes: -verify_select_bytes: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:166-167 - // @arc4.abimethod() - // public verify_select_bytes(a: bytes, b: bytes, c: uint64): bytes { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:168 - // const result = op.select(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - select - // tests/artifacts/miscellaneous-ops/contract.algo.ts:169 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_select_uint64(a: uint64, b: uint64, c: uint64) -> uint64: -verify_select_uint64: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:172-173 - // @arc4.abimethod() - // public verify_select_uint64(a: uint64, b: uint64, c: uint64): uint64 { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:174 - // const result = op.select(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - select - // tests/artifacts/miscellaneous-ops/contract.algo.ts:175 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_setbit_bytes(a: bytes, b: uint64, c: uint64) -> bytes: -verify_setbit_bytes: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:178-179 - // @arc4.abimethod() - // public verify_setbit_bytes(a: bytes, b: uint64, c: uint64): bytes { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:180 - // const result = op.setBit(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - setbit - // tests/artifacts/miscellaneous-ops/contract.algo.ts:181 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_setbit_uint64(a: uint64, b: uint64, c: uint64) -> uint64: -verify_setbit_uint64: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:184-185 - // @arc4.abimethod() - // public verify_setbit_uint64(a: uint64, b: uint64, c: uint64): uint64 { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:186 - // const result = op.setBit(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - setbit - // tests/artifacts/miscellaneous-ops/contract.algo.ts:187 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_setbyte(a: bytes, b: uint64, c: uint64) -> bytes: -verify_setbyte: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:190-191 - // @arc4.abimethod() - // public verify_setbyte(a: bytes, b: uint64, c: uint64): bytes { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:192 - // const result = op.setByte(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - setbyte - // tests/artifacts/miscellaneous-ops/contract.algo.ts:193 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_shl(a: uint64, b: uint64) -> uint64: -verify_shl: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:196-197 - // @arc4.abimethod() - // public verify_shl(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:198 - // const result = op.shl(a, b) - frame_dig -2 - frame_dig -1 - shl - // tests/artifacts/miscellaneous-ops/contract.algo.ts:199 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_shr(a: uint64, b: uint64) -> uint64: -verify_shr: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:202-203 - // @arc4.abimethod() - // public verify_shr(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:204 - // const result = op.shr(a, b) - frame_dig -2 - frame_dig -1 - shr - // tests/artifacts/miscellaneous-ops/contract.algo.ts:205 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_sqrt(a: uint64) -> uint64: -verify_sqrt: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:208-209 - // @arc4.abimethod() - // public verify_sqrt(a: uint64): uint64 { - proto 1 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:210 - // const result = op.sqrt(a) - frame_dig -1 - sqrt - // tests/artifacts/miscellaneous-ops/contract.algo.ts:211 - // return result - retsub - - -// tests/artifacts/miscellaneous-ops/contract.algo.ts::MiscellaneousOpsContract.verify_substring(a: bytes, b: uint64, c: uint64) -> bytes: -verify_substring: - // tests/artifacts/miscellaneous-ops/contract.algo.ts:214-215 - // @arc4.abimethod() - // public verify_substring(a: bytes, b: uint64, c: uint64): bytes { - proto 3 1 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:216 - // const result = op.substring(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - substring3 - // tests/artifacts/miscellaneous-ops/contract.algo.ts:217 - // return result - retsub diff --git a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc32.json b/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc32.json deleted file mode 100644 index 83619c0..0000000 --- a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc32.json +++ /dev/null @@ -1,814 +0,0 @@ -{ - "hints": { - "verify_addw(uint64,uint64)(uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_base64_decode_standard(byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_base64_decode_url(byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_bitlen(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_bitlen(uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bsqrt(byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_btoi(byte[])uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bzero(uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_concat(byte[],byte[],uint64,uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_divmodw(uint64,uint64,uint64,uint64)(uint64,uint64,uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_divw(uint64,uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_err()void": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_exp(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_expw(uint64,uint64)(uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_extract(byte[],uint64,uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_extract_from_2(byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_extract_uint16(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_extract_uint32(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_extract_uint64(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_getbit_bytes(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_getbit_uint64(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_getbyte(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_itob(uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_len(byte[],uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_mulw(uint64,uint64)(uint64,uint64)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_replace(byte[],uint64,byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_select_bytes(byte[],byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_select_uint64(uint64,uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_setbit_bytes(byte[],uint64,uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_setbit_uint64(uint64,uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_setbyte(byte[],uint64,uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_shl(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_shr(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_sqrt(uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_substring(byte[],uint64,uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANDAKICAgIHB1c2hieXRlc3MgMHg0NTg0N2VlYSAweGY1N2FjZWI1IDB4N2Q2MzE3MzAgMHhhMWIyNDQ0MSAweGNkN2JlMWFjIDB4N2NmZGE2NGIgMHg1NGE5MTBkOSAweGM0NjU2OGRlIDB4N2E0NmE2YWUgMHgwNDM3MjIwOSAweDdlNWY2ZDcyIDB4MjRlYmNmODQgMHg5YzBiMzM5NyAweDBhZDQwZGE0IDB4OTUxNzg4NzAgMHhkZWVkYzk5YiAweGFiMjE1MGJiIDB4MDJhNTQwMTcgMHgzZGI2NmI0MSAweGM3ZWE4YzJhIDB4MWRjZWE1MGMgMHgxNjE2NmY5YSAweDJmNDcyMDY1IDB4YzU4ZDMwZTAgMHhkNWE3MzljMyAweDYxZjNiM2UxIDB4NTZjZjM2OGIgMHg5MTlmZmJkMiAweDhlMzBmNGU3IDB4ODlmODFkOTIgMHhkNTI2MDMyNyAweDExNGM4YzZkIDB4MzllOWU2MmEgMHhkNmE0YzA1ZSAweDFlZjgxNTFhIC8vIG1ldGhvZCAidmVyaWZ5X2FkZHcodWludDY0LHVpbnQ2NCkodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgInZlcmlmeV9iYXNlNjRfZGVjb2RlX3N0YW5kYXJkKGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybChieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfYml0bGVuKGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2JpdGxlbih1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYnNxcnQoYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J0b2koYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2J6ZXJvKHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9jb25jYXQoYnl0ZVtdLGJ5dGVbXSx1aW50NjQsdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Rpdm1vZHcodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfZGl2dyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9lcnIoKXZvaWQiLCBtZXRob2QgInZlcmlmeV9leHAodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9leHB3KHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfZXh0cmFjdChieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9leHRyYWN0X2Zyb21fMihieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZXh0cmFjdF91aW50MTYoYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9leHRyYWN0X3VpbnQzMihieXRlW10sdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2V4dHJhY3RfdWludDY0KGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZ2V0Yml0X2J5dGVzKGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZ2V0Yml0X3VpbnQ2NCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2dldGJ5dGUoYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9pdG9iKHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19sZW4oYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9tdWx3KHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfcmVwbGFjZShieXRlW10sdWludDY0LGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9zZWxlY3RfYnl0ZXMoYnl0ZVtdLGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2VsZWN0X3VpbnQ2NCh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9zZXRiaXRfYnl0ZXMoYnl0ZVtdLHVpbnQ2NCx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2V0Yml0X3VpbnQ2NCh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9zZXRieXRlKGJ5dGVbXSx1aW50NjQsdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NobCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3Nocih1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3NxcnQodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3N1YnN0cmluZyhieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3ZlcmlmeV9hZGR3X3JvdXRlQDMgbWFpbl92ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZF9yb3V0ZUA0IG1haW5fdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfdXJsX3JvdXRlQDUgbWFpbl92ZXJpZnlfYnl0ZXNfYml0bGVuX3JvdXRlQDYgbWFpbl92ZXJpZnlfdWludDY0X2JpdGxlbl9yb3V0ZUA3IG1haW5fdmVyaWZ5X2JzcXJ0X3JvdXRlQDggbWFpbl92ZXJpZnlfYnRvaV9yb3V0ZUA5IG1haW5fdmVyaWZ5X2J6ZXJvX3JvdXRlQDEwIG1haW5fdmVyaWZ5X2NvbmNhdF9yb3V0ZUAxMSBtYWluX3ZlcmlmeV9kaXZtb2R3X3JvdXRlQDEyIG1haW5fdmVyaWZ5X2Rpdndfcm91dGVAMTMgbWFpbl92ZXJpZnlfZXJyX3JvdXRlQDE0IG1haW5fdmVyaWZ5X2V4cF9yb3V0ZUAxNSBtYWluX3ZlcmlmeV9leHB3X3JvdXRlQDE2IG1haW5fdmVyaWZ5X2V4dHJhY3Rfcm91dGVAMTcgbWFpbl92ZXJpZnlfZXh0cmFjdF9mcm9tXzJfcm91dGVAMTggbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MTZfcm91dGVAMTkgbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MzJfcm91dGVAMjAgbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50NjRfcm91dGVAMjEgbWFpbl92ZXJpZnlfZ2V0Yml0X2J5dGVzX3JvdXRlQDIyIG1haW5fdmVyaWZ5X2dldGJpdF91aW50NjRfcm91dGVAMjMgbWFpbl92ZXJpZnlfZ2V0Ynl0ZV9yb3V0ZUAyNCBtYWluX3ZlcmlmeV9pdG9iX3JvdXRlQDI1IG1haW5fdmVyaWZ5X2J5dGVzX2xlbl9yb3V0ZUAyNiBtYWluX3ZlcmlmeV9tdWx3X3JvdXRlQDI3IG1haW5fdmVyaWZ5X3JlcGxhY2Vfcm91dGVAMjggbWFpbl92ZXJpZnlfc2VsZWN0X2J5dGVzX3JvdXRlQDI5IG1haW5fdmVyaWZ5X3NlbGVjdF91aW50NjRfcm91dGVAMzAgbWFpbl92ZXJpZnlfc2V0Yml0X2J5dGVzX3JvdXRlQDMxIG1haW5fdmVyaWZ5X3NldGJpdF91aW50NjRfcm91dGVAMzIgbWFpbl92ZXJpZnlfc2V0Ynl0ZV9yb3V0ZUAzMyBtYWluX3ZlcmlmeV9zaGxfcm91dGVAMzQgbWFpbl92ZXJpZnlfc2hyX3JvdXRlQDM1IG1haW5fdmVyaWZ5X3NxcnRfcm91dGVAMzYgbWFpbl92ZXJpZnlfc3Vic3RyaW5nX3JvdXRlQDM3CgptYWluX2FmdGVyX2lmX2Vsc2VANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zdWJzdHJpbmdfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdWJzdHJpbmcKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zcXJ0X3JvdXRlQDM2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zcXJ0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zaHJfcm91dGVAMzU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NocgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2hsX3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zaGwKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3NldGJ5dGVfcm91dGVAMzM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zZXRieXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2V0Yml0X3VpbnQ2NF9yb3V0ZUAzMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2V0Yml0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2V0Yml0X2J5dGVzX3JvdXRlQDMxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2V0Yml0X2J5dGVzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2VsZWN0X3VpbnQ2NF9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2VsZWN0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2VsZWN0X2J5dGVzX3JvdXRlQDI5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NlbGVjdF9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3JlcGxhY2Vfcm91dGVAMjg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcmVwbGFjZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X211bHdfcm91dGVAMjc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X211bHcKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZXNfbGVuX3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZXNfbGVuCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9pdG9iX3JvdXRlQDI1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9pdG9iCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0Ynl0ZV9yb3V0ZUAyNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldGJ5dGUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2dldGJpdF91aW50NjRfcm91dGVAMjM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldGJpdF91aW50NjQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2dldGJpdF9ieXRlc19yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldGJpdF9ieXRlcwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50NjRfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHRyYWN0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MzJfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHRyYWN0X3VpbnQzMgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MTZfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHRyYWN0X3VpbnQxNgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF9mcm9tXzJfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZXh0cmFjdF9mcm9tXzIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9leHRyYWN0X3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2V4dHJhY3QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9leHB3X3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZXhwdwogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9leHBfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHAKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Vycl9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZXJyKCkKICAgIGVycgoKbWFpbl92ZXJpZnlfZGl2d19yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2RpdncKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Rpdm1vZHdfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9kaXZtb2R3CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2NvbmNhdF9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnplcm9fcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iemVybwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J0b2lfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9idG9pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ic3FydF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czozNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JzcXJ0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X2JpdGxlbl9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2JpdGxlbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZXNfYml0bGVuX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZXNfYml0bGVuCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybF9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfdXJsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfc3RhbmRhcmQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hZGR3X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWRkdwogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A0MDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANDQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYWRkdyhhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQ6CnZlcmlmeV9hZGR3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NS02CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hZGR3KGE6IHVpbnQ2NCwgYjogdWludDY0KTogcmVhZG9ubHkgW3VpbnQ2NCwgdWludDY0XSB7CiAgICBwcm90byAyIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmFkZHcoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhZGR3CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9iYXNlNjRfZGVjb2RlX3N0YW5kYXJkKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfc3RhbmRhcmQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMS0xMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZChhOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmJhc2U2NERlY29kZShCYXNlNjQuU3RkRW5jb2RpbmcsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJhc2U2NF9kZWNvZGUgU3RkRW5jb2RpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybChhOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmJhc2U2NERlY29kZShCYXNlNjQuVVJMRW5jb2RpbmcsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJhc2U2NF9kZWNvZGUgVVJMRW5jb2RpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19iaXRsZW4oYTogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZXNfYml0bGVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2JpdGxlbihhOiBieXRlcywgcGFkX2Ffc2l6ZTogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfYV9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuYml0TGVuZ3RoKHBhZGRlZEEpCiAgICBiaXRsZW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfYml0bGVuKGE6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2JpdGxlbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwLTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfYml0bGVuKGE6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5iaXRMZW5ndGgoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYml0bGVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYnNxcnQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnNxcnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czozNi0zNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnNxcnQoYTogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5ic3FydChhX2JpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJzcXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcmV0dXJuIEJ5dGVzKHJlc3VsdCkKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2J0b2koYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J0b2k6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0My00NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnRvaShhOiBieXRlcyk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5idG9pKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9iemVybyhhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYnplcm86CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnplcm8oYTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuYnplcm8oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfY29uY2F0KGE6IGJ5dGVzLCBiOiBieXRlcywgcGFkX2Ffc2l6ZTogdWludDY0LCBwYWRfYl9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfY29uY2F0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2NvbmNhdChhOiBieXRlcywgYjogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCwgcGFkX2Jfc2l6ZTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gNCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9hX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0yCiAgICBiemVybwogICAgZnJhbWVfZGlnIC00CiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBwYWRkZWRCID0gb3AuYnplcm8ocGFkX2Jfc2l6ZSkuY29uY2F0KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IHBhZGRlZEEuY29uY2F0KHBhZGRlZEIpCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBjb25zdCByZXN1bHRIYXNoID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHJldHVybiByZXN1bHRIYXNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9kaXZtb2R3KGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQsIGQ6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0Ogp2ZXJpZnlfZGl2bW9kdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0LTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9kaXZtb2R3KGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQsIGQ6IHVpbnQ2NCk6IHJlYWRvbmx5IFt1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjRdIHsKICAgIHByb3RvIDQgNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmRpdm1vZHcoYSwgYiwgYywgZCkKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZGl2bW9kdwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2RpdncoYTogdWludDY0LCBiOiB1aW50NjQsIGM6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZGl2dzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjcwLTcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9kaXZ3KGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo3MgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZGl2dyhhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZGl2dwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2V4cChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZXhwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODEtODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4cChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5leHAoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHB3KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQsIHVpbnQ2NDoKdmVyaWZ5X2V4cHc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4Ny04OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZXhwdyhhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHJlYWRvbmx5IFt1aW50NjQsIHVpbnQ2NF0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZXhwdyhhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4cHcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0KGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9leHRyYWN0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTMtOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3QoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZXh0cmFjdChhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X2Zyb21fMihhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9leHRyYWN0X2Zyb21fMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5LTEwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZXh0cmFjdF9mcm9tXzIoYTogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZXh0cmFjdChhLCAyKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQxNihhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9leHRyYWN0X3VpbnQxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNS0xMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3RfdWludDE2KGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmV4dHJhY3RVaW50MTYoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQzMihhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9leHRyYWN0X3VpbnQzMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMS0xMTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3RfdWludDMyKGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmV4dHJhY3RVaW50MzIoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0X3VpbnQzMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9leHRyYWN0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNy0xMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3RfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmV4dHJhY3RVaW50NjQoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9nZXRiaXRfYnl0ZXMoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZ2V0Yml0X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIzLTEyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZ2V0Yml0X2J5dGVzKGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmdldEJpdChhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9nZXRiaXRfdWludDY0KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9nZXRiaXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZ2V0Yml0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZ2V0Qml0KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2dldGJ5dGUoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZ2V0Ynl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNS0xMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2dldGJ5dGUoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZ2V0Qnl0ZShhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdldGJ5dGUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfaXRvYihhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfaXRvYjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2l0b2IoYTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLml0b2IoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19sZW4oYTogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZXNfbGVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3LTE0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZXNfbGVuKGE6IGJ5dGVzLCBwYWRfYV9zaXplOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfYV9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmxlbihwYWRkZWRBKQogICAgbGVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X211bHcoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NCwgdWludDY0Ogp2ZXJpZnlfbXVsdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NC0xNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X211bHcoYTogdWludDY0LCBiOiB1aW50NjQpOiByZWFkb25seSBbdWludDY0LCB1aW50NjRdIHsKICAgIHByb3RvIDIgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5tdWx3KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgbXVsdwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9yZXBsYWNlKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3JlcGxhY2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjAtMTYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9yZXBsYWNlKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzKTogYnl0ZXMgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLnJlcGxhY2UoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHJlcGxhY2UzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NlbGVjdF9ieXRlcyhhOiBieXRlcywgYjogYnl0ZXMsIGM6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9zZWxlY3RfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjYtMTY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zZWxlY3RfYnl0ZXMoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2VsZWN0KGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzZWxlY3QKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2VsZWN0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9zZWxlY3RfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyLTE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2VsZWN0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zZWxlY3QoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHNlbGVjdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zZXRiaXRfYnl0ZXMoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X3NldGJpdF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OC0xNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NldGJpdF9ieXRlcyhhOiBieXRlcywgYjogdWludDY0LCBjOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2V0Qml0KGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2V0Yml0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9zZXRiaXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg0LTE4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2V0Yml0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zZXRCaXQoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zZXRieXRlKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9zZXRieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkwLTE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2V0Ynl0ZShhOiBieXRlcywgYjogdWludDY0LCBjOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2V0Qnl0ZShhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgc2V0Ynl0ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zaGwoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3NobDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5Ni0xOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NobChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5OAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2hsKGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgc2hsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NocihhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfc2hyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAyLTIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2hyKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA0CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaHIoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzaHIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc3FydChhOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3NxcnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMDgtMjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zcXJ0KGE6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc3FydChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBzcXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3N1YnN0cmluZyhhOiBieXRlcywgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfc3Vic3RyaW5nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE0LTIxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc3Vic3RyaW5nKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zdWJzdHJpbmcoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHN1YnN0cmluZzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNwogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "MiscellaneousOpsContract", - "methods": [ - { - "name": "verify_addw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "(uint64,uint64)" - } - }, - { - "name": "verify_base64_decode_standard", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_base64_decode_url", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_bitlen", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_a_size" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_bitlen", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_bsqrt", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_btoi", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_bzero", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_concat", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "pad_a_size" - }, - { - "type": "uint64", - "name": "pad_b_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_divmodw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - }, - { - "type": "uint64", - "name": "d" - } - ], - "readonly": false, - "returns": { - "type": "(uint64,uint64,uint64,uint64)" - } - }, - { - "name": "verify_divw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_err", - "args": [], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "verify_exp", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_expw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "(uint64,uint64)" - } - }, - { - "name": "verify_extract", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_extract_from_2", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_extract_uint16", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_extract_uint32", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_extract_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_getbit_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_getbit_uint64", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_getbyte", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_itob", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_len", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_a_size" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_mulw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "(uint64,uint64)" - } - }, - { - "name": "verify_replace", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_select_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_select_uint64", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_setbit_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_setbit_uint64", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_setbyte", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_shl", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_shr", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_sqrt", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_substring", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc56.json b/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc56.json deleted file mode 100644 index dc177aa..0000000 --- a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc56.json +++ /dev/null @@ -1,1036 +0,0 @@ -{ - "name": "MiscellaneousOpsContract", - "structs": {}, - "methods": [ - { - "name": "verify_addw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "(uint64,uint64)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_base64_decode_standard", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_base64_decode_url", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_bitlen", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_a_size" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_bitlen", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bsqrt", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_btoi", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bzero", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_concat", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "pad_a_size" - }, - { - "type": "uint64", - "name": "pad_b_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_divmodw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - }, - { - "type": "uint64", - "name": "d" - } - ], - "returns": { - "type": "(uint64,uint64,uint64,uint64)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_divw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_err", - "args": [], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_exp", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_expw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "(uint64,uint64)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_extract", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_extract_from_2", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_extract_uint16", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_extract_uint32", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_extract_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_getbit_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_getbit_uint64", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_getbyte", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_itob", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_len", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_a_size" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_mulw", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "(uint64,uint64)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_replace", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_select_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_select_uint64", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_setbit_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_setbit_uint64", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_setbyte", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_shl", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_shr", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_sqrt", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_substring", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 274, - 312, - 333, - 358, - 383, - 421, - 450, - 488, - 517, - 557, - 597, - 626, - 653, - 681, - 708, - 733, - 760, - 787, - 814, - 841, - 871, - 909, - 938, - 963, - 971, - 1000, - 1054, - 1098, - 1126, - 1149, - 1179, - 1200, - 1227, - 1257, - 1287 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 1321 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 277, - 315, - 336, - 361, - 386, - 424, - 453, - 491, - 520, - 560, - 600, - 629, - 656, - 684, - 711, - 736, - 763, - 790, - 817, - 844, - 874, - 912, - 941, - 966, - 974, - 1003, - 1057, - 1101, - 1129, - 1152, - 1182, - 1203, - 1230, - 1260, - 1290 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANDAKICAgIHB1c2hieXRlc3MgMHg0NTg0N2VlYSAweGY1N2FjZWI1IDB4N2Q2MzE3MzAgMHhhMWIyNDQ0MSAweGNkN2JlMWFjIDB4N2NmZGE2NGIgMHg1NGE5MTBkOSAweGM0NjU2OGRlIDB4N2E0NmE2YWUgMHgwNDM3MjIwOSAweDdlNWY2ZDcyIDB4MjRlYmNmODQgMHg5YzBiMzM5NyAweDBhZDQwZGE0IDB4OTUxNzg4NzAgMHhkZWVkYzk5YiAweGFiMjE1MGJiIDB4MDJhNTQwMTcgMHgzZGI2NmI0MSAweGM3ZWE4YzJhIDB4MWRjZWE1MGMgMHgxNjE2NmY5YSAweDJmNDcyMDY1IDB4YzU4ZDMwZTAgMHhkNWE3MzljMyAweDYxZjNiM2UxIDB4NTZjZjM2OGIgMHg5MTlmZmJkMiAweDhlMzBmNGU3IDB4ODlmODFkOTIgMHhkNTI2MDMyNyAweDExNGM4YzZkIDB4MzllOWU2MmEgMHhkNmE0YzA1ZSAweDFlZjgxNTFhIC8vIG1ldGhvZCAidmVyaWZ5X2FkZHcodWludDY0LHVpbnQ2NCkodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgInZlcmlmeV9iYXNlNjRfZGVjb2RlX3N0YW5kYXJkKGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybChieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfYml0bGVuKGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2JpdGxlbih1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYnNxcnQoYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J0b2koYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2J6ZXJvKHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9jb25jYXQoYnl0ZVtdLGJ5dGVbXSx1aW50NjQsdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Rpdm1vZHcodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfZGl2dyh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9lcnIoKXZvaWQiLCBtZXRob2QgInZlcmlmeV9leHAodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9leHB3KHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfZXh0cmFjdChieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9leHRyYWN0X2Zyb21fMihieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZXh0cmFjdF91aW50MTYoYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9leHRyYWN0X3VpbnQzMihieXRlW10sdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2V4dHJhY3RfdWludDY0KGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZ2V0Yml0X2J5dGVzKGJ5dGVbXSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZ2V0Yml0X3VpbnQ2NCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2dldGJ5dGUoYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9pdG9iKHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19sZW4oYnl0ZVtdLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9tdWx3KHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ2ZXJpZnlfcmVwbGFjZShieXRlW10sdWludDY0LGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9zZWxlY3RfYnl0ZXMoYnl0ZVtdLGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2VsZWN0X3VpbnQ2NCh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9zZXRiaXRfYnl0ZXMoYnl0ZVtdLHVpbnQ2NCx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfc2V0Yml0X3VpbnQ2NCh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9zZXRieXRlKGJ5dGVbXSx1aW50NjQsdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3NobCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3Nocih1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3NxcnQodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3N1YnN0cmluZyhieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3ZlcmlmeV9hZGR3X3JvdXRlQDMgbWFpbl92ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZF9yb3V0ZUA0IG1haW5fdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfdXJsX3JvdXRlQDUgbWFpbl92ZXJpZnlfYnl0ZXNfYml0bGVuX3JvdXRlQDYgbWFpbl92ZXJpZnlfdWludDY0X2JpdGxlbl9yb3V0ZUA3IG1haW5fdmVyaWZ5X2JzcXJ0X3JvdXRlQDggbWFpbl92ZXJpZnlfYnRvaV9yb3V0ZUA5IG1haW5fdmVyaWZ5X2J6ZXJvX3JvdXRlQDEwIG1haW5fdmVyaWZ5X2NvbmNhdF9yb3V0ZUAxMSBtYWluX3ZlcmlmeV9kaXZtb2R3X3JvdXRlQDEyIG1haW5fdmVyaWZ5X2Rpdndfcm91dGVAMTMgbWFpbl92ZXJpZnlfZXJyX3JvdXRlQDE0IG1haW5fdmVyaWZ5X2V4cF9yb3V0ZUAxNSBtYWluX3ZlcmlmeV9leHB3X3JvdXRlQDE2IG1haW5fdmVyaWZ5X2V4dHJhY3Rfcm91dGVAMTcgbWFpbl92ZXJpZnlfZXh0cmFjdF9mcm9tXzJfcm91dGVAMTggbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MTZfcm91dGVAMTkgbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MzJfcm91dGVAMjAgbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50NjRfcm91dGVAMjEgbWFpbl92ZXJpZnlfZ2V0Yml0X2J5dGVzX3JvdXRlQDIyIG1haW5fdmVyaWZ5X2dldGJpdF91aW50NjRfcm91dGVAMjMgbWFpbl92ZXJpZnlfZ2V0Ynl0ZV9yb3V0ZUAyNCBtYWluX3ZlcmlmeV9pdG9iX3JvdXRlQDI1IG1haW5fdmVyaWZ5X2J5dGVzX2xlbl9yb3V0ZUAyNiBtYWluX3ZlcmlmeV9tdWx3X3JvdXRlQDI3IG1haW5fdmVyaWZ5X3JlcGxhY2Vfcm91dGVAMjggbWFpbl92ZXJpZnlfc2VsZWN0X2J5dGVzX3JvdXRlQDI5IG1haW5fdmVyaWZ5X3NlbGVjdF91aW50NjRfcm91dGVAMzAgbWFpbl92ZXJpZnlfc2V0Yml0X2J5dGVzX3JvdXRlQDMxIG1haW5fdmVyaWZ5X3NldGJpdF91aW50NjRfcm91dGVAMzIgbWFpbl92ZXJpZnlfc2V0Ynl0ZV9yb3V0ZUAzMyBtYWluX3ZlcmlmeV9zaGxfcm91dGVAMzQgbWFpbl92ZXJpZnlfc2hyX3JvdXRlQDM1IG1haW5fdmVyaWZ5X3NxcnRfcm91dGVAMzYgbWFpbl92ZXJpZnlfc3Vic3RyaW5nX3JvdXRlQDM3CgptYWluX2FmdGVyX2lmX2Vsc2VANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zdWJzdHJpbmdfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdWJzdHJpbmcKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zcXJ0X3JvdXRlQDM2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zcXJ0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zaHJfcm91dGVAMzU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NocgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2hsX3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zaGwKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3NldGJ5dGVfcm91dGVAMzM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zZXRieXRlCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2V0Yml0X3VpbnQ2NF9yb3V0ZUAzMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2V0Yml0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2V0Yml0X2J5dGVzX3JvdXRlQDMxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2V0Yml0X2J5dGVzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2VsZWN0X3VpbnQ2NF9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfc2VsZWN0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc2VsZWN0X2J5dGVzX3JvdXRlQDI5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3NlbGVjdF9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3JlcGxhY2Vfcm91dGVAMjg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcmVwbGFjZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X211bHdfcm91dGVAMjc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X211bHcKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZXNfbGVuX3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZXNfbGVuCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9pdG9iX3JvdXRlQDI1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9pdG9iCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0Ynl0ZV9yb3V0ZUAyNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldGJ5dGUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2dldGJpdF91aW50NjRfcm91dGVAMjM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldGJpdF91aW50NjQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2dldGJpdF9ieXRlc19yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldGJpdF9ieXRlcwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50NjRfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHRyYWN0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MzJfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHRyYWN0X3VpbnQzMgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF91aW50MTZfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHRyYWN0X3VpbnQxNgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXh0cmFjdF9mcm9tXzJfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZXh0cmFjdF9mcm9tXzIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9leHRyYWN0X3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2V4dHJhY3QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9leHB3X3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZXhwdwogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9leHBfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leHAKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Vycl9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gZXJyKCkKICAgIGVycgoKbWFpbl92ZXJpZnlfZGl2d19yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2RpdncKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Rpdm1vZHdfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9kaXZtb2R3CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2NvbmNhdF9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnplcm9fcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iemVybwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J0b2lfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9idG9pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ic3FydF9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czozNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JzcXJ0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X2JpdGxlbl9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2JpdGxlbgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZXNfYml0bGVuX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIE1pc2NlbGxhbmVvdXNPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZXNfYml0bGVuCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybF9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfdXJsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfc3RhbmRhcmQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hZGR3X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgTWlzY2VsbGFuZW91c09wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWRkdwogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A0MDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANDQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYWRkdyhhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQ6CnZlcmlmeV9hZGR3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NS02CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hZGR3KGE6IHVpbnQ2NCwgYjogdWludDY0KTogcmVhZG9ubHkgW3VpbnQ2NCwgdWludDY0XSB7CiAgICBwcm90byAyIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmFkZHcoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhZGR3CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9iYXNlNjRfZGVjb2RlX3N0YW5kYXJkKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2Jhc2U2NF9kZWNvZGVfc3RhbmRhcmQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMS0xMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmFzZTY0X2RlY29kZV9zdGFuZGFyZChhOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmJhc2U2NERlY29kZShCYXNlNjQuU3RkRW5jb2RpbmcsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJhc2U2NF9kZWNvZGUgU3RkRW5jb2RpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iYXNlNjRfZGVjb2RlX3VybChhOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmJhc2U2NERlY29kZShCYXNlNjQuVVJMRW5jb2RpbmcsIGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJhc2U2NF9kZWNvZGUgVVJMRW5jb2RpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19iaXRsZW4oYTogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZXNfYml0bGVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2JpdGxlbihhOiBieXRlcywgcGFkX2Ffc2l6ZTogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfYV9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuYml0TGVuZ3RoKHBhZGRlZEEpCiAgICBiaXRsZW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfYml0bGVuKGE6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2JpdGxlbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwLTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfYml0bGVuKGE6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5iaXRMZW5ndGgoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYml0bGVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfYnNxcnQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnNxcnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czozNi0zNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnNxcnQoYTogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5ic3FydChhX2JpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJzcXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcmV0dXJuIEJ5dGVzKHJlc3VsdCkKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2J0b2koYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J0b2k6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0My00NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnRvaShhOiBieXRlcyk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5idG9pKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9iemVybyhhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYnplcm86CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnplcm8oYTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuYnplcm8oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfY29uY2F0KGE6IGJ5dGVzLCBiOiBieXRlcywgcGFkX2Ffc2l6ZTogdWludDY0LCBwYWRfYl9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfY29uY2F0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2NvbmNhdChhOiBieXRlcywgYjogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCwgcGFkX2Jfc2l6ZTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gNCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9hX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0yCiAgICBiemVybwogICAgZnJhbWVfZGlnIC00CiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBwYWRkZWRCID0gb3AuYnplcm8ocGFkX2Jfc2l6ZSkuY29uY2F0KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IHBhZGRlZEEuY29uY2F0KHBhZGRlZEIpCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBjb25zdCByZXN1bHRIYXNoID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHJldHVybiByZXN1bHRIYXNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9kaXZtb2R3KGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQsIGQ6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQsIHVpbnQ2NCwgdWludDY0Ogp2ZXJpZnlfZGl2bW9kdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0LTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9kaXZtb2R3KGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQsIGQ6IHVpbnQ2NCk6IHJlYWRvbmx5IFt1aW50NjQsIHVpbnQ2NCwgdWludDY0LCB1aW50NjRdIHsKICAgIHByb3RvIDQgNAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmRpdm1vZHcoYSwgYiwgYywgZCkKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZGl2bW9kdwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2RpdncoYTogdWludDY0LCBiOiB1aW50NjQsIGM6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZGl2dzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjcwLTcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9kaXZ3KGE6IHVpbnQ2NCwgYjogdWludDY0LCBjOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo3MgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZGl2dyhhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZGl2dwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2V4cChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZXhwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODEtODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4cChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5leHAoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHB3KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQsIHVpbnQ2NDoKdmVyaWZ5X2V4cHc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4Ny04OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZXhwdyhhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHJlYWRvbmx5IFt1aW50NjQsIHVpbnQ2NF0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo4OQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZXhwdyhhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4cHcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0KGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9leHRyYWN0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTMtOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3QoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZXh0cmFjdChhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X2Zyb21fMihhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9leHRyYWN0X2Zyb21fMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5LTEwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZXh0cmFjdF9mcm9tXzIoYTogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZXh0cmFjdChhLCAyKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQxNihhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9leHRyYWN0X3VpbnQxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNS0xMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3RfdWludDE2KGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmV4dHJhY3RVaW50MTYoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQzMihhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9leHRyYWN0X3VpbnQzMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMS0xMTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3RfdWludDMyKGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmV4dHJhY3RVaW50MzIoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0X3VpbnQzMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9leHRyYWN0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9leHRyYWN0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNy0xMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2V4dHJhY3RfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmV4dHJhY3RVaW50NjQoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9nZXRiaXRfYnl0ZXMoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZ2V0Yml0X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIzLTEyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZ2V0Yml0X2J5dGVzKGE6IGJ5dGVzLCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmdldEJpdChhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9nZXRiaXRfdWludDY0KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9nZXRiaXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI5LTEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfZ2V0Yml0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZ2V0Qml0KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgZ2V0Yml0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X2dldGJ5dGUoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfZ2V0Ynl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNS0xMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2dldGJ5dGUoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gY29uc3QgcmVzdWx0ID0gb3AuZ2V0Qnl0ZShhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGdldGJ5dGUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfaXRvYihhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfaXRvYjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2l0b2IoYTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLml0b2IoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19sZW4oYTogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZXNfbGVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3LTE0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZXNfbGVuKGE6IGJ5dGVzLCBwYWRfYV9zaXplOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGNvbnN0IHBhZGRlZEEgPSBvcC5iemVybyhwYWRfYV9zaXplKS5jb25jYXQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLmxlbihwYWRkZWRBKQogICAgbGVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X211bHcoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NCwgdWludDY0Ogp2ZXJpZnlfbXVsdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NC0xNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X211bHcoYTogdWludDY0LCBiOiB1aW50NjQpOiByZWFkb25seSBbdWludDY0LCB1aW50NjRdIHsKICAgIHByb3RvIDIgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5tdWx3KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgbXVsdwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9yZXBsYWNlKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3JlcGxhY2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjAtMTYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9yZXBsYWNlKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzKTogYnl0ZXMgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IHJlc3VsdCA9IG9wLnJlcGxhY2UoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHJlcGxhY2UzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NlbGVjdF9ieXRlcyhhOiBieXRlcywgYjogYnl0ZXMsIGM6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9zZWxlY3RfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxNjYtMTY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zZWxlY3RfYnl0ZXMoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2VsZWN0KGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzZWxlY3QKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2VsZWN0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9zZWxlY3RfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyLTE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2VsZWN0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zZWxlY3QoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHNlbGVjdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zZXRiaXRfYnl0ZXMoYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X3NldGJpdF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OC0xNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NldGJpdF9ieXRlcyhhOiBieXRlcywgYjogdWludDY0LCBjOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2V0Qml0KGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzZXRiaXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc2V0Yml0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9zZXRiaXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg0LTE4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2V0Yml0X3VpbnQ2NChhOiB1aW50NjQsIGI6IHVpbnQ2NCwgYzogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zZXRCaXQoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHNldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zZXRieXRlKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9zZXRieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkwLTE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2V0Ynl0ZShhOiBieXRlcywgYjogdWludDY0LCBjOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2V0Qnl0ZShhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgc2V0Ynl0ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czo6TWlzY2VsbGFuZW91c09wc0NvbnRyYWN0LnZlcmlmeV9zaGwoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3NobDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5Ni0xOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3NobChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5OAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc2hsKGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgc2hsCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3NocihhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfc2hyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAyLTIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc2hyKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA0CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zaHIoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzaHIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6Ok1pc2NlbGxhbmVvdXNPcHNDb250cmFjdC52ZXJpZnlfc3FydChhOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3NxcnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMDgtMjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zcXJ0KGE6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMAogICAgLy8gY29uc3QgcmVzdWx0ID0gb3Auc3FydChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBzcXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbWlzY2VsbGFuZW91cy1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjpNaXNjZWxsYW5lb3VzT3BzQ29udHJhY3QudmVyaWZ5X3N1YnN0cmluZyhhOiBieXRlcywgYjogdWludDY0LCBjOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfc3Vic3RyaW5nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE0LTIxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc3Vic3RyaW5nKGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDMgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL21pc2NlbGxhbmVvdXMtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE2CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5zdWJzdHJpbmcoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHN1YnN0cmluZzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9taXNjZWxsYW5lb3VzLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNwogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiABASYBBBUffHUxG0EFEYIjBEWEfuoE9XrOtQR9YxcwBKGyREEEzXvhrAR8/aZLBFSpENkExGVo3gR6RqauBAQ3IgkEfl9tcgQk68+EBJwLM5cECtQNpASVF4hwBN7tyZsEqyFQuwQCpUAXBD22a0EEx+qMKgQdzqUMBBYWb5oEL0cgZQTFjTDgBNWnOcMEYfOz4QRWzzaLBJGf+9IEjjD05wSJ+B2SBNUmAycEEUyMbQQ56eYqBNakwF4EHvgVGjYaAI4jA/gD2gO8A6EDjANuA1cDOwMPAtkCvAK0ApsCfgJYAjoCHwIEAekBzgG1AZoBfgFjAUYBHgD2ANkAswCWAHAAVwA+ACkAA4EAQzEZFEQxGEQ2GgFXAgA2GgIXNhoDF4gFQkkVFlcGAkxQKExQsCJDMRkURDEYRDYaAReIBR8WKExQsCJDMRkURDEYRDYaARc2GgIXiAT9FihMULAiQzEZFEQxGEQ2GgEXNhoCF4gE2xYoTFCwIkMxGRREMRhENhoBVwIANhoCFzYaAxeIBLFJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXNhoCFzYaAxeIBIIWKExQsCJDMRkURDEYRDYaAVcCADYaAhc2GgMXiARYSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBFzYaAhc2GgMXiAQpFihMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgA2GgMXiAP9SRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCFzYaA1cCAIgDykkVFlcGAkxQKExQsCJDMRkURDEYRDYaARc2GgIXiAOhTBZMFlAoTFCwIkMxGRREMRhENhoBVwIANhoCF4gDdxYoTFCwIkMxGRREMRhENhoBF4gDW0kVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAheIAzAWKExQsCJDMRkURDEYRDYaARc2GgIXiAMOFihMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiALqFihMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiALGFihMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiAKiFihMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiAJ+FihMULAiQzEZFEQxGEQ2GgFXAgCIAl5JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgIXNhoDF4gCLUkVFlcGAkxQKExQsCJDMRkURDEYRDYaARc2GgIXiAIETBZMFlAoTFCwIkMxGRREMRhENhoBFzYaAheIAd4WKExQsCJDMRkURDEYRAAxGRREMRhENhoBFzYaAhc2GgMXiAGuFihMULAiQzEZFEQxGEQ2GgEXNhoCFzYaAxc2GgQXiAGATwMWTwMWTwMWTwMWTwNPA1BPAlBMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgA2GgMXNhoEF4gBNEkVFlcGAkxQKExQsCJDMRkURDEYRDYaAReIARBJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgCIAOsWKExQsCJDMRkURDEYRDYaAVcCAIgAzUkVFlcGAkxQKExQsCJDMRkURDEYRDYaAReIAKoWKExQsCJDMRkURDEYRDYaAVcCADYaAheIAIQWKExQsCJDMRkURDEYRDYaAVcCAIgAZUkVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCAIgAP0kVFlcGAkxQKExQsCJDMRkURDEYRDYaARc2GgIXiAAWTBZMFlAoTFCwIkMxGUD75jEYFEQiQ4oCAov+i/8eiYoBAYv/XgGJigEBi/9eAImKAgGL/6+L/lCTiYoBAYv/k4mKAQGL/5aJigEBi/8XiYoBAYv/rwGJigQBi/6vi/xQi/+vi/1QUAGJigQEi/yL/Yv+i/8fiYoDAYv9i/6L/5eJigIBi/6L/5SJigICi/6L/5WJigMBi/2L/ov/WImKAQGL/1cCAImKAgGL/ov/WYmKAgGL/ov/WomKAgGL/ov/W4mKAgGL/ov/U4mKAgGL/ov/U4mKAgGL/ov/VYmKAQGL/xaJigIBi/+vi/5QFYmKAgKL/ov/HYmKAwGL/Yv+i/9diYoDAYv9i/6L/02JigMBi/2L/ov/TYmKAwGL/Yv+i/9UiYoDAYv9i/6L/1SJigMBi/2L/ov/VomKAgGL/ov/kImKAgGL/ov/kYmKAQGL/5KJigMBi/2L/ov/Uok=", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.clear.teal b/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/BaseOne.approval.teal b/tests/artifacts/multi-inheritance/data/BaseOne.approval.teal deleted file mode 100644 index 93e1908..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseOne.approval.teal +++ /dev/null @@ -1,84 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 - bytecblock 0x151f7c750006636f6d6d6f6e - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/multi-inheritance/contract.algo.ts:6 - // stateCommon = GlobalState({ initialValue: 123 }) - pushbytes "stateCommon" - pushint 123 // 123 - app_global_put - // tests/artifacts/multi-inheritance/contract.algo.ts:18 - // stateOne = GlobalState({ initialValue: Uint64(45) }) - pushbytes "stateOne" - pushint 45 // 45 - app_global_put - -main_after_if_else@2: - // tests/artifacts/multi-inheritance/contract.algo.ts:17 - // export class BaseOne extends CommonBase { - txn NumAppArgs - bz main_bare_routing@10 - pushbytess 0xc32533e3 0x455c8d09 0xf9f5142c // method "methodOne()string", method "methodCommon()string", method "b2CantOverride()string" - txna ApplicationArgs 0 - match main_methodOne_route@5 main_methodCommon_route@6 main_b2CantOverride_route@7 - -main_after_if_else@14: - // tests/artifacts/multi-inheritance/contract.algo.ts:17 - // export class BaseOne extends CommonBase { - pushint 0 // 0 - return - -main_b2CantOverride_route@7: - // tests/artifacts/multi-inheritance/contract.algo.ts:12 - // b2CantOverride(): string { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750006636f6d6d6f6e - log - intc_0 // 1 - return - -main_methodCommon_route@6: - // tests/artifacts/multi-inheritance/contract.algo.ts:8 - // methodCommon() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750006636f6d6d6f6e - log - intc_0 // 1 - return - -main_methodOne_route@5: - // tests/artifacts/multi-inheritance/contract.algo.ts:19 - // methodOne() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - pushbytes 0x151f7c750008626173652d6f6e65 - log - intc_0 // 1 - return - -main_bare_routing@10: - // tests/artifacts/multi-inheritance/contract.algo.ts:17 - // export class BaseOne extends CommonBase { - txn OnCompletion - bnz main_after_if_else@14 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/BaseOne.arc32.json b/tests/artifacts/multi-inheritance/data/BaseOne.arc32.json deleted file mode 100644 index 001916c..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseOne.arc32.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "hints": { - "methodOne()string": { - "call_config": { - "no_op": "CALL" - } - }, - "methodCommon()string": { - "call_config": { - "no_op": "CALL" - } - }, - "b2CantOverride()string": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBwdXNoYnl0ZXNzIDB4YzMyNTMzZTMgMHg0NTVjOGQwOSAweGY5ZjUxNDJjIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIiwgbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9tZXRob2RPbmVfcm91dGVANSBtYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2IG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kT25lX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNmY2ZTY1CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 2 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "stateCommon": { - "type": "uint64", - "key": "stateCommon" - }, - "stateOne": { - "type": "uint64", - "key": "stateOne" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "BaseOne", - "methods": [ - { - "name": "methodOne", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "methodCommon", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "b2CantOverride", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/BaseOne.arc56.json b/tests/artifacts/multi-inheritance/data/BaseOne.arc56.json deleted file mode 100644 index 0f5b1f4..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseOne.arc56.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "name": "BaseOne", - "structs": {}, - "methods": [ - { - "name": "methodOne", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "methodCommon", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "b2CantOverride", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 2, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "stateOne": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c3RhdGVPbmU=" - }, - "stateCommon": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c3RhdGVDb21tb24=" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 92, - 103, - 114 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 145 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 95, - 106, - 117 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gc3RhdGVDb21tb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAxMjMgfSkKICAgIHB1c2hieXRlcyAic3RhdGVDb21tb24iCiAgICBwdXNoaW50IDEyMyAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZU9uZSBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBwdXNoYnl0ZXNzIDB4YzMyNTMzZTMgMHg0NTVjOGQwOSAweGY5ZjUxNDJjIC8vIG1ldGhvZCAibWV0aG9kT25lKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIiwgbWV0aG9kICJiMkNhbnRPdmVycmlkZSgpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9tZXRob2RPbmVfcm91dGVANSBtYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2IG1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kT25lX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gbWV0aG9kT25lKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNmY2ZTY1CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlT25lIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiABASYBDBUffHUABmNvbW1vbjEYQAAdgAtzdGF0ZUNvbW1vboF7Z4AIc3RhdGVPbmWBLWcxG0EAT4IDBMMlM+MERVyNCQT59RQsNhoAjgMAGQAOAAOBAEMxGRREMRhEKLAiQzEZFEQxGEQosCJDMRkURDEYRIAOFR98dQAIYmFzZS1vbmWwIkMxGUD/yDEYFEQiQw==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/BaseOne.clear.teal b/tests/artifacts/multi-inheritance/data/BaseOne.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseOne.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/BaseTwo.approval.teal b/tests/artifacts/multi-inheritance/data/BaseTwo.approval.teal deleted file mode 100644 index 8d9796b..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseTwo.approval.teal +++ /dev/null @@ -1,83 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 - bytecblock 0x151f7c750008626173652d74776f - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/multi-inheritance/contract.algo.ts:6 - // stateCommon = GlobalState({ initialValue: 123 }) - pushbytes "stateCommon" - pushint 123 // 123 - app_global_put - // tests/artifacts/multi-inheritance/contract.algo.ts:25 - // stateTwo = GlobalState({ initialValue: 'Hello' }) - pushbytess "stateTwo" "Hello" // "stateTwo", "Hello" - app_global_put - -main_after_if_else@2: - // tests/artifacts/multi-inheritance/contract.algo.ts:24 - // export class BaseTwo extends CommonBase { - txn NumAppArgs - bz main_bare_routing@10 - pushbytess 0x363b329e 0xf9f5142c 0x455c8d09 // method "methodTwo()string", method "b2CantOverride()string", method "methodCommon()string" - txna ApplicationArgs 0 - match main_methodTwo_route@5 main_b2CantOverride_route@6 main_methodCommon_route@7 - -main_after_if_else@14: - // tests/artifacts/multi-inheritance/contract.algo.ts:24 - // export class BaseTwo extends CommonBase { - pushint 0 // 0 - return - -main_methodCommon_route@7: - // tests/artifacts/multi-inheritance/contract.algo.ts:8 - // methodCommon() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - pushbytes 0x151f7c750006636f6d6d6f6e - log - intc_0 // 1 - return - -main_b2CantOverride_route@6: - // tests/artifacts/multi-inheritance/contract.algo.ts:35 - // b2CantOverride(): string { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750008626173652d74776f - log - intc_0 // 1 - return - -main_methodTwo_route@5: - // tests/artifacts/multi-inheritance/contract.algo.ts:26 - // methodTwo() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750008626173652d74776f - log - intc_0 // 1 - return - -main_bare_routing@10: - // tests/artifacts/multi-inheritance/contract.algo.ts:24 - // export class BaseTwo extends CommonBase { - txn OnCompletion - bnz main_after_if_else@14 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/BaseTwo.arc32.json b/tests/artifacts/multi-inheritance/data/BaseTwo.arc32.json deleted file mode 100644 index 36e5893..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseTwo.arc32.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "hints": { - "methodTwo()string": { - "call_config": { - "no_op": "CALL" - } - }, - "b2CantOverride()string": { - "call_config": { - "no_op": "CALL" - } - }, - "methodCommon()string": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1MDAwODYyNjE3MzY1MmQ3NDc3NmYKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlc3MgInN0YXRlVHdvIiAiSGVsbG8iIC8vICJzdGF0ZVR3byIsICJIZWxsbyIKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBwdXNoYnl0ZXNzIDB4MzYzYjMyOWUgMHhmOWY1MTQyYyAweDQ1NWM4ZDA5IC8vIG1ldGhvZCAibWV0aG9kVHdvKClzdHJpbmciLCBtZXRob2QgImIyQ2FudE92ZXJyaWRlKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9tZXRob2RUd29fcm91dGVANSBtYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDYgbWFpbl9tZXRob2RDb21tb25fcm91dGVANwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlVHdvIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDY2MzZmNmQ2ZDZmNmUKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIGIyQ2FudE92ZXJyaWRlKCk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNzQ3NzZmCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kVHdvX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gbWV0aG9kVHdvKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA4NjI2MTczNjUyZDc0Nzc2ZgogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 1, - "num_uints": 1 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "stateCommon": { - "type": "uint64", - "key": "stateCommon" - }, - "stateTwo": { - "type": "bytes", - "key": "stateTwo" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "BaseTwo", - "methods": [ - { - "name": "methodTwo", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "b2CantOverride", - "args": [], - "readonly": false, - "returns": { - "type": "string" - }, - "desc": "Because CommonBase implements this method, and MRO for polytype is depth first; this method\nshould not be accessible from MultiBases as the MRO should be `BaseOne => CommonBase => BaseTwo => CommonBase`\nand since CommonBase provides an implementation, this one should not be used" - }, - { - "name": "methodCommon", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/BaseTwo.arc56.json b/tests/artifacts/multi-inheritance/data/BaseTwo.arc56.json deleted file mode 100644 index a021024..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseTwo.arc56.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "name": "BaseTwo", - "structs": {}, - "methods": [ - { - "name": "methodTwo", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "b2CantOverride", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "desc": "Because CommonBase implements this method, and MRO for polytype is depth first; this method\nshould not be accessible from MultiBases as the MRO should be `BaseOne => CommonBase => BaseTwo => CommonBase`\nand since CommonBase provides an implementation, this one should not be used", - "events": [], - "recommendations": {} - }, - { - "name": "methodCommon", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 1, - "bytes": 1 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "stateTwo": { - "keyType": "AVMString", - "valueType": "AVMString", - "key": "c3RhdGVUd28=" - }, - "stateCommon": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c3RhdGVDb21tb24=" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 99, - 123, - 134 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 150 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 102, - 126, - 137 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1MDAwODYyNjE3MzY1MmQ3NDc3NmYKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBwdXNoYnl0ZXMgInN0YXRlQ29tbW9uIgogICAgcHVzaGludCAxMjMgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlc3MgInN0YXRlVHdvIiAiSGVsbG8iIC8vICJzdGF0ZVR3byIsICJIZWxsbyIKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBwdXNoYnl0ZXNzIDB4MzYzYjMyOWUgMHhmOWY1MTQyYyAweDQ1NWM4ZDA5IC8vIG1ldGhvZCAibWV0aG9kVHdvKClzdHJpbmciLCBtZXRob2QgImIyQ2FudE92ZXJyaWRlKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZENvbW1vbigpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9tZXRob2RUd29fcm91dGVANSBtYWluX2IyQ2FudE92ZXJyaWRlX3JvdXRlQDYgbWFpbl9tZXRob2RDb21tb25fcm91dGVANwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIGV4cG9ydCBjbGFzcyBCYXNlVHdvIGV4dGVuZHMgQ29tbW9uQmFzZSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gbWV0aG9kQ29tbW9uKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDY2MzZmNmQ2ZDZmNmUKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIGIyQ2FudE92ZXJyaWRlKCk6IHN0cmluZyB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNzQ3NzZmCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kVHdvX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gbWV0aG9kVHdvKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA4NjI2MTczNjUyZDc0Nzc2ZgogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBleHBvcnQgY2xhc3MgQmFzZVR3byBleHRlbmRzIENvbW1vbkJhc2UgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiABASYBDhUffHUACGJhc2UtdHdvMRhAACKAC3N0YXRlQ29tbW9ugXtnggIIc3RhdGVUd28FSGVsbG9nMRtBAE2CAwQ2OzKeBPn1FCwERVyNCTYaAI4DACYAGwADgQBDMRkURDEYRIAMFR98dQAGY29tbW9usCJDMRkURDEYRCiwIkMxGRREMRhEKLAiQzEZQP/KMRgURCJD", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/BaseTwo.clear.teal b/tests/artifacts/multi-inheritance/data/BaseTwo.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/multi-inheritance/data/BaseTwo.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/CommonBase.approval.teal b/tests/artifacts/multi-inheritance/data/CommonBase.approval.teal deleted file mode 100644 index b9df43c..0000000 --- a/tests/artifacts/multi-inheritance/data/CommonBase.approval.teal +++ /dev/null @@ -1,65 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - bytecblock 0x151f7c750006636f6d6d6f6e - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/multi-inheritance/contract.algo.ts:6 - // stateCommon = GlobalState({ initialValue: 123 }) - pushbytes "stateCommon" - pushint 123 // 123 - app_global_put - -main_after_if_else@2: - // tests/artifacts/multi-inheritance/contract.algo.ts:5 - // export class CommonBase extends Contract { - txn NumAppArgs - bz main_bare_routing@9 - pushbytess 0x455c8d09 0xf9f5142c // method "methodCommon()string", method "b2CantOverride()string" - txna ApplicationArgs 0 - match main_methodCommon_route@5 main_b2CantOverride_route@6 - -main_after_if_else@13: - // tests/artifacts/multi-inheritance/contract.algo.ts:5 - // export class CommonBase extends Contract { - pushint 0 // 0 - return - -main_b2CantOverride_route@6: - // tests/artifacts/multi-inheritance/contract.algo.ts:12 - // b2CantOverride(): string { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750006636f6d6d6f6e - log - pushint 1 // 1 - return - -main_methodCommon_route@5: - // tests/artifacts/multi-inheritance/contract.algo.ts:8 - // methodCommon() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750006636f6d6d6f6e - log - pushint 1 // 1 - return - -main_bare_routing@9: - // tests/artifacts/multi-inheritance/contract.algo.ts:5 - // export class CommonBase extends Contract { - txn OnCompletion - bnz main_after_if_else@13 - txn ApplicationID - ! - assert // can only call when creating - pushint 1 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/CommonBase.arc32.json b/tests/artifacts/multi-inheritance/data/CommonBase.arc32.json deleted file mode 100644 index 773b9c6..0000000 --- a/tests/artifacts/multi-inheritance/data/CommonBase.arc32.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "hints": { - "methodCommon()string": { - "call_config": { - "no_op": "CALL" - } - }, - "b2CantOverride()string": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZUNvbW1vbiIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gZXhwb3J0IGNsYXNzIENvbW1vbkJhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOQogICAgcHVzaGJ5dGVzcyAweDQ1NWM4ZDA5IDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIsIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDUgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyBiMkNhbnRPdmVycmlkZSgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NTAwMDY2MzZmNmQ2ZDZmNmUKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 1 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "stateCommon": { - "type": "uint64", - "key": "stateCommon" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "CommonBase", - "methods": [ - { - "name": "methodCommon", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "b2CantOverride", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/CommonBase.arc56.json b/tests/artifacts/multi-inheritance/data/CommonBase.arc56.json deleted file mode 100644 index 4732b41..0000000 --- a/tests/artifacts/multi-inheritance/data/CommonBase.arc56.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "name": "CommonBase", - "structs": {}, - "methods": [ - { - "name": "methodCommon", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "b2CantOverride", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 1, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "stateCommon": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c3RhdGVDb21tb24=" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 69, - 81 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 98 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 72, - 84 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZUNvbW1vbiIKICAgIHB1c2hpbnQgMTIzIC8vIDEyMwogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gZXhwb3J0IGNsYXNzIENvbW1vbkJhc2UgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOQogICAgcHVzaGJ5dGVzcyAweDQ1NWM4ZDA5IDB4ZjlmNTE0MmMgLy8gbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIsIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDUgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUA2CgptYWluX2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgQ29tbW9uQmFzZSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyBiMkNhbnRPdmVycmlkZSgpOiBzdHJpbmcgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlCiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWV0aG9kQ29tbW9uX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo4CiAgICAvLyBtZXRob2RDb21tb24oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NTAwMDY2MzZmNmQ2ZDZmNmUKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBDb21tb25CYXNlIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiYBDBUffHUABmNvbW1vbjEYQAAQgAtzdGF0ZUNvbW1vboF7ZzEbQQAwggIERVyNCQT59RQsNhoAjgIADwADgQBDMRkURDEYRCiwgQFDMRkURDEYRCiwgQFDMRlA/+AxGBREgQFD", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/CommonBase.clear.teal b/tests/artifacts/multi-inheritance/data/CommonBase.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/multi-inheritance/data/CommonBase.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/MultiBases.approval.teal b/tests/artifacts/multi-inheritance/data/MultiBases.approval.teal deleted file mode 100644 index 2124dd2..0000000 --- a/tests/artifacts/multi-inheritance/data/MultiBases.approval.teal +++ /dev/null @@ -1,162 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 123 - bytecblock 0x151f7c750008626173652d74776f 0x151f7c750006636f6d6d6f6e "stateCommon" - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/multi-inheritance/contract.algo.ts:6 - // stateCommon = GlobalState({ initialValue: 123 }) - bytec_2 // "stateCommon" - intc_1 // 123 - app_global_put - // tests/artifacts/multi-inheritance/contract.algo.ts:18 - // stateOne = GlobalState({ initialValue: Uint64(45) }) - pushbytes "stateOne" - pushint 45 // 45 - app_global_put - // tests/artifacts/multi-inheritance/contract.algo.ts:6 - // stateCommon = GlobalState({ initialValue: 123 }) - bytec_2 // "stateCommon" - intc_1 // 123 - app_global_put - // tests/artifacts/multi-inheritance/contract.algo.ts:25 - // stateTwo = GlobalState({ initialValue: 'Hello' }) - pushbytess "stateTwo" "Hello" // "stateTwo", "Hello" - app_global_put - // tests/artifacts/multi-inheritance/contract.algo.ts:41 - // stateMulti = GlobalState({ initialValue: 'Hmmm' }) - pushbytess "stateMulti" "Hmmm" // "stateMulti", "Hmmm" - app_global_put - -main_after_if_else@2: - // tests/artifacts/multi-inheritance/contract.algo.ts:40 - // export class MultiBases extends classes(BaseOne, BaseTwo) { - txn NumAppArgs - bz main_bare_routing@15 - pushbytess 0x290eba9f 0x839d96ff 0xa978ca56 0x88547eb8 0xc32533e3 0x455c8d09 0xf9f5142c 0x363b329e // method "methodMulti()string", method "methodCallsSuper()string", method "callB2CantOverride()string", method "callB2Common()string", method "methodOne()string", method "methodCommon()string", method "b2CantOverride()string", method "methodTwo()string" - txna ApplicationArgs 0 - match main_methodMulti_route@5 main_methodCallsSuper_route@6 main_callB2CantOverride_route@7 main_callB2Common_route@8 main_methodOne_route@9 main_methodCommon_route@10 main_b2CantOverride_route@11 main_methodTwo_route@12 - -main_after_if_else@19: - // tests/artifacts/multi-inheritance/contract.algo.ts:40 - // export class MultiBases extends classes(BaseOne, BaseTwo) { - pushint 0 // 0 - return - -main_methodTwo_route@12: - // tests/artifacts/multi-inheritance/contract.algo.ts:26 - // methodTwo() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750008626173652d74776f - log - intc_0 // 1 - return - -main_b2CantOverride_route@11: - // tests/artifacts/multi-inheritance/contract.algo.ts:12 - // b2CantOverride(): string { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_1 // 0x151f7c750006636f6d6d6f6e - log - intc_0 // 1 - return - -main_methodCommon_route@10: - // tests/artifacts/multi-inheritance/contract.algo.ts:8 - // methodCommon() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_1 // 0x151f7c750006636f6d6d6f6e - log - intc_0 // 1 - return - -main_methodOne_route@9: - // tests/artifacts/multi-inheritance/contract.algo.ts:19 - // methodOne() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - pushbytes 0x151f7c750008626173652d6f6e65 - log - intc_0 // 1 - return - -main_callB2Common_route@8: - // tests/artifacts/multi-inheritance/contract.algo.ts:55 - // callB2Common() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_1 // 0x151f7c750006636f6d6d6f6e - log - intc_0 // 1 - return - -main_callB2CantOverride_route@7: - // tests/artifacts/multi-inheritance/contract.algo.ts:51 - // callB2CantOverride() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750008626173652d74776f - log - intc_0 // 1 - return - -main_methodCallsSuper_route@6: - // tests/artifacts/multi-inheritance/contract.algo.ts:47 - // methodCallsSuper() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - bytec_0 // 0x151f7c750008626173652d74776f - log - intc_0 // 1 - return - -main_methodMulti_route@5: - // tests/artifacts/multi-inheritance/contract.algo.ts:43 - // methodMulti() { - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - pushbytes 0x151f7c75000b6d756c74692d6261736573 - log - intc_0 // 1 - return - -main_bare_routing@15: - // tests/artifacts/multi-inheritance/contract.algo.ts:40 - // export class MultiBases extends classes(BaseOne, BaseTwo) { - txn OnCompletion - bnz main_after_if_else@19 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return diff --git a/tests/artifacts/multi-inheritance/data/MultiBases.arc32.json b/tests/artifacts/multi-inheritance/data/MultiBases.arc32.json deleted file mode 100644 index 2edde11..0000000 --- a/tests/artifacts/multi-inheritance/data/MultiBases.arc32.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "hints": { - "methodMulti()string": { - "call_config": { - "no_op": "CALL" - } - }, - "methodCallsSuper()string": { - "call_config": { - "no_op": "CALL" - } - }, - "callB2CantOverride()string": { - "call_config": { - "no_op": "CALL" - } - }, - "callB2Common()string": { - "call_config": { - "no_op": "CALL" - } - }, - "methodOne()string": { - "call_config": { - "no_op": "CALL" - } - }, - "methodCommon()string": { - "call_config": { - "no_op": "CALL" - } - }, - "b2CantOverride()string": { - "call_config": { - "no_op": "CALL" - } - }, - "methodTwo()string": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxMjMKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNzQ3NzZmIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlICJzdGF0ZUNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBieXRlY18yIC8vICJzdGF0ZUNvbW1vbiIKICAgIGludGNfMSAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgYnl0ZWNfMiAvLyAic3RhdGVDb21tb24iCiAgICBpbnRjXzEgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlc3MgInN0YXRlVHdvIiAiSGVsbG8iIC8vICJzdGF0ZVR3byIsICJIZWxsbyIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gc3RhdGVNdWx0aSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnSG1tbScgfSkKICAgIHB1c2hieXRlc3MgInN0YXRlTXVsdGkiICJIbW1tIiAvLyAic3RhdGVNdWx0aSIsICJIbW1tIgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKICAgIHB1c2hieXRlc3MgMHgyOTBlYmE5ZiAweDgzOWQ5NmZmIDB4YTk3OGNhNTYgMHg4ODU0N2ViOCAweGMzMjUzM2UzIDB4NDU1YzhkMDkgMHhmOWY1MTQyYyAweDM2M2IzMjllIC8vIG1ldGhvZCAibWV0aG9kTXVsdGkoKXN0cmluZyIsIG1ldGhvZCAibWV0aG9kQ2FsbHNTdXBlcigpc3RyaW5nIiwgbWV0aG9kICJjYWxsQjJDYW50T3ZlcnJpZGUoKXN0cmluZyIsIG1ldGhvZCAiY2FsbEIyQ29tbW9uKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZE9uZSgpc3RyaW5nIiwgbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIsIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIsIG1ldGhvZCAibWV0aG9kVHdvKClzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX21ldGhvZE11bHRpX3JvdXRlQDUgbWFpbl9tZXRob2RDYWxsc1N1cGVyX3JvdXRlQDYgbWFpbl9jYWxsQjJDYW50T3ZlcnJpZGVfcm91dGVANyBtYWluX2NhbGxCMkNvbW1vbl9yb3V0ZUA4IG1haW5fbWV0aG9kT25lX3JvdXRlQDkgbWFpbl9tZXRob2RDb21tb25fcm91dGVAMTAgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUAxMSBtYWluX21ldGhvZFR3b19yb3V0ZUAxMgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX21ldGhvZFR3b19yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBtZXRob2RUd28oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNzQ3NzZmCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIG1ldGhvZENvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZE9uZV9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIG1ldGhvZE9uZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDA4NjI2MTczNjUyZDZmNmU2NQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NhbGxCMkNvbW1vbl9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNhbGxCMkNvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NhbGxCMkNhbnRPdmVycmlkZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGNhbGxCMkNhbnRPdmVycmlkZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwODYyNjE3MzY1MmQ3NDc3NmYKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tZXRob2RDYWxsc1N1cGVyX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gbWV0aG9kQ2FsbHNTdXBlcigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwODYyNjE3MzY1MmQ3NDc3NmYKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tZXRob2RNdWx0aV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIG1ldGhvZE11bHRpKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMGI2ZDc1NmM3NDY5MmQ2MjYxNzM2NTczCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 2, - "num_uints": 2 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "stateCommon": { - "type": "uint64", - "key": "stateCommon" - }, - "stateMulti": { - "type": "bytes", - "key": "stateMulti" - }, - "stateOne": { - "type": "uint64", - "key": "stateOne" - }, - "stateTwo": { - "type": "bytes", - "key": "stateTwo" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "MultiBases", - "methods": [ - { - "name": "methodMulti", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "methodCallsSuper", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "callB2CantOverride", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "callB2Common", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "methodOne", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "methodCommon", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "b2CantOverride", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "methodTwo", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/MultiBases.arc56.json b/tests/artifacts/multi-inheritance/data/MultiBases.arc56.json deleted file mode 100644 index c23ead2..0000000 --- a/tests/artifacts/multi-inheritance/data/MultiBases.arc56.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "name": "MultiBases", - "structs": {}, - "methods": [ - { - "name": "methodMulti", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "methodCallsSuper", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "callB2CantOverride", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "callB2Common", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "methodOne", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "methodCommon", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "b2CantOverride", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "methodTwo", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 2, - "bytes": 2 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "stateMulti": { - "keyType": "AVMString", - "valueType": "AVMString", - "key": "c3RhdGVNdWx0aQ==" - }, - "stateOne": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c3RhdGVPbmU=" - }, - "stateCommon": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "c3RhdGVDb21tb24=" - }, - "stateTwo": { - "keyType": "AVMString", - "valueType": "AVMString", - "key": "c3RhdGVUd28=" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 182, - 193, - 204, - 215, - 241, - 252, - 263, - 274 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 308 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 185, - 196, - 207, - 218, - 244, - 255, - 266, - 277 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAxMjMKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNzQ3NzZmIDB4MTUxZjdjNzUwMDA2NjM2ZjZkNmQ2ZjZlICJzdGF0ZUNvbW1vbiIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIHN0YXRlQ29tbW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMTIzIH0pCiAgICBieXRlY18yIC8vICJzdGF0ZUNvbW1vbiIKICAgIGludGNfMSAvLyAxMjMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gc3RhdGVPbmUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDQ1KSB9KQogICAgcHVzaGJ5dGVzICJzdGF0ZU9uZSIKICAgIHB1c2hpbnQgNDUgLy8gNDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBzdGF0ZUNvbW1vbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEyMyB9KQogICAgYnl0ZWNfMiAvLyAic3RhdGVDb21tb24iCiAgICBpbnRjXzEgLy8gMTIzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIHN0YXRlVHdvID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6ICdIZWxsbycgfSkKICAgIHB1c2hieXRlc3MgInN0YXRlVHdvIiAiSGVsbG8iIC8vICJzdGF0ZVR3byIsICJIZWxsbyIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gc3RhdGVNdWx0aSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiAnSG1tbScgfSkKICAgIHB1c2hieXRlc3MgInN0YXRlTXVsdGkiICJIbW1tIiAvLyAic3RhdGVNdWx0aSIsICJIbW1tIgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKICAgIHB1c2hieXRlc3MgMHgyOTBlYmE5ZiAweDgzOWQ5NmZmIDB4YTk3OGNhNTYgMHg4ODU0N2ViOCAweGMzMjUzM2UzIDB4NDU1YzhkMDkgMHhmOWY1MTQyYyAweDM2M2IzMjllIC8vIG1ldGhvZCAibWV0aG9kTXVsdGkoKXN0cmluZyIsIG1ldGhvZCAibWV0aG9kQ2FsbHNTdXBlcigpc3RyaW5nIiwgbWV0aG9kICJjYWxsQjJDYW50T3ZlcnJpZGUoKXN0cmluZyIsIG1ldGhvZCAiY2FsbEIyQ29tbW9uKClzdHJpbmciLCBtZXRob2QgIm1ldGhvZE9uZSgpc3RyaW5nIiwgbWV0aG9kICJtZXRob2RDb21tb24oKXN0cmluZyIsIG1ldGhvZCAiYjJDYW50T3ZlcnJpZGUoKXN0cmluZyIsIG1ldGhvZCAibWV0aG9kVHdvKClzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX21ldGhvZE11bHRpX3JvdXRlQDUgbWFpbl9tZXRob2RDYWxsc1N1cGVyX3JvdXRlQDYgbWFpbl9jYWxsQjJDYW50T3ZlcnJpZGVfcm91dGVANyBtYWluX2NhbGxCMkNvbW1vbl9yb3V0ZUA4IG1haW5fbWV0aG9kT25lX3JvdXRlQDkgbWFpbl9tZXRob2RDb21tb25fcm91dGVAMTAgbWFpbl9iMkNhbnRPdmVycmlkZV9yb3V0ZUAxMSBtYWluX21ldGhvZFR3b19yb3V0ZUAxMgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX21ldGhvZFR3b19yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBtZXRob2RUd28oKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NTAwMDg2MjYxNzM2NTJkNzQ3NzZmCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYjJDYW50T3ZlcnJpZGVfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gYjJDYW50T3ZlcnJpZGUoKTogc3RyaW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZENvbW1vbl9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9tdWx0aS1pbmhlcml0YW5jZS9jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIG1ldGhvZENvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21ldGhvZE9uZV9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIG1ldGhvZE9uZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDA4NjI2MTczNjUyZDZmNmU2NQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NhbGxCMkNvbW1vbl9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNhbGxCMkNvbW1vbigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAwNjYzNmY2ZDZkNmY2ZQogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NhbGxCMkNhbnRPdmVycmlkZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGNhbGxCMkNhbnRPdmVycmlkZSgpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwODYyNjE3MzY1MmQ3NDc3NmYKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tZXRob2RDYWxsc1N1cGVyX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvbXVsdGktaW5oZXJpdGFuY2UvY29udHJhY3QuYWxnby50czo0NwogICAgLy8gbWV0aG9kQ2FsbHNTdXBlcigpIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1MDAwODYyNjE3MzY1MmQ3NDc3NmYKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tZXRob2RNdWx0aV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIG1ldGhvZE11bHRpKCkgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMGI2ZDc1NmM3NDY5MmQ2MjYxNzM2NTczCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL211bHRpLWluaGVyaXRhbmNlL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGV4cG9ydCBjbGFzcyBNdWx0aUJhc2VzIGV4dGVuZHMgY2xhc3NlcyhCYXNlT25lLCBCYXNlVHdvKSB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAXsmAw4VH3x1AAhiYXNlLXR3bwwVH3x1AAZjb21tb24Lc3RhdGVDb21tb24xGEAAOCojZ4AIc3RhdGVPbmWBLWcqI2eCAghzdGF0ZVR3bwVIZWxsb2eCAgpzdGF0ZU11bHRpBEhtbW1nMRtBALuCCAQpDrqfBIOdlv8EqXjKVgSIVH64BMMlM+MERVyNCQT59RQsBDY7Mp42GgCOCABfAFQASQA+ACQAGQAOAAOBAEMxGRREMRhEKLAiQzEZFEQxGEQpsCJDMRkURDEYRCmwIkMxGRREMRhEgA4VH3x1AAhiYXNlLW9uZbAiQzEZFEQxGEQpsCJDMRkURDEYRCiwIkMxGRREMRhEKLAiQzEZFEQxGESAERUffHUAC211bHRpLWJhc2VzsCJDMRlA/38xGBREIkM=", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/multi-inheritance/data/MultiBases.clear.teal b/tests/artifacts/multi-inheritance/data/MultiBases.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/multi-inheritance/data/MultiBases.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.approval.teal b/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.approval.teal deleted file mode 100644 index 950ce61..0000000 --- a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.approval.teal +++ /dev/null @@ -1,2601 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 0x00 - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@61 - pushbytess 0x725c692b 0x17314559 0x53f34893 0x88c8b269 0xa464b7ab 0x9c8b11b8 0x6f40654e 0xec9a2974 0xc793708f 0x7ddb7499 0xa21c443d 0x6e7fb212 0xb007fcb0 0x2ebc20d4 0xb0954b66 0xdd140aef 0xace474da 0xba694990 0x6db581c0 0x91c8db89 0xdbe77158 0x9a0f22e1 0x64033d37 0x2a7237c5 0xe3a94458 0x42f87f7d 0x2b5542a4 0x9be2fbe9 0x1cd92515 0x64e1705c 0xf1271c50 0x2ab63b70 0x834bb7d2 0x531620d7 0x3fb9e769 0xfa8db0bc 0xa72ea485 0xb7b0ba19 0x74460c42 0xab320738 0x52ad4654 0x10156399 0x0f075957 0xbd843dff 0xb377d381 0x89767265 0x456b4b23 0x33d1b88c 0x6bf973ea 0x67cd6bb2 0x3f58805a 0x1e130039 0x509dc91d 0xa564a202 0x23650763 0xe007c10b // method "verify_uint64_init(byte[])uint64", method "verify_uint64_add(uint64,uint64)uint64", method "verify_uint64_sub(uint64,uint64)uint64", method "verify_uint64_mul(uint64,uint64)uint64", method "verify_uint64_div(uint64,uint64)uint64", method "verify_uint64_mod(uint64,uint64)uint64", method "verify_uint64_and(uint64,uint64)uint64", method "verify_uint64_or(uint64,uint64)uint64", method "verify_uint64_xor(uint64,uint64)uint64", method "verify_uint64_not(uint64)uint64", method "verify_uint64_lshift(uint64,uint64)uint64", method "verify_uint64_rshift(uint64,uint64)uint64", method "verify_uint64_pow(uint64,uint64)uint64", method "verify_uint64_eq(uint64,uint64)bool", method "verify_uint64_ne(uint64,uint64)bool", method "verify_uint64_lt(uint64,uint64)bool", method "verify_uint64_le(uint64,uint64)bool", method "verify_uint64_gt(uint64,uint64)bool", method "verify_uint64_ge(uint64,uint64)bool", method "verify_bytes_init(uint64)byte[]", method "verify_bytes_add(byte[],byte[],uint64,uint64)byte[]", method "verify_bytes_eq(byte[],byte[])bool", method "verify_bytes_ne(byte[],byte[])bool", method "verify_bytes_and(byte[],byte[])byte[]", method "verify_bytes_or(byte[],byte[])byte[]", method "verify_bytes_xor(byte[],byte[])byte[]", method "verify_bytes_not(byte[],uint64)byte[]", method "verify_biguint_add(byte[],byte[])byte[]", method "verify_biguint_add_uint64(byte[],uint64)byte[]", method "verify_biguint_sub(byte[],byte[])byte[]", method "verify_biguint_sub_uint64(byte[],uint64)byte[]", method "verify_biguint_mul(byte[],byte[])byte[]", method "verify_biguint_mul_uint64(byte[],uint64)byte[]", method "verify_biguint_div(byte[],byte[])byte[]", method "verify_biguint_div_uint64(byte[],uint64)byte[]", method "verify_biguint_mod(byte[],byte[])byte[]", method "verify_biguint_mod_uint64(byte[],uint64)byte[]", method "verify_biguint_and(byte[],byte[])byte[]", method "verify_biguint_and_uint64(byte[],uint64)byte[]", method "verify_biguint_or(byte[],byte[])byte[]", method "verify_biguint_or_uint64(byte[],uint64)byte[]", method "verify_biguint_xor(byte[],byte[])byte[]", method "verify_biguint_xor_uint64(byte[],uint64)byte[]", method "verify_biguint_eq(byte[],byte[])bool", method "verify_biguint_eq_uint64(byte[],uint64)bool", method "verify_biguint_ne(byte[],byte[])bool", method "verify_biguint_ne_uint64(byte[],uint64)bool", method "verify_biguint_lt(byte[],byte[])bool", method "verify_biguint_lt_uint64(byte[],uint64)bool", method "verify_biguint_le(byte[],byte[])bool", method "verify_biguint_le_uint64(byte[],uint64)bool", method "verify_biguint_gt(byte[],byte[])bool", method "verify_biguint_gt_uint64(byte[],uint64)bool", method "verify_biguint_ge(byte[],byte[])bool", method "verify_biguint_ge_uint64(byte[],uint64)bool", method "verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[])void" - txna ApplicationArgs 0 - match main_verify_uint64_init_route@3 main_verify_uint64_add_route@4 main_verify_uint64_sub_route@5 main_verify_uint64_mul_route@6 main_verify_uint64_div_route@7 main_verify_uint64_mod_route@8 main_verify_uint64_and_route@9 main_verify_uint64_or_route@10 main_verify_uint64_xor_route@11 main_verify_uint64_not_route@12 main_verify_uint64_lshift_route@13 main_verify_uint64_rshift_route@14 main_verify_uint64_pow_route@15 main_verify_uint64_eq_route@16 main_verify_uint64_ne_route@17 main_verify_uint64_lt_route@18 main_verify_uint64_le_route@19 main_verify_uint64_gt_route@20 main_verify_uint64_ge_route@21 main_verify_bytes_init_route@22 main_verify_bytes_add_route@23 main_verify_bytes_eq_route@24 main_verify_bytes_ne_route@25 main_verify_bytes_and_route@26 main_verify_bytes_or_route@27 main_verify_bytes_xor_route@28 main_verify_bytes_not_route@29 main_verify_biguint_add_route@30 main_verify_biguint_add_uint64_route@31 main_verify_biguint_sub_route@32 main_verify_biguint_sub_uint64_route@33 main_verify_biguint_mul_route@34 main_verify_biguint_mul_uint64_route@35 main_verify_biguint_div_route@36 main_verify_biguint_div_uint64_route@37 main_verify_biguint_mod_route@38 main_verify_biguint_mod_uint64_route@39 main_verify_biguint_and_route@40 main_verify_biguint_and_uint64_route@41 main_verify_biguint_or_route@42 main_verify_biguint_or_uint64_route@43 main_verify_biguint_xor_route@44 main_verify_biguint_xor_uint64_route@45 main_verify_biguint_eq_route@46 main_verify_biguint_eq_uint64_route@47 main_verify_biguint_ne_route@48 main_verify_biguint_ne_uint64_route@49 main_verify_biguint_lt_route@50 main_verify_biguint_lt_uint64_route@51 main_verify_biguint_le_route@52 main_verify_biguint_le_uint64_route@53 main_verify_biguint_gt_route@54 main_verify_biguint_gt_uint64_route@55 main_verify_biguint_ge_route@56 main_verify_biguint_ge_uint64_route@57 main_verify_log_route@58 - -main_after_if_else@65: - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - intc_1 // 0 - return - -main_verify_log_route@58: - // tests/artifacts/primitive-ops/contract.algo.ts:408 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - txna ApplicationArgs 3 - extract 2 0 - txna ApplicationArgs 4 - extract 2 0 - txna ApplicationArgs 5 - txna ApplicationArgs 6 - txna ApplicationArgs 7 - txna ApplicationArgs 8 - txna ApplicationArgs 9 - txna ApplicationArgs 10 - txna ApplicationArgs 11 - extract 2 0 - txna ApplicationArgs 12 - extract 2 0 - txna ApplicationArgs 13 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:408 - // @arc4.abimethod() - callsub verify_log - intc_0 // 1 - return - -main_verify_biguint_ge_uint64_route@57: - // tests/artifacts/primitive-ops/contract.algo.ts:400 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:400 - // @arc4.abimethod() - callsub verify_biguint_ge_uint64 - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_ge_route@56: - // tests/artifacts/primitive-ops/contract.algo.ts:392 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:392 - // @arc4.abimethod() - callsub verify_biguint_ge - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_gt_uint64_route@55: - // tests/artifacts/primitive-ops/contract.algo.ts:384 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:384 - // @arc4.abimethod() - callsub verify_biguint_gt_uint64 - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_gt_route@54: - // tests/artifacts/primitive-ops/contract.algo.ts:376 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:376 - // @arc4.abimethod() - callsub verify_biguint_gt - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_le_uint64_route@53: - // tests/artifacts/primitive-ops/contract.algo.ts:368 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:368 - // @arc4.abimethod() - callsub verify_biguint_le_uint64 - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_le_route@52: - // tests/artifacts/primitive-ops/contract.algo.ts:360 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:360 - // @arc4.abimethod() - callsub verify_biguint_le - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_lt_uint64_route@51: - // tests/artifacts/primitive-ops/contract.algo.ts:352 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:352 - // @arc4.abimethod() - callsub verify_biguint_lt_uint64 - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_lt_route@50: - // tests/artifacts/primitive-ops/contract.algo.ts:344 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:344 - // @arc4.abimethod() - callsub verify_biguint_lt - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_ne_uint64_route@49: - // tests/artifacts/primitive-ops/contract.algo.ts:337 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:337 - // @arc4.abimethod() - callsub verify_biguint_ne_uint64 - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_ne_route@48: - // tests/artifacts/primitive-ops/contract.algo.ts:329 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:329 - // @arc4.abimethod() - callsub verify_biguint_ne - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_eq_uint64_route@47: - // tests/artifacts/primitive-ops/contract.algo.ts:322 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:322 - // @arc4.abimethod() - callsub verify_biguint_eq_uint64 - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_eq_route@46: - // tests/artifacts/primitive-ops/contract.algo.ts:314 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:314 - // @arc4.abimethod() - callsub verify_biguint_eq - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_xor_uint64_route@45: - // tests/artifacts/primitive-ops/contract.algo.ts:306 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:306 - // @arc4.abimethod() - callsub verify_biguint_xor_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_xor_route@44: - // tests/artifacts/primitive-ops/contract.algo.ts:298 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:298 - // @arc4.abimethod() - callsub verify_biguint_xor - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_or_uint64_route@43: - // tests/artifacts/primitive-ops/contract.algo.ts:290 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:290 - // @arc4.abimethod() - callsub verify_biguint_or_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_or_route@42: - // tests/artifacts/primitive-ops/contract.algo.ts:282 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:282 - // @arc4.abimethod() - callsub verify_biguint_or - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_and_uint64_route@41: - // tests/artifacts/primitive-ops/contract.algo.ts:274 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:274 - // @arc4.abimethod() - callsub verify_biguint_and_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_and_route@40: - // tests/artifacts/primitive-ops/contract.algo.ts:266 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:266 - // @arc4.abimethod() - callsub verify_biguint_and - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_mod_uint64_route@39: - // tests/artifacts/primitive-ops/contract.algo.ts:258 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:258 - // @arc4.abimethod() - callsub verify_biguint_mod_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_mod_route@38: - // tests/artifacts/primitive-ops/contract.algo.ts:250 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:250 - // @arc4.abimethod() - callsub verify_biguint_mod - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_div_uint64_route@37: - // tests/artifacts/primitive-ops/contract.algo.ts:242 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:242 - // @arc4.abimethod() - callsub verify_biguint_div_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_div_route@36: - // tests/artifacts/primitive-ops/contract.algo.ts:234 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:234 - // @arc4.abimethod() - callsub verify_biguint_div - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_mul_uint64_route@35: - // tests/artifacts/primitive-ops/contract.algo.ts:226 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:226 - // @arc4.abimethod() - callsub verify_biguint_mul_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_mul_route@34: - // tests/artifacts/primitive-ops/contract.algo.ts:218 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:218 - // @arc4.abimethod() - callsub verify_biguint_mul - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_sub_uint64_route@33: - // tests/artifacts/primitive-ops/contract.algo.ts:210 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:210 - // @arc4.abimethod() - callsub verify_biguint_sub_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_sub_route@32: - // tests/artifacts/primitive-ops/contract.algo.ts:202 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:202 - // @arc4.abimethod() - callsub verify_biguint_sub - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_add_uint64_route@31: - // tests/artifacts/primitive-ops/contract.algo.ts:194 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:194 - // @arc4.abimethod() - callsub verify_biguint_add_uint64 - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_biguint_add_route@30: - // tests/artifacts/primitive-ops/contract.algo.ts:186 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:186 - // @arc4.abimethod() - callsub verify_biguint_add - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_not_route@29: - // tests/artifacts/primitive-ops/contract.algo.ts:178 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:178 - // @arc4.abimethod() - callsub verify_bytes_not - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_xor_route@28: - // tests/artifacts/primitive-ops/contract.algo.ts:172 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:172 - // @arc4.abimethod() - callsub verify_bytes_xor - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_or_route@27: - // tests/artifacts/primitive-ops/contract.algo.ts:166 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:166 - // @arc4.abimethod() - callsub verify_bytes_or - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_and_route@26: - // tests/artifacts/primitive-ops/contract.algo.ts:160 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:160 - // @arc4.abimethod() - callsub verify_bytes_and - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_ne_route@25: - // tests/artifacts/primitive-ops/contract.algo.ts:154 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:154 - // @arc4.abimethod() - callsub verify_bytes_ne - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_eq_route@24: - // tests/artifacts/primitive-ops/contract.algo.ts:148 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:148 - // @arc4.abimethod() - callsub verify_bytes_eq - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_add_route@23: - // tests/artifacts/primitive-ops/contract.algo.ts:139 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - btoi - txna ApplicationArgs 4 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:139 - // @arc4.abimethod() - callsub verify_bytes_add - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_bytes_init_route@22: - // tests/artifacts/primitive-ops/contract.algo.ts:133 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:133 - // @arc4.abimethod() - callsub verify_bytes_init - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_ge_route@21: - // tests/artifacts/primitive-ops/contract.algo.ts:127 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:127 - // @arc4.abimethod() - callsub verify_uint64_ge - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_gt_route@20: - // tests/artifacts/primitive-ops/contract.algo.ts:121 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:121 - // @arc4.abimethod() - callsub verify_uint64_gt - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_le_route@19: - // tests/artifacts/primitive-ops/contract.algo.ts:115 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:115 - // @arc4.abimethod() - callsub verify_uint64_le - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_lt_route@18: - // tests/artifacts/primitive-ops/contract.algo.ts:109 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:109 - // @arc4.abimethod() - callsub verify_uint64_lt - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_ne_route@17: - // tests/artifacts/primitive-ops/contract.algo.ts:103 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:103 - // @arc4.abimethod() - callsub verify_uint64_ne - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_eq_route@16: - // tests/artifacts/primitive-ops/contract.algo.ts:97 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:97 - // @arc4.abimethod() - callsub verify_uint64_eq - bytec_1 // 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_pow_route@15: - // tests/artifacts/primitive-ops/contract.algo.ts:91 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:91 - // @arc4.abimethod() - callsub verify_uint64_pow - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_rshift_route@14: - // tests/artifacts/primitive-ops/contract.algo.ts:85 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:85 - // @arc4.abimethod() - callsub verify_uint64_rshift - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_lshift_route@13: - // tests/artifacts/primitive-ops/contract.algo.ts:79 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:79 - // @arc4.abimethod() - callsub verify_uint64_lshift - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_not_route@12: - // tests/artifacts/primitive-ops/contract.algo.ts:73 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:73 - // @arc4.abimethod() - callsub verify_uint64_not - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_xor_route@11: - // tests/artifacts/primitive-ops/contract.algo.ts:67 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:67 - // @arc4.abimethod() - callsub verify_uint64_xor - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_or_route@10: - // tests/artifacts/primitive-ops/contract.algo.ts:61 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:61 - // @arc4.abimethod() - callsub verify_uint64_or - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_and_route@9: - // tests/artifacts/primitive-ops/contract.algo.ts:55 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:55 - // @arc4.abimethod() - callsub verify_uint64_and - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_mod_route@8: - // tests/artifacts/primitive-ops/contract.algo.ts:49 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:49 - // @arc4.abimethod() - callsub verify_uint64_mod - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_div_route@7: - // tests/artifacts/primitive-ops/contract.algo.ts:43 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:43 - // @arc4.abimethod() - callsub verify_uint64_div - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_mul_route@6: - // tests/artifacts/primitive-ops/contract.algo.ts:37 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:37 - // @arc4.abimethod() - callsub verify_uint64_mul - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_sub_route@5: - // tests/artifacts/primitive-ops/contract.algo.ts:31 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:31 - // @arc4.abimethod() - callsub verify_uint64_sub - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_add_route@4: - // tests/artifacts/primitive-ops/contract.algo.ts:25 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txna ApplicationArgs 2 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:25 - // @arc4.abimethod() - callsub verify_uint64_add - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_uint64_init_route@3: - // tests/artifacts/primitive-ops/contract.algo.ts:19 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/primitive-ops/contract.algo.ts:19 - // @arc4.abimethod() - callsub verify_uint64_init - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@61: - // tests/artifacts/primitive-ops/contract.algo.ts:18 - // export class PrimitiveOpsContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@65 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_init(raw_value: bytes) -> uint64: -verify_uint64_init: - // tests/artifacts/primitive-ops/contract.algo.ts:19-20 - // @arc4.abimethod() - // public verify_uint64_init(raw_value: bytes): uint64 { - proto 1 1 - // tests/artifacts/primitive-ops/contract.algo.ts:21 - // const result = op.btoi(raw_value) - frame_dig -1 - btoi - // tests/artifacts/primitive-ops/contract.algo.ts:22 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_add(a: uint64, b: uint64) -> uint64: -verify_uint64_add: - // tests/artifacts/primitive-ops/contract.algo.ts:25-26 - // @arc4.abimethod() - // public verify_uint64_add(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:27 - // const result: uint64 = a + b - frame_dig -2 - frame_dig -1 - + - // tests/artifacts/primitive-ops/contract.algo.ts:28 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_sub(a: uint64, b: uint64) -> uint64: -verify_uint64_sub: - // tests/artifacts/primitive-ops/contract.algo.ts:31-32 - // @arc4.abimethod() - // public verify_uint64_sub(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:33 - // const result: uint64 = a - b - frame_dig -2 - frame_dig -1 - - - // tests/artifacts/primitive-ops/contract.algo.ts:34 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_mul(a: uint64, b: uint64) -> uint64: -verify_uint64_mul: - // tests/artifacts/primitive-ops/contract.algo.ts:37-38 - // @arc4.abimethod() - // public verify_uint64_mul(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:39 - // const result: uint64 = a * b - frame_dig -2 - frame_dig -1 - * - // tests/artifacts/primitive-ops/contract.algo.ts:40 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_div(a: uint64, b: uint64) -> uint64: -verify_uint64_div: - // tests/artifacts/primitive-ops/contract.algo.ts:43-44 - // @arc4.abimethod() - // public verify_uint64_div(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:45 - // const result: uint64 = a / b - frame_dig -2 - frame_dig -1 - / - // tests/artifacts/primitive-ops/contract.algo.ts:46 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_mod(a: uint64, b: uint64) -> uint64: -verify_uint64_mod: - // tests/artifacts/primitive-ops/contract.algo.ts:49-50 - // @arc4.abimethod() - // public verify_uint64_mod(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:51 - // const result: uint64 = a % b - frame_dig -2 - frame_dig -1 - % - // tests/artifacts/primitive-ops/contract.algo.ts:52 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_and(a: uint64, b: uint64) -> uint64: -verify_uint64_and: - // tests/artifacts/primitive-ops/contract.algo.ts:55-56 - // @arc4.abimethod() - // public verify_uint64_and(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:57 - // const result: uint64 = a & b - frame_dig -2 - frame_dig -1 - & - // tests/artifacts/primitive-ops/contract.algo.ts:58 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_or(a: uint64, b: uint64) -> uint64: -verify_uint64_or: - // tests/artifacts/primitive-ops/contract.algo.ts:61-62 - // @arc4.abimethod() - // public verify_uint64_or(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:63 - // const result: uint64 = a | b - frame_dig -2 - frame_dig -1 - | - // tests/artifacts/primitive-ops/contract.algo.ts:64 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_xor(a: uint64, b: uint64) -> uint64: -verify_uint64_xor: - // tests/artifacts/primitive-ops/contract.algo.ts:67-68 - // @arc4.abimethod() - // public verify_uint64_xor(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:69 - // const result: uint64 = a ^ b - frame_dig -2 - frame_dig -1 - ^ - // tests/artifacts/primitive-ops/contract.algo.ts:70 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_not(a: uint64) -> uint64: -verify_uint64_not: - // tests/artifacts/primitive-ops/contract.algo.ts:73-74 - // @arc4.abimethod() - // public verify_uint64_not(a: uint64): uint64 { - proto 1 1 - // tests/artifacts/primitive-ops/contract.algo.ts:75 - // const result: uint64 = ~a - frame_dig -1 - ~ - // tests/artifacts/primitive-ops/contract.algo.ts:76 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_lshift(a: uint64, b: uint64) -> uint64: -verify_uint64_lshift: - // tests/artifacts/primitive-ops/contract.algo.ts:79-80 - // @arc4.abimethod() - // public verify_uint64_lshift(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:81 - // const result: uint64 = a << b - frame_dig -2 - frame_dig -1 - shl - // tests/artifacts/primitive-ops/contract.algo.ts:82 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_rshift(a: uint64, b: uint64) -> uint64: -verify_uint64_rshift: - // tests/artifacts/primitive-ops/contract.algo.ts:85-86 - // @arc4.abimethod() - // public verify_uint64_rshift(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:87 - // const result: uint64 = a >> b - frame_dig -2 - frame_dig -1 - shr - // tests/artifacts/primitive-ops/contract.algo.ts:88 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_pow(a: uint64, b: uint64) -> uint64: -verify_uint64_pow: - // tests/artifacts/primitive-ops/contract.algo.ts:91-92 - // @arc4.abimethod() - // public verify_uint64_pow(a: uint64, b: uint64): uint64 { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:93 - // const result: uint64 = a ** b - frame_dig -2 - frame_dig -1 - exp - // tests/artifacts/primitive-ops/contract.algo.ts:94 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_eq(a: uint64, b: uint64) -> uint64: -verify_uint64_eq: - // tests/artifacts/primitive-ops/contract.algo.ts:97-98 - // @arc4.abimethod() - // public verify_uint64_eq(a: uint64, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:99 - // const result = a === b - frame_dig -2 - frame_dig -1 - == - // tests/artifacts/primitive-ops/contract.algo.ts:100 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_ne(a: uint64, b: uint64) -> uint64: -verify_uint64_ne: - // tests/artifacts/primitive-ops/contract.algo.ts:103-104 - // @arc4.abimethod() - // public verify_uint64_ne(a: uint64, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:105 - // const result = a !== b - frame_dig -2 - frame_dig -1 - != - // tests/artifacts/primitive-ops/contract.algo.ts:106 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_lt(a: uint64, b: uint64) -> uint64: -verify_uint64_lt: - // tests/artifacts/primitive-ops/contract.algo.ts:109-110 - // @arc4.abimethod() - // public verify_uint64_lt(a: uint64, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:111 - // const result = a < b - frame_dig -2 - frame_dig -1 - < - // tests/artifacts/primitive-ops/contract.algo.ts:112 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_le(a: uint64, b: uint64) -> uint64: -verify_uint64_le: - // tests/artifacts/primitive-ops/contract.algo.ts:115-116 - // @arc4.abimethod() - // public verify_uint64_le(a: uint64, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:117 - // const result = a <= b - frame_dig -2 - frame_dig -1 - <= - // tests/artifacts/primitive-ops/contract.algo.ts:118 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_gt(a: uint64, b: uint64) -> uint64: -verify_uint64_gt: - // tests/artifacts/primitive-ops/contract.algo.ts:121-122 - // @arc4.abimethod() - // public verify_uint64_gt(a: uint64, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:123 - // const result = a > b - frame_dig -2 - frame_dig -1 - > - // tests/artifacts/primitive-ops/contract.algo.ts:124 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_uint64_ge(a: uint64, b: uint64) -> uint64: -verify_uint64_ge: - // tests/artifacts/primitive-ops/contract.algo.ts:127-128 - // @arc4.abimethod() - // public verify_uint64_ge(a: uint64, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:129 - // const result = a >= b - frame_dig -2 - frame_dig -1 - >= - // tests/artifacts/primitive-ops/contract.algo.ts:130 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_init(raw_value: uint64) -> bytes: -verify_bytes_init: - // tests/artifacts/primitive-ops/contract.algo.ts:133-134 - // @arc4.abimethod() - // public verify_bytes_init(raw_value: uint64): bytes { - proto 1 1 - // tests/artifacts/primitive-ops/contract.algo.ts:135 - // const result = op.itob(raw_value) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:136 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_add(a: bytes, b: bytes, pad_a_size: uint64, pad_b_size: uint64) -> bytes: -verify_bytes_add: - // tests/artifacts/primitive-ops/contract.algo.ts:139-140 - // @arc4.abimethod() - // public verify_bytes_add(a: bytes, b: bytes, pad_a_size: uint64, pad_b_size: uint64): bytes { - proto 4 1 - // tests/artifacts/primitive-ops/contract.algo.ts:141 - // const paddedA = op.bzero(pad_a_size).concat(a) - frame_dig -2 - bzero - frame_dig -4 - concat - // tests/artifacts/primitive-ops/contract.algo.ts:142 - // const paddedB = op.bzero(pad_b_size).concat(b) - frame_dig -1 - bzero - frame_dig -3 - concat - // tests/artifacts/primitive-ops/contract.algo.ts:143 - // const result = paddedA.concat(paddedB) - concat - // tests/artifacts/primitive-ops/contract.algo.ts:144 - // const resultHash = op.sha256(result) - sha256 - // tests/artifacts/primitive-ops/contract.algo.ts:145 - // return resultHash - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_eq(a: bytes, b: bytes) -> uint64: -verify_bytes_eq: - // tests/artifacts/primitive-ops/contract.algo.ts:148-149 - // @arc4.abimethod() - // public verify_bytes_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:150 - // const result = a === b - frame_dig -2 - frame_dig -1 - == - // tests/artifacts/primitive-ops/contract.algo.ts:151 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_ne(a: bytes, b: bytes) -> uint64: -verify_bytes_ne: - // tests/artifacts/primitive-ops/contract.algo.ts:154-155 - // @arc4.abimethod() - // public verify_bytes_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:156 - // const result = a !== b - frame_dig -2 - frame_dig -1 - != - // tests/artifacts/primitive-ops/contract.algo.ts:157 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_and(a: bytes, b: bytes) -> bytes: -verify_bytes_and: - // tests/artifacts/primitive-ops/contract.algo.ts:160-161 - // @arc4.abimethod() - // public verify_bytes_and(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:162 - // const result = a.bitwiseAnd(b) - frame_dig -2 - frame_dig -1 - b& - // tests/artifacts/primitive-ops/contract.algo.ts:163 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_or(a: bytes, b: bytes) -> bytes: -verify_bytes_or: - // tests/artifacts/primitive-ops/contract.algo.ts:166-167 - // @arc4.abimethod() - // public verify_bytes_or(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:168 - // const result = a.bitwiseOr(b) - frame_dig -2 - frame_dig -1 - b| - // tests/artifacts/primitive-ops/contract.algo.ts:169 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_xor(a: bytes, b: bytes) -> bytes: -verify_bytes_xor: - // tests/artifacts/primitive-ops/contract.algo.ts:172-173 - // @arc4.abimethod() - // public verify_bytes_xor(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:174 - // const result = a.bitwiseXor(b) - frame_dig -2 - frame_dig -1 - b^ - // tests/artifacts/primitive-ops/contract.algo.ts:175 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_bytes_not(a: bytes, pad_size: uint64) -> bytes: -verify_bytes_not: - // tests/artifacts/primitive-ops/contract.algo.ts:178-179 - // @arc4.abimethod() - // public verify_bytes_not(a: bytes, pad_size: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:180 - // const paddedA = op.bzero(pad_size).concat(a) - frame_dig -1 - bzero - frame_dig -2 - concat - // tests/artifacts/primitive-ops/contract.algo.ts:181 - // const result = paddedA.bitwiseInvert() - b~ - // tests/artifacts/primitive-ops/contract.algo.ts:182 - // const resultHash = op.sha256(result) - sha256 - // tests/artifacts/primitive-ops/contract.algo.ts:183 - // return resultHash - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_add(a: bytes, b: bytes) -> bytes: -verify_biguint_add: - // tests/artifacts/primitive-ops/contract.algo.ts:186-187 - // @arc4.abimethod() - // public verify_biguint_add(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:190 - // const result: biguint = a_biguint + b_biguint - frame_dig -2 - frame_dig -1 - b+ - // tests/artifacts/primitive-ops/contract.algo.ts:191 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_add_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_add_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:194-195 - // @arc4.abimethod() - // public verify_biguint_add_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:197 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:198 - // const result: biguint = a_biguint + b_biguint - frame_dig -2 - b+ - // tests/artifacts/primitive-ops/contract.algo.ts:199 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_sub(a: bytes, b: bytes) -> bytes: -verify_biguint_sub: - // tests/artifacts/primitive-ops/contract.algo.ts:202-203 - // @arc4.abimethod() - // public verify_biguint_sub(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:206 - // const result: biguint = a_biguint - b_biguint - frame_dig -2 - frame_dig -1 - b- - // tests/artifacts/primitive-ops/contract.algo.ts:207 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_sub_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_sub_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:210-211 - // @arc4.abimethod() - // public verify_biguint_sub_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:213 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:214 - // const result: biguint = a_biguint - b_biguint - frame_dig -2 - swap - b- - // tests/artifacts/primitive-ops/contract.algo.ts:215 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_mul(a: bytes, b: bytes) -> bytes: -verify_biguint_mul: - // tests/artifacts/primitive-ops/contract.algo.ts:218-219 - // @arc4.abimethod() - // public verify_biguint_mul(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:222 - // const result: biguint = a_biguint * b_biguint - frame_dig -2 - frame_dig -1 - b* - // tests/artifacts/primitive-ops/contract.algo.ts:223 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_mul_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_mul_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:226-227 - // @arc4.abimethod() - // public verify_biguint_mul_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:229 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:230 - // const result: biguint = a_biguint * b_biguint - frame_dig -2 - b* - // tests/artifacts/primitive-ops/contract.algo.ts:231 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_div(a: bytes, b: bytes) -> bytes: -verify_biguint_div: - // tests/artifacts/primitive-ops/contract.algo.ts:234-235 - // @arc4.abimethod() - // public verify_biguint_div(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:238 - // const result: biguint = a_biguint / b_biguint - frame_dig -2 - frame_dig -1 - b/ - // tests/artifacts/primitive-ops/contract.algo.ts:239 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_div_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_div_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:242-243 - // @arc4.abimethod() - // public verify_biguint_div_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:245 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:246 - // const result: biguint = a_biguint / b_biguint - frame_dig -2 - swap - b/ - // tests/artifacts/primitive-ops/contract.algo.ts:247 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_mod(a: bytes, b: bytes) -> bytes: -verify_biguint_mod: - // tests/artifacts/primitive-ops/contract.algo.ts:250-251 - // @arc4.abimethod() - // public verify_biguint_mod(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:254 - // const result: biguint = a_biguint % b_biguint - frame_dig -2 - frame_dig -1 - b% - // tests/artifacts/primitive-ops/contract.algo.ts:255 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_mod_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_mod_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:258-259 - // @arc4.abimethod() - // public verify_biguint_mod_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:261 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:262 - // const result: biguint = a_biguint % b_biguint - frame_dig -2 - swap - b% - // tests/artifacts/primitive-ops/contract.algo.ts:263 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_and(a: bytes, b: bytes) -> bytes: -verify_biguint_and: - // tests/artifacts/primitive-ops/contract.algo.ts:266-267 - // @arc4.abimethod() - // public verify_biguint_and(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:270 - // const result: biguint = a_biguint & b_biguint - frame_dig -2 - frame_dig -1 - b& - // tests/artifacts/primitive-ops/contract.algo.ts:271 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_and_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_and_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:274-275 - // @arc4.abimethod() - // public verify_biguint_and_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:277 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:278 - // const result: biguint = a_biguint & b_biguint - frame_dig -2 - b& - // tests/artifacts/primitive-ops/contract.algo.ts:279 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_or(a: bytes, b: bytes) -> bytes: -verify_biguint_or: - // tests/artifacts/primitive-ops/contract.algo.ts:282-283 - // @arc4.abimethod() - // public verify_biguint_or(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:286 - // const result: biguint = a_biguint | b_biguint - frame_dig -2 - frame_dig -1 - b| - // tests/artifacts/primitive-ops/contract.algo.ts:287 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_or_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_or_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:290-291 - // @arc4.abimethod() - // public verify_biguint_or_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:293 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:294 - // const result: biguint = a_biguint | b_biguint - frame_dig -2 - b| - // tests/artifacts/primitive-ops/contract.algo.ts:295 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_xor(a: bytes, b: bytes) -> bytes: -verify_biguint_xor: - // tests/artifacts/primitive-ops/contract.algo.ts:298-299 - // @arc4.abimethod() - // public verify_biguint_xor(a: bytes, b: bytes): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:302 - // const result: biguint = a_biguint ^ b_biguint - frame_dig -2 - frame_dig -1 - b^ - // tests/artifacts/primitive-ops/contract.algo.ts:303 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_xor_uint64(a: bytes, b: uint64) -> bytes: -verify_biguint_xor_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:306-307 - // @arc4.abimethod() - // public verify_biguint_xor_uint64(a: bytes, b: uint64): bytes { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:309 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:310 - // const result: biguint = a_biguint ^ b_biguint - frame_dig -2 - b^ - // tests/artifacts/primitive-ops/contract.algo.ts:311 - // return Bytes(result) - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_eq(a: bytes, b: bytes) -> uint64: -verify_biguint_eq: - // tests/artifacts/primitive-ops/contract.algo.ts:314-315 - // @arc4.abimethod() - // public verify_biguint_eq(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:318 - // const result = a_biguint === b_biguint - frame_dig -2 - frame_dig -1 - b== - // tests/artifacts/primitive-ops/contract.algo.ts:319 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_eq_uint64(a: bytes, b: uint64) -> uint64: -verify_biguint_eq_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:322-323 - // @arc4.abimethod() - // public verify_biguint_eq_uint64(a: bytes, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:325 - // const result = a_biguint === BigUint(b) - frame_dig -1 - itob - frame_dig -2 - b== - // tests/artifacts/primitive-ops/contract.algo.ts:326 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_ne(a: bytes, b: bytes) -> uint64: -verify_biguint_ne: - // tests/artifacts/primitive-ops/contract.algo.ts:329-330 - // @arc4.abimethod() - // public verify_biguint_ne(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:333 - // const result = a_biguint !== b_biguint - frame_dig -2 - frame_dig -1 - b!= - // tests/artifacts/primitive-ops/contract.algo.ts:334 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_ne_uint64(a: bytes, b: uint64) -> uint64: -verify_biguint_ne_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:337-338 - // @arc4.abimethod() - // public verify_biguint_ne_uint64(a: bytes, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:340 - // const result = a_biguint !== BigUint(b) - frame_dig -1 - itob - frame_dig -2 - b!= - // tests/artifacts/primitive-ops/contract.algo.ts:341 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_lt(a: bytes, b: bytes) -> uint64: -verify_biguint_lt: - // tests/artifacts/primitive-ops/contract.algo.ts:344-345 - // @arc4.abimethod() - // public verify_biguint_lt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:348 - // const result = a_biguint < b_biguint - frame_dig -2 - frame_dig -1 - b< - // tests/artifacts/primitive-ops/contract.algo.ts:349 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_lt_uint64(a: bytes, b: uint64) -> uint64: -verify_biguint_lt_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:352-353 - // @arc4.abimethod() - // public verify_biguint_lt_uint64(a: bytes, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:355 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:356 - // const result = a_biguint < b_biguint - frame_dig -2 - b> - // tests/artifacts/primitive-ops/contract.algo.ts:357 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_le(a: bytes, b: bytes) -> uint64: -verify_biguint_le: - // tests/artifacts/primitive-ops/contract.algo.ts:360-361 - // @arc4.abimethod() - // public verify_biguint_le(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:364 - // const result = a_biguint <= b_biguint - frame_dig -2 - frame_dig -1 - b<= - // tests/artifacts/primitive-ops/contract.algo.ts:365 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_le_uint64(a: bytes, b: uint64) -> uint64: -verify_biguint_le_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:368-369 - // @arc4.abimethod() - // public verify_biguint_le_uint64(a: bytes, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:371 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:372 - // const result = a_biguint <= b_biguint - frame_dig -2 - b>= - // tests/artifacts/primitive-ops/contract.algo.ts:373 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_gt(a: bytes, b: bytes) -> uint64: -verify_biguint_gt: - // tests/artifacts/primitive-ops/contract.algo.ts:376-377 - // @arc4.abimethod() - // public verify_biguint_gt(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:380 - // const result = a_biguint > b_biguint - frame_dig -2 - frame_dig -1 - b> - // tests/artifacts/primitive-ops/contract.algo.ts:381 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_gt_uint64(a: bytes, b: uint64) -> uint64: -verify_biguint_gt_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:384-385 - // @arc4.abimethod() - // public verify_biguint_gt_uint64(a: bytes, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:387 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:388 - // const result = a_biguint > b_biguint - frame_dig -2 - b< - // tests/artifacts/primitive-ops/contract.algo.ts:389 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_ge(a: bytes, b: bytes) -> uint64: -verify_biguint_ge: - // tests/artifacts/primitive-ops/contract.algo.ts:392-393 - // @arc4.abimethod() - // public verify_biguint_ge(a: bytes, b: bytes): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:396 - // const result = a_biguint >= b_biguint - frame_dig -2 - frame_dig -1 - b>= - // tests/artifacts/primitive-ops/contract.algo.ts:397 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_biguint_ge_uint64(a: bytes, b: uint64) -> uint64: -verify_biguint_ge_uint64: - // tests/artifacts/primitive-ops/contract.algo.ts:400-401 - // @arc4.abimethod() - // public verify_biguint_ge_uint64(a: bytes, b: uint64): boolean { - proto 2 1 - // tests/artifacts/primitive-ops/contract.algo.ts:403 - // const b_biguint = BigUint(b) - frame_dig -1 - itob - // tests/artifacts/primitive-ops/contract.algo.ts:404 - // const result = a_biguint >= b_biguint - frame_dig -2 - b<= - // tests/artifacts/primitive-ops/contract.algo.ts:405 - // return result - retsub - - -// tests/artifacts/primitive-ops/contract.algo.ts::PrimitiveOpsContract.verify_log(a: bytes, b: uint64, c: bytes, d: bytes, e: bytes, f: bytes, g: bytes, h: bytes, i: bytes, j: bytes, k: bytes, m: bytes, n: bytes) -> void: -verify_log: - // tests/artifacts/primitive-ops/contract.algo.ts:408-423 - // @arc4.abimethod() - // public verify_log( - // a: string, - // b: uint64, - // c: bytes, - // d: bytes, - // e: Bool, - // f: Str, - // g: UintN<64>, - // h: UintN<256>, - // i: UFixedNxM<32, 8>, - // j: UFixedNxM<256, 16>, - // k: bytes, - // m: bytes, - // n: bytes, - // ) { - proto 13 0 - // tests/artifacts/primitive-ops/contract.algo.ts:428 - // log(a, b, c, d_biguint, e, f, g, h, i, j, arc4_k, arc4_m, arc4_n) - frame_dig -12 - itob - frame_dig -13 - swap - concat - frame_dig -11 - concat - frame_dig -10 - concat - frame_dig -9 - concat - frame_dig -8 - concat - frame_dig -7 - concat - frame_dig -6 - concat - frame_dig -5 - concat - frame_dig -4 - concat - frame_dig -3 - concat - frame_dig -2 - concat - frame_dig -1 - concat - log - retsub diff --git a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc32.json b/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc32.json deleted file mode 100644 index 27861c0..0000000 --- a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc32.json +++ /dev/null @@ -1,1309 +0,0 @@ -{ - "hints": { - "verify_uint64_init(byte[])uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_add(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_sub(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_mul(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_div(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_mod(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_and(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_or(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_xor(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_not(uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_lshift(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_rshift(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_pow(uint64,uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_eq(uint64,uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_ne(uint64,uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_lt(uint64,uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_le(uint64,uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_gt(uint64,uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uint64_ge(uint64,uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_init(uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_add(byte[],byte[],uint64,uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_and(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_or(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_xor(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bytes_not(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_add(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_add_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_sub(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_sub_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_mul(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_mul_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_div(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_div_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_mod(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_mod_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_and(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_and_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_or(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_or_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_xor(byte[],byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_xor_uint64(byte[],uint64)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_eq_uint64(byte[],uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_ne_uint64(byte[],uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_lt_uint64(byte[],uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_le_uint64(byte[],uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_gt_uint64(byte[],uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguint_ge_uint64(byte[],uint64)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_log(string,uint64,byte[],byte[],bool,string,uint64,uint256,ufixed32x8,ufixed256x16,byte[],byte[],byte[])void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANjEKICAgIHB1c2hieXRlc3MgMHg3MjVjNjkyYiAweDE3MzE0NTU5IDB4NTNmMzQ4OTMgMHg4OGM4YjI2OSAweGE0NjRiN2FiIDB4OWM4YjExYjggMHg2ZjQwNjU0ZSAweGVjOWEyOTc0IDB4Yzc5MzcwOGYgMHg3ZGRiNzQ5OSAweGEyMWM0NDNkIDB4NmU3ZmIyMTIgMHhiMDA3ZmNiMCAweDJlYmMyMGQ0IDB4YjA5NTRiNjYgMHhkZDE0MGFlZiAweGFjZTQ3NGRhIDB4YmE2OTQ5OTAgMHg2ZGI1ODFjMCAweDkxYzhkYjg5IDB4ZGJlNzcxNTggMHg5YTBmMjJlMSAweDY0MDMzZDM3IDB4MmE3MjM3YzUgMHhlM2E5NDQ1OCAweDQyZjg3ZjdkIDB4MmI1NTQyYTQgMHg5YmUyZmJlOSAweDFjZDkyNTE1IDB4NjRlMTcwNWMgMHhmMTI3MWM1MCAweDJhYjYzYjcwIDB4ODM0YmI3ZDIgMHg1MzE2MjBkNyAweDNmYjllNzY5IDB4ZmE4ZGIwYmMgMHhhNzJlYTQ4NSAweGI3YjBiYTE5IDB4NzQ0NjBjNDIgMHhhYjMyMDczOCAweDUyYWQ0NjU0IDB4MTAxNTYzOTkgMHgwZjA3NTk1NyAweGJkODQzZGZmIDB4YjM3N2QzODEgMHg4OTc2NzI2NSAweDQ1NmI0YjIzIDB4MzNkMWI4OGMgMHg2YmY5NzNlYSAweDY3Y2Q2YmIyIDB4M2Y1ODgwNWEgMHgxZTEzMDAzOSAweDUwOWRjOTFkIDB4YTU2NGEyMDIgMHgyMzY1MDc2MyAweGUwMDdjMTBiIC8vIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9pbml0KGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfYWRkKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X3N1Yih1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9tdWwodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfZGl2KHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X21vZCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9hbmQodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfb3IodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfeG9yKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X25vdCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2xzaGlmdCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9yc2hpZnQodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfcG93KHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2VxKHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9uZSh1aW50NjQsdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50NjRfbHQodWludDY0LHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2xlKHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9ndCh1aW50NjQsdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50NjRfZ2UodWludDY0LHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfaW5pdCh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfYWRkKGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlc19uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlc19hbmQoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19vcihieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX3hvcihieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX25vdChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfYWRkKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9hZGRfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9zdWIoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X211bChieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZGl2KGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9kaXZfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9tb2QoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X21vZF91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2FuZChieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfb3IoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X29yX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfeG9yKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF94b3JfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NChieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X25lKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbmVfdWludDY0KGJ5dGVbXSx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9sdF91aW50NjQoYnl0ZVtdLHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NChieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2d0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0KGJ5dGVbXSx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9nZV91aW50NjQoYnl0ZVtdLHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfbG9nKHN0cmluZyx1aW50NjQsYnl0ZVtdLGJ5dGVbXSxib29sLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfdWludDY0X2luaXRfcm91dGVAMyBtYWluX3ZlcmlmeV91aW50NjRfYWRkX3JvdXRlQDQgbWFpbl92ZXJpZnlfdWludDY0X3N1Yl9yb3V0ZUA1IG1haW5fdmVyaWZ5X3VpbnQ2NF9tdWxfcm91dGVANiBtYWluX3ZlcmlmeV91aW50NjRfZGl2X3JvdXRlQDcgbWFpbl92ZXJpZnlfdWludDY0X21vZF9yb3V0ZUA4IG1haW5fdmVyaWZ5X3VpbnQ2NF9hbmRfcm91dGVAOSBtYWluX3ZlcmlmeV91aW50NjRfb3Jfcm91dGVAMTAgbWFpbl92ZXJpZnlfdWludDY0X3hvcl9yb3V0ZUAxMSBtYWluX3ZlcmlmeV91aW50NjRfbm90X3JvdXRlQDEyIG1haW5fdmVyaWZ5X3VpbnQ2NF9sc2hpZnRfcm91dGVAMTMgbWFpbl92ZXJpZnlfdWludDY0X3JzaGlmdF9yb3V0ZUAxNCBtYWluX3ZlcmlmeV91aW50NjRfcG93X3JvdXRlQDE1IG1haW5fdmVyaWZ5X3VpbnQ2NF9lcV9yb3V0ZUAxNiBtYWluX3ZlcmlmeV91aW50NjRfbmVfcm91dGVAMTcgbWFpbl92ZXJpZnlfdWludDY0X2x0X3JvdXRlQDE4IG1haW5fdmVyaWZ5X3VpbnQ2NF9sZV9yb3V0ZUAxOSBtYWluX3ZlcmlmeV91aW50NjRfZ3Rfcm91dGVAMjAgbWFpbl92ZXJpZnlfdWludDY0X2dlX3JvdXRlQDIxIG1haW5fdmVyaWZ5X2J5dGVzX2luaXRfcm91dGVAMjIgbWFpbl92ZXJpZnlfYnl0ZXNfYWRkX3JvdXRlQDIzIG1haW5fdmVyaWZ5X2J5dGVzX2VxX3JvdXRlQDI0IG1haW5fdmVyaWZ5X2J5dGVzX25lX3JvdXRlQDI1IG1haW5fdmVyaWZ5X2J5dGVzX2FuZF9yb3V0ZUAyNiBtYWluX3ZlcmlmeV9ieXRlc19vcl9yb3V0ZUAyNyBtYWluX3ZlcmlmeV9ieXRlc194b3Jfcm91dGVAMjggbWFpbl92ZXJpZnlfYnl0ZXNfbm90X3JvdXRlQDI5IG1haW5fdmVyaWZ5X2JpZ3VpbnRfYWRkX3JvdXRlQDMwIG1haW5fdmVyaWZ5X2JpZ3VpbnRfYWRkX3VpbnQ2NF9yb3V0ZUAzMSBtYWluX3ZlcmlmeV9iaWd1aW50X3N1Yl9yb3V0ZUAzMiBtYWluX3ZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjRfcm91dGVAMzMgbWFpbl92ZXJpZnlfYmlndWludF9tdWxfcm91dGVAMzQgbWFpbl92ZXJpZnlfYmlndWludF9tdWxfdWludDY0X3JvdXRlQDM1IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZGl2X3JvdXRlQDM2IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZGl2X3VpbnQ2NF9yb3V0ZUAzNyBtYWluX3ZlcmlmeV9iaWd1aW50X21vZF9yb3V0ZUAzOCBtYWluX3ZlcmlmeV9iaWd1aW50X21vZF91aW50NjRfcm91dGVAMzkgbWFpbl92ZXJpZnlfYmlndWludF9hbmRfcm91dGVANDAgbWFpbl92ZXJpZnlfYmlndWludF9hbmRfdWludDY0X3JvdXRlQDQxIG1haW5fdmVyaWZ5X2JpZ3VpbnRfb3Jfcm91dGVANDIgbWFpbl92ZXJpZnlfYmlndWludF9vcl91aW50NjRfcm91dGVANDMgbWFpbl92ZXJpZnlfYmlndWludF94b3Jfcm91dGVANDQgbWFpbl92ZXJpZnlfYmlndWludF94b3JfdWludDY0X3JvdXRlQDQ1IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZXFfcm91dGVANDYgbWFpbl92ZXJpZnlfYmlndWludF9lcV91aW50NjRfcm91dGVANDcgbWFpbl92ZXJpZnlfYmlndWludF9uZV9yb3V0ZUA0OCBtYWluX3ZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NF9yb3V0ZUA0OSBtYWluX3ZlcmlmeV9iaWd1aW50X2x0X3JvdXRlQDUwIG1haW5fdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0X3JvdXRlQDUxIG1haW5fdmVyaWZ5X2JpZ3VpbnRfbGVfcm91dGVANTIgbWFpbl92ZXJpZnlfYmlndWludF9sZV91aW50NjRfcm91dGVANTMgbWFpbl92ZXJpZnlfYmlndWludF9ndF9yb3V0ZUA1NCBtYWluX3ZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NF9yb3V0ZUA1NSBtYWluX3ZlcmlmeV9iaWd1aW50X2dlX3JvdXRlQDU2IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0X3JvdXRlQDU3IG1haW5fdmVyaWZ5X2xvZ19yb3V0ZUA1OAoKbWFpbl9hZnRlcl9pZl9lbHNlQDY1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9sb2dfcm91dGVANTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9sb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0X3JvdXRlQDU3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9nZV91aW50NjQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2dlX3JvdXRlQDU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NF9yb3V0ZUA1NToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9ndF9yb3V0ZUA1NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9sZV91aW50NjRfcm91dGVANTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbGVfcm91dGVANTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9sZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0X3JvdXRlQDUxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9sdF91aW50NjQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2x0X3JvdXRlQDUwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NF9yb3V0ZUA0OToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbmVfdWludDY0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9uZV9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9lcV91aW50NjRfcm91dGVANDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfZXFfcm91dGVANDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfeG9yX3VpbnQ2NF9yb3V0ZUA0NToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfeG9yX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfeG9yX3JvdXRlQDQ0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfeG9yCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9vcl91aW50NjRfcm91dGVANDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X29yX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfb3Jfcm91dGVANDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9vcgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NF9yb3V0ZUA0MToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfYW5kX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfYW5kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9tb2RfdWludDY0X3JvdXRlQDM5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9tb2RfdWludDY0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9tb2Rfcm91dGVAMzg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9tb2QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjRfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2Rpdl9yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2RpdgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NF9yb3V0ZUAzNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbXVsX3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbXVsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9zdWJfdWludDY0X3JvdXRlQDMzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9zdWJfdWludDY0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9zdWJfcm91dGVAMzI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9zdWIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2FkZF91aW50NjRfcm91dGVAMzE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2FkZF91aW50NjQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2FkZF9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2FkZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX25vdF9yb3V0ZUAyOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX25vdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX3hvcl9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc194b3IKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlc19vcl9yb3V0ZUAyNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc19vcgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX2FuZF9yb3V0ZUAyNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc19hbmQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlc19uZV9yb3V0ZUAyNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc19uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX2VxX3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZXNfYWRkX3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX2FkZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX2luaXRfcm91dGVAMjI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX2luaXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfZ2Vfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9ndF9yb3V0ZUAyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X2xlX3JvdXRlQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfbHRfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9uZV9yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X2VxX3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X3Bvd19yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9wb3cKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9yc2hpZnRfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfcnNoaWZ0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfbHNoaWZ0X3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2xzaGlmdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X25vdF9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9ub3QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF94b3Jfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfeG9yCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfb3Jfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfb3IKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9hbmRfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9hbmQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9tb2Rfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9tb2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9kaXZfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9kaXYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9tdWxfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9tdWwKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9zdWJfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9zdWIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9hZGRfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9hZGQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9pbml0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2luaXQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDYxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDY1CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfaW5pdChyYXdfdmFsdWU6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTktMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9pbml0KHJhd192YWx1ZTogYnl0ZXMpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5idG9pKHJhd192YWx1ZSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9hZGQoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9hZGQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1LTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfYWRkKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfc3ViKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfc3ViOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMS0zMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X3N1YihhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSAtIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X211bChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X211bDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9tdWwoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCByZXN1bHQ6IHVpbnQ2NCA9IGEgKiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9kaXYoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9kaXY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzLTQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfZGl2KGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhIC8gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIC8KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbW9kKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfbW9kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X21vZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSAlIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X2FuZChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2FuZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9hbmQoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCByZXN1bHQ6IHVpbnQ2NCA9IGEgJiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9vcihhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X29yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X29yKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhIHwgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfeG9yKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfeG9yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2Ny02OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X3hvcihhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSBeIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBeCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X25vdChhOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9ub3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczLTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfbm90KGE6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gfmEKICAgIGZyYW1lX2RpZyAtMQogICAgfgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9sc2hpZnQoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9sc2hpZnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5LTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfbHNoaWZ0KGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhIDw8IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzaGwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfcnNoaWZ0KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfcnNoaWZ0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NS04NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X3JzaGlmdChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSA+PiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgc2hyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X3BvdyhhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X3BvdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTEtOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9wb3coYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCByZXN1bHQ6IHVpbnQ2NCA9IGEgKiogYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9lcShhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5Ny05OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X2VxKGE6IHVpbnQ2NCwgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEgPT09IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbmUoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X25lKGE6IHVpbnQ2NCwgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCByZXN1bHQgPSBhICE9PSBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X2x0KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOS0xMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9sdChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgcmVzdWx0ID0gYSA8IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9sZShhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUtMTE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfbGUoYTogdWludDY0LCBiOiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEgPD0gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIDw9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9ndChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjEtMTIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfZ3QoYTogdWludDY0LCBiOiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEgPiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgPgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfZ2UoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI3LTEyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X2dlKGE6IHVpbnQ2NCwgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCByZXN1bHQgPSBhID49IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA+PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19pbml0KHJhd192YWx1ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2J5dGVzX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMy0xMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2luaXQocmF3X3ZhbHVlOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5pdG9iKHJhd192YWx1ZSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19hZGQoYTogYnl0ZXMsIGI6IGJ5dGVzLCBwYWRfYV9zaXplOiB1aW50NjQsIHBhZF9iX3NpemU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlc19hZGQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOS0xNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2FkZChhOiBieXRlcywgYjogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCwgcGFkX2Jfc2l6ZTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gNCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9hX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0yCiAgICBiemVybwogICAgZnJhbWVfZGlnIC00CiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQyCiAgICAvLyBjb25zdCBwYWRkZWRCID0gb3AuYnplcm8ocGFkX2Jfc2l6ZSkuY29uY2F0KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IHBhZGRlZEEuY29uY2F0KHBhZGRlZEIpCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyBjb25zdCByZXN1bHRIYXNoID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIHJldHVybiByZXN1bHRIYXNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlc19lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ4LTE0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZXNfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBjb25zdCByZXN1bHQgPSBhID09PSBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlc19uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU0LTE1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZXNfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBhICE9PSBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfYW5kKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlc19hbmQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MC0xNjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2FuZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYyCiAgICAvLyBjb25zdCByZXN1bHQgPSBhLmJpdHdpc2VBbmQoYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19vcihhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZXNfb3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2Ni0xNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX29yKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEuYml0d2lzZU9yKGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfeG9yKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlc194b3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3Mi0xNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX3hvcihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBjb25zdCByZXN1bHQgPSBhLmJpdHdpc2VYb3IoYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19ub3QoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZXNfbm90OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzgtMTc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlc19ub3QoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgwCiAgICAvLyBjb25zdCBwYWRkZWRBID0gb3AuYnplcm8ocGFkX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCByZXN1bHQgPSBwYWRkZWRBLmJpdHdpc2VJbnZlcnQoKQogICAgYn4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBjb25zdCByZXN1bHRIYXNoID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHJldHVybiByZXN1bHRIYXNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hZGQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODYtMTg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FkZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkwCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgKyBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hZGRfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9hZGRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTQtMTk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FkZF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTgKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCArIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9zdWIoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfc3ViOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDItMjAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3N1YihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA2CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgLSBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9zdWJfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9zdWJfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTAtMjExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAtIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBiLQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tdWwoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfbXVsOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgtMjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X211bChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgKiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tdWxfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9tdWxfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjYtMjI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X211bF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAqIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9kaXYoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfZGl2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzQtMjM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2RpdihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgLyBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiLwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9kaXZfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9kaXZfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDItMjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDYKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAvIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBiLwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tb2QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfbW9kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X21vZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgJSBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiJQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tb2RfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9tb2RfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTgtMjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X21vZF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAlIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBiJQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hbmQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfYW5kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjYtMjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FuZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgJiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hbmRfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9hbmRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQtMjc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FuZF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAmIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9vcihhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9vcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgyLTI4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9vcihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg2CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgfCBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODcKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9vcl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1aW50X29yX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkwLTI5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9vcl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTQKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCB8IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTUKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF94b3IoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfeG9yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTgtMjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3hvcihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgXiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF94b3JfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF94b3JfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDYtMzA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3hvcl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCBeIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNC0zMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPT09IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGI9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIyLTMyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9lcV91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gYV9iaWd1aW50ID09PSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgYj09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50X25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjktMzMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gY29uc3QgcmVzdWx0ID0gYV9iaWd1aW50ICE9PSBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9uZV91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludF9uZV91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNy0zMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfbmVfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDAKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGFfYmlndWludCAhPT0gQmlnVWludChiKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIGIhPQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludF9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ0LTM0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGFfYmlndWludCA8IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGI8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0OQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNTItMzUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2x0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU1CiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPCBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgYj4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MC0zNjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPD0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYjw9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbGVfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfbGVfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNjgtMzY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcyCiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPD0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGI+PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludF9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzc2LTM3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozODAKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGFfYmlndWludCA+IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4MQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozODQtMzg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg3CiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg4CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgYjwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg5CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5Mi0zOTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPj0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYj49CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDAtNDAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2dlX3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDA0CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPj0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDUKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9sb2coYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogYnl0ZXMsIGQ6IGJ5dGVzLCBlOiBieXRlcywgZjogYnl0ZXMsIGc6IGJ5dGVzLCBoOiBieXRlcywgaTogYnl0ZXMsIGo6IGJ5dGVzLCBrOiBieXRlcywgbTogYnl0ZXMsIG46IGJ5dGVzKSAtPiB2b2lkOgp2ZXJpZnlfbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDgtNDIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9sb2coCiAgICAvLyAgIGE6IHN0cmluZywKICAgIC8vICAgYjogdWludDY0LAogICAgLy8gICBjOiBieXRlcywKICAgIC8vICAgZDogYnl0ZXMsCiAgICAvLyAgIGU6IEJvb2wsCiAgICAvLyAgIGY6IFN0ciwKICAgIC8vICAgZzogVWludE48NjQ+LAogICAgLy8gICBoOiBVaW50TjwyNTY+LAogICAgLy8gICBpOiBVRml4ZWROeE08MzIsIDg+LAogICAgLy8gICBqOiBVRml4ZWROeE08MjU2LCAxNj4sCiAgICAvLyAgIGs6IGJ5dGVzLAogICAgLy8gICBtOiBieXRlcywKICAgIC8vICAgbjogYnl0ZXMsCiAgICAvLyApIHsKICAgIHByb3RvIDEzIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI4CiAgICAvLyBsb2coYSwgYiwgYywgZF9iaWd1aW50LCBlLCBmLCBnLCBoLCBpLCBqLCBhcmM0X2ssIGFyYzRfbSwgYXJjNF9uKQogICAgZnJhbWVfZGlnIC0xMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xMwogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTExCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMTAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC05CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "PrimitiveOpsContract", - "methods": [ - { - "name": "verify_uint64_init", - "args": [ - { - "type": "byte[]", - "name": "raw_value" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_add", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_sub", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_mul", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_div", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_mod", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_and", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_or", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_xor", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_not", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_lshift", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_rshift", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_pow", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_uint64_eq", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uint64_ne", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uint64_lt", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uint64_le", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uint64_gt", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uint64_ge", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_bytes_init", - "args": [ - { - "type": "uint64", - "name": "raw_value" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_add", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "pad_a_size" - }, - { - "type": "uint64", - "name": "pad_b_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_bytes_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_bytes_and", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_or", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_xor", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bytes_not", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_add", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_add_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_sub", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_sub_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_mul", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_mul_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_div", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_div_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_mod", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_mod_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_and", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_and_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_or", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_or_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_xor", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_xor_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_biguint_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_eq_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_ne_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_lt_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_le_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_gt_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguint_ge_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_log", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "bool", - "name": "e" - }, - { - "type": "string", - "name": "f" - }, - { - "type": "uint64", - "name": "g" - }, - { - "type": "uint256", - "name": "h" - }, - { - "type": "ufixed32x8", - "name": "i" - }, - { - "type": "ufixed256x16", - "name": "j" - }, - { - "type": "byte[]", - "name": "k" - }, - { - "type": "byte[]", - "name": "m" - }, - { - "type": "byte[]", - "name": "n" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json b/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json deleted file mode 100644 index efb8532..0000000 --- a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json +++ /dev/null @@ -1,1636 +0,0 @@ -{ - "name": "PrimitiveOpsContract", - "structs": {}, - "methods": [ - { - "name": "verify_uint64_init", - "args": [ - { - "type": "byte[]", - "name": "raw_value" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_add", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_sub", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_mul", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_div", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_mod", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_and", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_or", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_xor", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_not", - "args": [ - { - "type": "uint64", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_lshift", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_rshift", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_pow", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_eq", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_ne", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_lt", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_le", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_gt", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_uint64_ge", - "args": [ - { - "type": "uint64", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_init", - "args": [ - { - "type": "uint64", - "name": "raw_value" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_add", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "pad_a_size" - }, - { - "type": "uint64", - "name": "pad_b_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_and", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_or", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_xor", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_bytes_not", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "pad_size" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_add", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_add_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_sub", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_sub_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_mul", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_mul_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_div", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_div_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_mod", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_mod_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_and", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_and_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_or", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_or_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_xor", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_xor_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_eq_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_ne_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_lt_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_le_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_gt_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_biguint_ge_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_log", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - }, - { - "type": "byte[]", - "name": "d" - }, - { - "type": "bool", - "name": "e" - }, - { - "type": "string", - "name": "f" - }, - { - "type": "uint64", - "name": "g" - }, - { - "type": "uint256", - "name": "h" - }, - { - "type": "ufixed32x8", - "name": "i" - }, - { - "type": "ufixed256x16", - "name": "j" - }, - { - "type": "byte[]", - "name": "k" - }, - { - "type": "byte[]", - "name": "m" - }, - { - "type": "byte[]", - "name": "n" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 423, - 493, - 524, - 557, - 588, - 621, - 652, - 685, - 716, - 749, - 780, - 813, - 844, - 877, - 911, - 947, - 981, - 1017, - 1051, - 1087, - 1121, - 1157, - 1191, - 1227, - 1261, - 1297, - 1331, - 1367, - 1401, - 1437, - 1471, - 1507, - 1543, - 1579, - 1612, - 1645, - 1689, - 1717, - 1746, - 1775, - 1804, - 1833, - 1862, - 1891, - 1916, - 1941, - 1966, - 1987, - 2012, - 2037, - 2062, - 2087, - 2112, - 2137, - 2162, - 2187 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 2215 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 426, - 496, - 527, - 560, - 591, - 624, - 655, - 688, - 719, - 752, - 783, - 816, - 847, - 880, - 914, - 950, - 984, - 1020, - 1054, - 1090, - 1124, - 1160, - 1194, - 1230, - 1264, - 1300, - 1334, - 1370, - 1404, - 1440, - 1474, - 1510, - 1546, - 1582, - 1615, - 1648, - 1692, - 1720, - 1749, - 1778, - 1807, - 1836, - 1865, - 1894, - 1919, - 1944, - 1969, - 1990, - 2015, - 2040, - 2065, - 2090, - 2115, - 2140, - 2165, - 2190 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANjEKICAgIHB1c2hieXRlc3MgMHg3MjVjNjkyYiAweDE3MzE0NTU5IDB4NTNmMzQ4OTMgMHg4OGM4YjI2OSAweGE0NjRiN2FiIDB4OWM4YjExYjggMHg2ZjQwNjU0ZSAweGVjOWEyOTc0IDB4Yzc5MzcwOGYgMHg3ZGRiNzQ5OSAweGEyMWM0NDNkIDB4NmU3ZmIyMTIgMHhiMDA3ZmNiMCAweDJlYmMyMGQ0IDB4YjA5NTRiNjYgMHhkZDE0MGFlZiAweGFjZTQ3NGRhIDB4YmE2OTQ5OTAgMHg2ZGI1ODFjMCAweDkxYzhkYjg5IDB4ZGJlNzcxNTggMHg5YTBmMjJlMSAweDY0MDMzZDM3IDB4MmE3MjM3YzUgMHhlM2E5NDQ1OCAweDQyZjg3ZjdkIDB4MmI1NTQyYTQgMHg5YmUyZmJlOSAweDFjZDkyNTE1IDB4NjRlMTcwNWMgMHhmMTI3MWM1MCAweDJhYjYzYjcwIDB4ODM0YmI3ZDIgMHg1MzE2MjBkNyAweDNmYjllNzY5IDB4ZmE4ZGIwYmMgMHhhNzJlYTQ4NSAweGI3YjBiYTE5IDB4NzQ0NjBjNDIgMHhhYjMyMDczOCAweDUyYWQ0NjU0IDB4MTAxNTYzOTkgMHgwZjA3NTk1NyAweGJkODQzZGZmIDB4YjM3N2QzODEgMHg4OTc2NzI2NSAweDQ1NmI0YjIzIDB4MzNkMWI4OGMgMHg2YmY5NzNlYSAweDY3Y2Q2YmIyIDB4M2Y1ODgwNWEgMHgxZTEzMDAzOSAweDUwOWRjOTFkIDB4YTU2NGEyMDIgMHgyMzY1MDc2MyAweGUwMDdjMTBiIC8vIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9pbml0KGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfYWRkKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X3N1Yih1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9tdWwodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfZGl2KHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X21vZCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9hbmQodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfb3IodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfeG9yKHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X25vdCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2xzaGlmdCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9yc2hpZnQodWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV91aW50NjRfcG93KHVpbnQ2NCx1aW50NjQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2VxKHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9uZSh1aW50NjQsdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50NjRfbHQodWludDY0LHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludDY0X2xlKHVpbnQ2NCx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnQ2NF9ndCh1aW50NjQsdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50NjRfZ2UodWludDY0LHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfaW5pdCh1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZXNfYWRkKGJ5dGVbXSxieXRlW10sdWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlc19uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlc19hbmQoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9ieXRlc19vcihieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX3hvcihieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2J5dGVzX25vdChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfYWRkKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9hZGRfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9zdWIoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X211bChieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZGl2KGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9kaXZfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9tb2QoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X21vZF91aW50NjQoYnl0ZVtdLHVpbnQ2NClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2FuZChieXRlW10sYnl0ZVtdKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfb3IoYnl0ZVtdLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X29yX3VpbnQ2NChieXRlW10sdWludDY0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfeG9yKGJ5dGVbXSxieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF94b3JfdWludDY0KGJ5dGVbXSx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NChieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X25lKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbmVfdWludDY0KGJ5dGVbXSx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9sdF91aW50NjQoYnl0ZVtdLHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NChieXRlW10sdWludDY0KWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50X2d0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0KGJ5dGVbXSx1aW50NjQpYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRfZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludF9nZV91aW50NjQoYnl0ZVtdLHVpbnQ2NClib29sIiwgbWV0aG9kICJ2ZXJpZnlfbG9nKHN0cmluZyx1aW50NjQsYnl0ZVtdLGJ5dGVbXSxib29sLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfdWludDY0X2luaXRfcm91dGVAMyBtYWluX3ZlcmlmeV91aW50NjRfYWRkX3JvdXRlQDQgbWFpbl92ZXJpZnlfdWludDY0X3N1Yl9yb3V0ZUA1IG1haW5fdmVyaWZ5X3VpbnQ2NF9tdWxfcm91dGVANiBtYWluX3ZlcmlmeV91aW50NjRfZGl2X3JvdXRlQDcgbWFpbl92ZXJpZnlfdWludDY0X21vZF9yb3V0ZUA4IG1haW5fdmVyaWZ5X3VpbnQ2NF9hbmRfcm91dGVAOSBtYWluX3ZlcmlmeV91aW50NjRfb3Jfcm91dGVAMTAgbWFpbl92ZXJpZnlfdWludDY0X3hvcl9yb3V0ZUAxMSBtYWluX3ZlcmlmeV91aW50NjRfbm90X3JvdXRlQDEyIG1haW5fdmVyaWZ5X3VpbnQ2NF9sc2hpZnRfcm91dGVAMTMgbWFpbl92ZXJpZnlfdWludDY0X3JzaGlmdF9yb3V0ZUAxNCBtYWluX3ZlcmlmeV91aW50NjRfcG93X3JvdXRlQDE1IG1haW5fdmVyaWZ5X3VpbnQ2NF9lcV9yb3V0ZUAxNiBtYWluX3ZlcmlmeV91aW50NjRfbmVfcm91dGVAMTcgbWFpbl92ZXJpZnlfdWludDY0X2x0X3JvdXRlQDE4IG1haW5fdmVyaWZ5X3VpbnQ2NF9sZV9yb3V0ZUAxOSBtYWluX3ZlcmlmeV91aW50NjRfZ3Rfcm91dGVAMjAgbWFpbl92ZXJpZnlfdWludDY0X2dlX3JvdXRlQDIxIG1haW5fdmVyaWZ5X2J5dGVzX2luaXRfcm91dGVAMjIgbWFpbl92ZXJpZnlfYnl0ZXNfYWRkX3JvdXRlQDIzIG1haW5fdmVyaWZ5X2J5dGVzX2VxX3JvdXRlQDI0IG1haW5fdmVyaWZ5X2J5dGVzX25lX3JvdXRlQDI1IG1haW5fdmVyaWZ5X2J5dGVzX2FuZF9yb3V0ZUAyNiBtYWluX3ZlcmlmeV9ieXRlc19vcl9yb3V0ZUAyNyBtYWluX3ZlcmlmeV9ieXRlc194b3Jfcm91dGVAMjggbWFpbl92ZXJpZnlfYnl0ZXNfbm90X3JvdXRlQDI5IG1haW5fdmVyaWZ5X2JpZ3VpbnRfYWRkX3JvdXRlQDMwIG1haW5fdmVyaWZ5X2JpZ3VpbnRfYWRkX3VpbnQ2NF9yb3V0ZUAzMSBtYWluX3ZlcmlmeV9iaWd1aW50X3N1Yl9yb3V0ZUAzMiBtYWluX3ZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjRfcm91dGVAMzMgbWFpbl92ZXJpZnlfYmlndWludF9tdWxfcm91dGVAMzQgbWFpbl92ZXJpZnlfYmlndWludF9tdWxfdWludDY0X3JvdXRlQDM1IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZGl2X3JvdXRlQDM2IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZGl2X3VpbnQ2NF9yb3V0ZUAzNyBtYWluX3ZlcmlmeV9iaWd1aW50X21vZF9yb3V0ZUAzOCBtYWluX3ZlcmlmeV9iaWd1aW50X21vZF91aW50NjRfcm91dGVAMzkgbWFpbl92ZXJpZnlfYmlndWludF9hbmRfcm91dGVANDAgbWFpbl92ZXJpZnlfYmlndWludF9hbmRfdWludDY0X3JvdXRlQDQxIG1haW5fdmVyaWZ5X2JpZ3VpbnRfb3Jfcm91dGVANDIgbWFpbl92ZXJpZnlfYmlndWludF9vcl91aW50NjRfcm91dGVANDMgbWFpbl92ZXJpZnlfYmlndWludF94b3Jfcm91dGVANDQgbWFpbl92ZXJpZnlfYmlndWludF94b3JfdWludDY0X3JvdXRlQDQ1IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZXFfcm91dGVANDYgbWFpbl92ZXJpZnlfYmlndWludF9lcV91aW50NjRfcm91dGVANDcgbWFpbl92ZXJpZnlfYmlndWludF9uZV9yb3V0ZUA0OCBtYWluX3ZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NF9yb3V0ZUA0OSBtYWluX3ZlcmlmeV9iaWd1aW50X2x0X3JvdXRlQDUwIG1haW5fdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0X3JvdXRlQDUxIG1haW5fdmVyaWZ5X2JpZ3VpbnRfbGVfcm91dGVANTIgbWFpbl92ZXJpZnlfYmlndWludF9sZV91aW50NjRfcm91dGVANTMgbWFpbl92ZXJpZnlfYmlndWludF9ndF9yb3V0ZUA1NCBtYWluX3ZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NF9yb3V0ZUA1NSBtYWluX3ZlcmlmeV9iaWd1aW50X2dlX3JvdXRlQDU2IG1haW5fdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0X3JvdXRlQDU3IG1haW5fdmVyaWZ5X2xvZ19yb3V0ZUA1OAoKbWFpbl9hZnRlcl9pZl9lbHNlQDY1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9sb2dfcm91dGVANTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9sb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0X3JvdXRlQDU3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9nZV91aW50NjQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2dlX3JvdXRlQDU2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NF9yb3V0ZUA1NToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9ndF9yb3V0ZUA1NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9sZV91aW50NjRfcm91dGVANTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbGVfcm91dGVANTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9sZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0X3JvdXRlQDUxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9sdF91aW50NjQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2x0X3JvdXRlQDUwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X25lX3VpbnQ2NF9yb3V0ZUA0OToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbmVfdWludDY0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9uZV9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9lcV91aW50NjRfcm91dGVANDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfZXFfcm91dGVANDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfeG9yX3VpbnQ2NF9yb3V0ZUA0NToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfeG9yX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfeG9yX3JvdXRlQDQ0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfeG9yCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9vcl91aW50NjRfcm91dGVANDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X29yX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfb3Jfcm91dGVANDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9vcgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NF9yb3V0ZUA0MToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfYW5kX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfYW5kX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfYW5kCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9tb2RfdWludDY0X3JvdXRlQDM5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9tb2RfdWludDY0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9tb2Rfcm91dGVAMzg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9tb2QKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjRfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2Rpdl9yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2RpdgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NF9yb3V0ZUAzNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbXVsX3VpbnQ2NAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRfbXVsX3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRfbXVsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9zdWJfdWludDY0X3JvdXRlQDMzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9zdWJfdWludDY0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludF9zdWJfcm91dGVAMzI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludF9zdWIKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2FkZF91aW50NjRfcm91dGVAMzE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2FkZF91aW50NjQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50X2FkZF9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50X2FkZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX25vdF9yb3V0ZUAyOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX25vdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX3hvcl9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc194b3IKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlc19vcl9yb3V0ZUAyNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc19vcgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX2FuZF9yb3V0ZUAyNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc19hbmQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlc19uZV9yb3V0ZUAyNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlc19uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX2VxX3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZXNfYWRkX3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX2FkZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVzX2luaXRfcm91dGVAMjI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVzX2luaXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfZ2Vfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9ndF9yb3V0ZUAyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X2xlX3JvdXRlQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfbHRfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9uZV9yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X2VxX3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X3Bvd19yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9wb3cKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9yc2hpZnRfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfcnNoaWZ0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfbHNoaWZ0X3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2xzaGlmdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludDY0X25vdF9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9ub3QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF94b3Jfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfeG9yCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50NjRfb3Jfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50NjRfb3IKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9hbmRfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9hbmQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9tb2Rfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9tb2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9kaXZfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9kaXYKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9tdWxfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9tdWwKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9zdWJfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9zdWIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9hZGRfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGV4cG9ydCBjbGFzcyBQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnQ2NF9hZGQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnQ2NF9pbml0X3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBleHBvcnQgY2xhc3MgUHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludDY0X2luaXQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDYxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gZXhwb3J0IGNsYXNzIFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDY1CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfaW5pdChyYXdfdmFsdWU6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTktMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9pbml0KHJhd192YWx1ZTogYnl0ZXMpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5idG9pKHJhd192YWx1ZSkKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9hZGQoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9hZGQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1LTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfYWRkKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhICsgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfc3ViKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfc3ViOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMS0zMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X3N1YihhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSAtIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X211bChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X211bDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9tdWwoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCByZXN1bHQ6IHVpbnQ2NCA9IGEgKiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9kaXYoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9kaXY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzLTQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfZGl2KGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhIC8gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIC8KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbW9kKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfbW9kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0OS01MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X21vZChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSAlIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICAlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X2FuZChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2FuZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTUtNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9hbmQoYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCByZXN1bHQ6IHVpbnQ2NCA9IGEgJiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9vcihhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X29yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X29yKGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhIHwgYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIHwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfeG9yKGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfeG9yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2Ny02OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X3hvcihhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSBeIGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBeCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X25vdChhOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9ub3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczLTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfbm90KGE6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gfmEKICAgIGZyYW1lX2RpZyAtMQogICAgfgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9sc2hpZnQoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9sc2hpZnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5LTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfbHNoaWZ0KGE6IHVpbnQ2NCwgYjogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgcmVzdWx0OiB1aW50NjQgPSBhIDw8IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBzaGwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfcnNoaWZ0KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfcnNoaWZ0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NS04NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X3JzaGlmdChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IHJlc3VsdDogdWludDY0ID0gYSA+PiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgc2hyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X3BvdyhhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X3BvdzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTEtOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9wb3coYTogdWludDY0LCBiOiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCByZXN1bHQ6IHVpbnQ2NCA9IGEgKiogYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9lcShhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5Ny05OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X2VxKGE6IHVpbnQ2NCwgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEgPT09IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfbmUoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAzLTEwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X25lKGE6IHVpbnQ2NCwgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCByZXN1bHQgPSBhICE9PSBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludDY0X2x0KGE6IHVpbnQ2NCwgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV91aW50NjRfbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOS0xMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnQ2NF9sdChhOiB1aW50NjQsIGI6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgcmVzdWx0ID0gYSA8IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9sZShhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUtMTE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfbGUoYTogdWludDY0LCBiOiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEgPD0gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIDw9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnQ2NF9ndChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfdWludDY0X2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjEtMTIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50NjRfZ3QoYTogdWludDY0LCBiOiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEgPiBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgPgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50NjRfZ2UoYTogdWludDY0LCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnQ2NF9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI3LTEyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludDY0X2dlKGE6IHVpbnQ2NCwgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCByZXN1bHQgPSBhID49IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA+PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19pbml0KHJhd192YWx1ZTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2J5dGVzX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMy0xMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2luaXQocmF3X3ZhbHVlOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM1CiAgICAvLyBjb25zdCByZXN1bHQgPSBvcC5pdG9iKHJhd192YWx1ZSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzYKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19hZGQoYTogYnl0ZXMsIGI6IGJ5dGVzLCBwYWRfYV9zaXplOiB1aW50NjQsIHBhZF9iX3NpemU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlc19hZGQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOS0xNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2FkZChhOiBieXRlcywgYjogYnl0ZXMsIHBhZF9hX3NpemU6IHVpbnQ2NCwgcGFkX2Jfc2l6ZTogdWludDY0KTogYnl0ZXMgewogICAgcHJvdG8gNCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY29uc3QgcGFkZGVkQSA9IG9wLmJ6ZXJvKHBhZF9hX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0yCiAgICBiemVybwogICAgZnJhbWVfZGlnIC00CiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQyCiAgICAvLyBjb25zdCBwYWRkZWRCID0gb3AuYnplcm8ocGFkX2Jfc2l6ZSkuY29uY2F0KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGNvbnN0IHJlc3VsdCA9IHBhZGRlZEEuY29uY2F0KHBhZGRlZEIpCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyBjb25zdCByZXN1bHRIYXNoID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIHJldHVybiByZXN1bHRIYXNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlc19lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ4LTE0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZXNfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBjb25zdCByZXN1bHQgPSBhID09PSBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlc19uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU0LTE1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZXNfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBhICE9PSBiCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfYW5kKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlc19hbmQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MC0xNjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX2FuZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYyCiAgICAvLyBjb25zdCByZXN1bHQgPSBhLmJpdHdpc2VBbmQoYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19vcihhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZXNfb3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2Ni0xNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX29yKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGEuYml0d2lzZU9yKGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZXNfeG9yKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlc194b3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3Mi0xNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVzX3hvcihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyBjb25zdCByZXN1bHQgPSBhLmJpdHdpc2VYb3IoYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlc19ub3QoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZXNfbm90OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzgtMTc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlc19ub3QoYTogYnl0ZXMsIHBhZF9zaXplOiB1aW50NjQpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgwCiAgICAvLyBjb25zdCBwYWRkZWRBID0gb3AuYnplcm8ocGFkX3NpemUpLmNvbmNhdChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCByZXN1bHQgPSBwYWRkZWRBLmJpdHdpc2VJbnZlcnQoKQogICAgYn4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBjb25zdCByZXN1bHRIYXNoID0gb3Auc2hhMjU2KHJlc3VsdCkKICAgIHNoYTI1NgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHJldHVybiByZXN1bHRIYXNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hZGQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODYtMTg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FkZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkwCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgKyBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hZGRfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9hZGRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTQtMTk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FkZF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTgKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCArIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9zdWIoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfc3ViOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDItMjAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3N1YihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA2CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgLSBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9zdWJfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9zdWJfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTAtMjExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3N1Yl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAtIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBiLQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tdWwoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfbXVsOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgtMjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X211bChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgKiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tdWxfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9tdWxfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjYtMjI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X211bF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAqIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiKgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9kaXYoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfZGl2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzQtMjM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2RpdihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM4CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgLyBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiLwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzkKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9kaXZfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9kaXZfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDItMjQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2Rpdl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDYKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAvIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBiLwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tb2QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfbW9kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X21vZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU0CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgJSBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiJQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9tb2RfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9tb2RfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTgtMjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X21vZF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAlIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBiJQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hbmQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfYW5kOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjYtMjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FuZChhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgJiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9hbmRfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9hbmRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQtMjc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2FuZF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCAmIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiJgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9vcihhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF9vcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgyLTI4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9vcihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg2CiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgfCBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODcKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9vcl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1aW50X29yX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkwLTI5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9vcl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTQKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCB8IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTUKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF94b3IoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRfeG9yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTgtMjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3hvcihhOiBieXRlcywgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyBjb25zdCByZXN1bHQ6IGJpZ3VpbnQgPSBhX2JpZ3VpbnQgXiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF94b3JfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludF94b3JfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDYtMzA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X3hvcl91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJ5dGVzIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIGNvbnN0IGJfYmlndWludCA9IEJpZ1VpbnQoYikKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIGNvbnN0IHJlc3VsdDogYmlndWludCA9IGFfYmlndWludCBeIGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBiXgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIHJldHVybiBCeXRlcyhyZXN1bHQpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNC0zMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPT09IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGI9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50X2VxX3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIyLTMyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9lcV91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgcmVzdWx0ID0gYV9iaWd1aW50ID09PSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgYj09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50X25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjktMzMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gY29uc3QgcmVzdWx0ID0gYV9iaWd1aW50ICE9PSBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBiIT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9uZV91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludF9uZV91aW50NjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNy0zMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfbmVfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDAKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGFfYmlndWludCAhPT0gQmlnVWludChiKQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIGIhPQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludF9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ0LTM0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGFfYmlndWludCA8IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGI8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0OQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfbHRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNTItMzUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2x0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU1CiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU2CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPCBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgYj4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MC0zNjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPD0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYjw9CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfbGVfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfbGVfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNjgtMzY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2xlX3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcyCiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPD0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGI+PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50X2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludF9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzc2LTM3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludF9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozODAKICAgIC8vIGNvbnN0IHJlc3VsdCA9IGFfYmlndWludCA+IGJfYmlndWludAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4MQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZ3RfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozODQtMzg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2d0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg3CiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg4CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPiBiX2JpZ3VpbnQKICAgIGZyYW1lX2RpZyAtMgogICAgYjwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg5CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludF9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5Mi0zOTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRfZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzk2CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPj0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYj49CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRfZ2VfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDAtNDAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50X2dlX3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBiX2JpZ3VpbnQgPSBCaWdVaW50KGIpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDA0CiAgICAvLyBjb25zdCByZXN1bHQgPSBhX2JpZ3VpbnQgPj0gYl9iaWd1aW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGI8PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDUKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9sb2coYTogYnl0ZXMsIGI6IHVpbnQ2NCwgYzogYnl0ZXMsIGQ6IGJ5dGVzLCBlOiBieXRlcywgZjogYnl0ZXMsIGc6IGJ5dGVzLCBoOiBieXRlcywgaTogYnl0ZXMsIGo6IGJ5dGVzLCBrOiBieXRlcywgbTogYnl0ZXMsIG46IGJ5dGVzKSAtPiB2b2lkOgp2ZXJpZnlfbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3ByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDgtNDIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9sb2coCiAgICAvLyAgIGE6IHN0cmluZywKICAgIC8vICAgYjogdWludDY0LAogICAgLy8gICBjOiBieXRlcywKICAgIC8vICAgZDogYnl0ZXMsCiAgICAvLyAgIGU6IEJvb2wsCiAgICAvLyAgIGY6IFN0ciwKICAgIC8vICAgZzogVWludE48NjQ+LAogICAgLy8gICBoOiBVaW50TjwyNTY+LAogICAgLy8gICBpOiBVRml4ZWROeE08MzIsIDg+LAogICAgLy8gICBqOiBVRml4ZWROeE08MjU2LCAxNj4sCiAgICAvLyAgIGs6IGJ5dGVzLAogICAgLy8gICBtOiBieXRlcywKICAgIC8vICAgbjogYnl0ZXMsCiAgICAvLyApIHsKICAgIHByb3RvIDEzIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI4CiAgICAvLyBsb2coYSwgYiwgYywgZF9iaWd1aW50LCBlLCBmLCBnLCBoLCBpLCBqLCBhcmM0X2ssIGFyYzRfbSwgYXJjNF9uKQogICAgZnJhbWVfZGlnIC0xMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xMwogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTExCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMTAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC05CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmAgQVH3x1AQAxG0EIjII4BHJcaSsEFzFFWQRT80iTBIjIsmkEpGS3qwScixG4BG9AZU4E7JopdATHk3CPBH3bdJkEohxEPQRuf7ISBLAH/LAELrwg1ASwlUtmBN0UCu8ErOR02gS6aUmQBG21gcAEkcjbiQTb53FYBJoPIuEEZAM9NwQqcjfFBOOpRFgEQvh/fQQrVUKkBJvi++kEHNklFQRk4XBcBPEnHFAEKrY7cASDS7fSBFMWINcEP7nnaQT6jbC8BKcupIUEt7C6GQR0RgxCBKsyBzgEUq1GVAQQFWOZBA8HWVcEvYQ9/wSzd9OBBIl2cmUERWtLIwQz0biMBGv5c+oEZ81rsgQ/WIBaBB4TADkEUJ3JHQSlZKICBCNlB2ME4AfBCzYaAI44BuYGzQa0BpsGggZpBlAGNwYeBgkF8AXXBb4FoQWEBWcFSgUtBRAE9ATIBKcEhgRiBD4EGgP4A9QDsgOOA2wDSAMmAwIC4AK8ApoCdgJUAjACDgHqAcgBpwGIAWcBSAEnAQgA5wDIAKcAiABnAEgAAiNDMRkURDEYRDYaAVcCADYaAhc2GgNXAgA2GgRXAgA2GgU2GgY2Ggc2Ggg2Ggk2Ggo2GgtXAgA2GgxXAgA2Gg1XAgCICMgiQzEZFEQxGEQ2GgFXAgA2GgIXiAioKSNPAlQoTFCwIkMxGRREMRhENhoBVwIANhoCVwIAiAh+KSNPAlQoTFCwIkMxGRREMRhENhoBVwIANhoCF4gIVSkjTwJUKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgIKykjTwJUKExQsCJDMRkURDEYRDYaAVcCADYaAheICAIpI08CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIB9gpI08CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiAevKSNPAlQoTFCwIkMxGRREMRhENhoBVwIANhoCVwIAiAeFKSNPAlQoTFCwIkMxGRREMRhENhoBVwIANhoCF4gHXCkjTwJUKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgHMikjTwJUKExQsCJDMRkURDEYRDYaAVcCADYaAheIBwkpI08CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBt8pI08CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiAa2SRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCVwIAiAaJSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCF4gGXUkVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgGMEkVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAheIBgRJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBddJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiAWqSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCVwIAiAV9SRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCF4gFUEkVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgFI0kVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAheIBPdJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBMpJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgIXiASdSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCVwIAiARwSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIANhoCF4gEREkVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgEF0kVFlcGAkxQKExQsCJDMRkURDEYRDYaAVcCADYaAheIA+lJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA7xJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA49JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA2JJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAzUpI08CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAwspI08CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgA2GgMXNhoEF4gC0EkVFlcGAkxQKExQsCJDMRkURDEYRDYaAReIAq1JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXNhoCF4gChCkjTwJUKExQsCJDMRkURDEYRDYaARc2GgIXiAJeKSNPAlQoTFCwIkMxGRREMRhENhoBFzYaAheIAjgpI08CVChMULAiQzEZFEQxGEQ2GgEXNhoCF4gCEikjTwJUKExQsCJDMRkURDEYRDYaARc2GgIXiAHsKSNPAlQoTFCwIkMxGRREMRhENhoBFzYaAheIAcYpI08CVChMULAiQzEZFEQxGEQ2GgEXNhoCF4gBoBYoTFCwIkMxGRREMRhENhoBFzYaAheIAX4WKExQsCJDMRkURDEYRDYaARc2GgIXiAFcFihMULAiQzEZFEQxGEQ2GgEXiAFAFihMULAiQzEZFEQxGEQ2GgEXNhoCF4gBHhYoTFCwIkMxGRREMRhENhoBFzYaAheIAPwWKExQsCJDMRkURDEYRDYaARc2GgIXiADaFihMULAiQzEZFEQxGEQ2GgEXNhoCF4gAuBYoTFCwIkMxGRREMRhENhoBFzYaAheIAJYWKExQsCJDMRkURDEYRDYaARc2GgIXiAB0FihMULAiQzEZFEQxGEQ2GgEXNhoCF4gAUhYoTFCwIkMxGRREMRhENhoBFzYaAheIADAWKExQsCJDMRkURDEYRDYaAVcCAIgAEhYoTFCwIkMxGUD4/jEYFEQiQ4oBAYv/F4mKAgGL/ov/CImKAgGL/ov/CYmKAgGL/ov/C4mKAgGL/ov/ComKAgGL/ov/GImKAgGL/ov/GomKAgGL/ov/GYmKAgGL/ov/G4mKAQGL/xyJigIBi/6L/5CJigIBi/6L/5GJigIBi/6L/5SJigIBi/6L/xKJigIBi/6L/xOJigIBi/6L/wyJigIBi/6L/w6JigIBi/6L/w2JigIBi/6L/w+JigEBi/8WiYoEAYv+r4v8UIv/r4v9UFABiYoCAYv+i/8SiYoCAYv+i/8TiYoCAYv+i/+siYoCAYv+i/+riYoCAYv+i/+tiYoCAYv/r4v+UK4BiYoCAYv+i/+giYoCAYv/Fov+oImKAgGL/ov/oYmKAgGL/xaL/kyhiYoCAYv+i/+jiYoCAYv/Fov+o4mKAgGL/ov/oomKAgGL/xaL/kyiiYoCAYv+i/+qiYoCAYv/Fov+TKqJigIBi/6L/6yJigIBi/8Wi/6siYoCAYv+i/+riYoCAYv/Fov+q4mKAgGL/ov/rYmKAgGL/xaL/q2JigIBi/6L/6iJigIBi/8Wi/6oiYoCAYv+i/+piYoCAYv/Fov+qYmKAgGL/ov/pImKAgGL/xaL/qWJigIBi/6L/6aJigIBi/8Wi/6niYoCAYv+i/+liYoCAYv/Fov+pImKAgGL/ov/p4mKAgGL/xaL/qaJig0Ai/QWi/NMUIv1UIv2UIv3UIv4UIv5UIv6UIv7UIv8UIv9UIv+UIv/ULCJ", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.clear.teal b/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/primitive-ops/data/PrimitiveOpsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/GlobalStateContract.approval.teal b/tests/artifacts/state-ops/data/GlobalStateContract.approval.teal deleted file mode 100644 index 388f609..0000000 --- a/tests/artifacts/state-ops/data/GlobalStateContract.approval.teal +++ /dev/null @@ -1,1057 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 "implicitKeyArc4UintN64" "implicitKeyArc4Str" "implicitKeyArc4Byte" "implicitKeyArc4Bool" "implicitKeyArc4Address" "implicitKeyArc4UintN128" "implicitKeyArc4DynamicBytes" "explicit_key_arc4_uintn64" "explicit_key_arc4_str" "explicit_key_arc4_byte" "explicit_key_arc4_bool" "explicit_key_arc4_address" "explicit_key_arc4_uintn128" "explicit_key_arc4_dynamic_bytes" 0x0000000000000539 0x000548656c6c6f 0x00000010000000000000000000000000 0x000d64796e616d6963206279746573 - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/state-ops/contract.algo.ts:600 - // implicitKeyArc4UintN64 = GlobalState({ initialValue: new UintN64(1337) }) - bytec_1 // "implicitKeyArc4UintN64" - bytec 15 // 0x0000000000000539 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:601 - // implicitKeyArc4Str = GlobalState({ initialValue: new Str('Hello') }) - bytec_2 // "implicitKeyArc4Str" - bytec 16 // 0x000548656c6c6f - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:602 - // implicitKeyArc4Byte = GlobalState({ initialValue: new Byte(0) }) - bytec_3 // "implicitKeyArc4Byte" - pushbytes 0x00 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:603 - // implicitKeyArc4Bool = GlobalState({ initialValue: new Bool(true) }) - bytec 4 // "implicitKeyArc4Bool" - pushbytes 0x80 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:604 - // implicitKeyArc4Address = GlobalState({ initialValue: new Address(Global.creatorAddress) }) - bytec 5 // "implicitKeyArc4Address" - global CreatorAddress - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:605 - // implicitKeyArc4UintN128 = GlobalState({ initialValue: new UintN128(2n ** 100n) }) - bytec 6 // "implicitKeyArc4UintN128" - bytec 17 // 0x00000010000000000000000000000000 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:606 - // implicitKeyArc4DynamicBytes = GlobalState({ initialValue: new DynamicBytes('dynamic bytes') }) - bytec 7 // "implicitKeyArc4DynamicBytes" - bytec 18 // 0x000d64796e616d6963206279746573 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:609 - // arc4UintN64 = GlobalState({ initialValue: new UintN64(1337), key: 'explicit_key_arc4_uintn64' }) - bytec 8 // "explicit_key_arc4_uintn64" - bytec 15 // 0x0000000000000539 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:610 - // arc4Str = GlobalState({ initialValue: new Str('Hello'), key: 'explicit_key_arc4_str' }) - bytec 9 // "explicit_key_arc4_str" - bytec 16 // 0x000548656c6c6f - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:611 - // arc4Byte = GlobalState({ initialValue: new Byte(0), key: 'explicit_key_arc4_byte' }) - bytec 10 // "explicit_key_arc4_byte" - pushbytes 0x00 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:612 - // arc4Bool = GlobalState({ initialValue: new Bool(true), key: 'explicit_key_arc4_bool' }) - bytec 11 // "explicit_key_arc4_bool" - pushbytes 0x80 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:613 - // arc4Address = GlobalState({ initialValue: new Address(Global.creatorAddress), key: 'explicit_key_arc4_address' }) - bytec 12 // "explicit_key_arc4_address" - global CreatorAddress - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:614 - // arc4UintN128 = GlobalState({ initialValue: new UintN128(2n ** 100n), key: 'explicit_key_arc4_uintn128' }) - bytec 13 // "explicit_key_arc4_uintn128" - bytec 17 // 0x00000010000000000000000000000000 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:615 - // arc4DynamicBytes = GlobalState({ initialValue: new DynamicBytes('dynamic bytes'), key: 'explicit_key_arc4_dynamic_bytes' }) - bytec 14 // "explicit_key_arc4_dynamic_bytes" - bytec 18 // 0x000d64796e616d6963206279746573 - app_global_put - -main_after_if_else@2: - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@35 - pushbytess 0x8ab7f8bf 0x86ec24f3 0x69128e90 0x68d590e2 0x44ef0681 0x5c21bd60 0xaac8ecb1 0xa15288ce 0x5f23acfd 0xded75033 0x66279e93 0x096e927b 0x106bc00b 0x6ea3f996 0x3df0a2cd 0x8c4d8f80 0x5ec3116d 0x20f56eee 0x1c149a43 0x8e6a1dde 0x87f0869b 0x026469a1 0xf054ab7b 0xd2e646ef 0xe674a270 0xa87e540d 0x58a7404a 0x257708f7 // method "get_implicit_key_arc4_uintn64()uint64", method "get_implicit_key_arc4_str()string", method "get_implicit_key_arc4_byte()byte", method "get_implicit_key_arc4_bool()bool", method "get_implicit_key_arc4_address()address", method "get_implicit_key_arc4_uintn128()uint128", method "get_implicit_key_arc4_dynamic_bytes()byte[]", method "get_arc4_uintn64()uint64", method "get_arc4_str()string", method "get_arc4_byte()byte", method "get_arc4_bool()bool", method "get_arc4_address()address", method "get_arc4_uintn128()uint128", method "get_arc4_dynamic_bytes()byte[]", method "set_implicit_key_arc4_uintn64(uint64)void", method "set_implicit_key_arc4_str(string)void", method "set_implicit_key_arc4_byte(byte)void", method "set_implicit_key_arc4_bool(bool)void", method "set_implicit_key_arc4_address(address)void", method "set_implicit_key_arc4_uintn128(uint128)void", method "set_implicit_key_arc4_dynamic_bytes(byte[])void", method "set_arc4_uintn64(uint64)void", method "set_arc4_str(string)void", method "set_arc4_byte(byte)void", method "set_arc4_bool(bool)void", method "set_arc4_address(address)void", method "set_arc4_uintn128(uint128)void", method "set_arc4_dynamic_bytes(byte[])void" - txna ApplicationArgs 0 - match main_get_implicit_key_arc4_uintn64_route@5 main_get_implicit_key_arc4_str_route@6 main_get_implicit_key_arc4_byte_route@7 main_get_implicit_key_arc4_bool_route@8 main_get_implicit_key_arc4_address_route@9 main_get_implicit_key_arc4_uintn128_route@10 main_get_implicit_key_arc4_dynamic_bytes_route@11 main_get_arc4_uintn64_route@12 main_get_arc4_str_route@13 main_get_arc4_byte_route@14 main_get_arc4_bool_route@15 main_get_arc4_address_route@16 main_get_arc4_uintn128_route@17 main_get_arc4_dynamic_bytes_route@18 main_set_implicit_key_arc4_uintn64_route@19 main_set_implicit_key_arc4_str_route@20 main_set_implicit_key_arc4_byte_route@21 main_set_implicit_key_arc4_bool_route@22 main_set_implicit_key_arc4_address_route@23 main_set_implicit_key_arc4_uintn128_route@24 main_set_implicit_key_arc4_dynamic_bytes_route@25 main_set_arc4_uintn64_route@26 main_set_arc4_str_route@27 main_set_arc4_byte_route@28 main_set_arc4_bool_route@29 main_set_arc4_address_route@30 main_set_arc4_uintn128_route@31 main_set_arc4_dynamic_bytes_route@32 - -main_after_if_else@39: - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - intc_1 // 0 - return - -main_set_arc4_dynamic_bytes_route@32: - // tests/artifacts/state-ops/contract.algo.ts:756 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:756 - // @arc4.abimethod() - callsub set_arc4_dynamic_bytes - intc_0 // 1 - return - -main_set_arc4_uintn128_route@31: - // tests/artifacts/state-ops/contract.algo.ts:751 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:751 - // @arc4.abimethod() - callsub set_arc4_uintn128 - intc_0 // 1 - return - -main_set_arc4_address_route@30: - // tests/artifacts/state-ops/contract.algo.ts:746 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:746 - // @arc4.abimethod() - callsub set_arc4_address - intc_0 // 1 - return - -main_set_arc4_bool_route@29: - // tests/artifacts/state-ops/contract.algo.ts:741 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:741 - // @arc4.abimethod() - callsub set_arc4_bool - intc_0 // 1 - return - -main_set_arc4_byte_route@28: - // tests/artifacts/state-ops/contract.algo.ts:736 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:736 - // @arc4.abimethod() - callsub set_arc4_byte - intc_0 // 1 - return - -main_set_arc4_str_route@27: - // tests/artifacts/state-ops/contract.algo.ts:731 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:731 - // @arc4.abimethod() - callsub set_arc4_str - intc_0 // 1 - return - -main_set_arc4_uintn64_route@26: - // tests/artifacts/state-ops/contract.algo.ts:726 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:726 - // @arc4.abimethod() - callsub set_arc4_uintn64 - intc_0 // 1 - return - -main_set_implicit_key_arc4_dynamic_bytes_route@25: - // tests/artifacts/state-ops/contract.algo.ts:720 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:720 - // @arc4.abimethod() - callsub set_implicit_key_arc4_dynamic_bytes - intc_0 // 1 - return - -main_set_implicit_key_arc4_uintn128_route@24: - // tests/artifacts/state-ops/contract.algo.ts:715 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:715 - // @arc4.abimethod() - callsub set_implicit_key_arc4_uintn128 - intc_0 // 1 - return - -main_set_implicit_key_arc4_address_route@23: - // tests/artifacts/state-ops/contract.algo.ts:710 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:710 - // @arc4.abimethod() - callsub set_implicit_key_arc4_address - intc_0 // 1 - return - -main_set_implicit_key_arc4_bool_route@22: - // tests/artifacts/state-ops/contract.algo.ts:705 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:705 - // @arc4.abimethod() - callsub set_implicit_key_arc4_bool - intc_0 // 1 - return - -main_set_implicit_key_arc4_byte_route@21: - // tests/artifacts/state-ops/contract.algo.ts:700 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:700 - // @arc4.abimethod() - callsub set_implicit_key_arc4_byte - intc_0 // 1 - return - -main_set_implicit_key_arc4_str_route@20: - // tests/artifacts/state-ops/contract.algo.ts:695 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:695 - // @arc4.abimethod() - callsub set_implicit_key_arc4_str - intc_0 // 1 - return - -main_set_implicit_key_arc4_uintn64_route@19: - // tests/artifacts/state-ops/contract.algo.ts:690 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - // tests/artifacts/state-ops/contract.algo.ts:690 - // @arc4.abimethod() - callsub set_implicit_key_arc4_uintn64 - intc_0 // 1 - return - -main_get_arc4_dynamic_bytes_route@18: - // tests/artifacts/state-ops/contract.algo.ts:684 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_dynamic_bytes - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_uintn128_route@17: - // tests/artifacts/state-ops/contract.algo.ts:679 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_uintn128 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_address_route@16: - // tests/artifacts/state-ops/contract.algo.ts:674 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_address - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_bool_route@15: - // tests/artifacts/state-ops/contract.algo.ts:669 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_bool - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_byte_route@14: - // tests/artifacts/state-ops/contract.algo.ts:664 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_byte - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_str_route@13: - // tests/artifacts/state-ops/contract.algo.ts:659 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_str - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_uintn64_route@12: - // tests/artifacts/state-ops/contract.algo.ts:654 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_arc4_uintn64 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_dynamic_bytes_route@11: - // tests/artifacts/state-ops/contract.algo.ts:648 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_dynamic_bytes - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_uintn128_route@10: - // tests/artifacts/state-ops/contract.algo.ts:643 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_uintn128 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_address_route@9: - // tests/artifacts/state-ops/contract.algo.ts:638 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_address - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_bool_route@8: - // tests/artifacts/state-ops/contract.algo.ts:633 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_bool - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_byte_route@7: - // tests/artifacts/state-ops/contract.algo.ts:628 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_byte - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_str_route@6: - // tests/artifacts/state-ops/contract.algo.ts:623 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_str - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_uintn64_route@5: - // tests/artifacts/state-ops/contract.algo.ts:618 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub get_implicit_key_arc4_uintn64 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@35: - // tests/artifacts/state-ops/contract.algo.ts:598 - // export class GlobalStateContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@39 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_uintn64() -> bytes: -get_implicit_key_arc4_uintn64: - // tests/artifacts/state-ops/contract.algo.ts:618-619 - // @arc4.abimethod() - // get_implicit_key_arc4_uintn64(): UintN64 { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:620 - // return this.implicitKeyArc4UintN64.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:600 - // implicitKeyArc4UintN64 = GlobalState({ initialValue: new UintN64(1337) }) - bytec_1 // "implicitKeyArc4UintN64" - // tests/artifacts/state-ops/contract.algo.ts:620 - // return this.implicitKeyArc4UintN64.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_str() -> bytes: -get_implicit_key_arc4_str: - // tests/artifacts/state-ops/contract.algo.ts:623-624 - // @arc4.abimethod() - // get_implicit_key_arc4_str(): Str { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:625 - // return this.implicitKeyArc4Str.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:601 - // implicitKeyArc4Str = GlobalState({ initialValue: new Str('Hello') }) - bytec_2 // "implicitKeyArc4Str" - // tests/artifacts/state-ops/contract.algo.ts:625 - // return this.implicitKeyArc4Str.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_byte() -> bytes: -get_implicit_key_arc4_byte: - // tests/artifacts/state-ops/contract.algo.ts:628-629 - // @arc4.abimethod() - // get_implicit_key_arc4_byte(): Byte { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:630 - // return this.implicitKeyArc4Byte.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:602 - // implicitKeyArc4Byte = GlobalState({ initialValue: new Byte(0) }) - bytec_3 // "implicitKeyArc4Byte" - // tests/artifacts/state-ops/contract.algo.ts:630 - // return this.implicitKeyArc4Byte.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_bool() -> bytes: -get_implicit_key_arc4_bool: - // tests/artifacts/state-ops/contract.algo.ts:633-634 - // @arc4.abimethod() - // get_implicit_key_arc4_bool(): arc4.Bool { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:635 - // return this.implicitKeyArc4Bool.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:603 - // implicitKeyArc4Bool = GlobalState({ initialValue: new Bool(true) }) - bytec 4 // "implicitKeyArc4Bool" - // tests/artifacts/state-ops/contract.algo.ts:635 - // return this.implicitKeyArc4Bool.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_address() -> bytes: -get_implicit_key_arc4_address: - // tests/artifacts/state-ops/contract.algo.ts:638-639 - // @arc4.abimethod() - // get_implicit_key_arc4_address(): Address { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:640 - // return this.implicitKeyArc4Address.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:604 - // implicitKeyArc4Address = GlobalState({ initialValue: new Address(Global.creatorAddress) }) - bytec 5 // "implicitKeyArc4Address" - // tests/artifacts/state-ops/contract.algo.ts:640 - // return this.implicitKeyArc4Address.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_uintn128() -> bytes: -get_implicit_key_arc4_uintn128: - // tests/artifacts/state-ops/contract.algo.ts:643-644 - // @arc4.abimethod() - // get_implicit_key_arc4_uintn128(): UintN128 { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:645 - // return this.implicitKeyArc4UintN128.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:605 - // implicitKeyArc4UintN128 = GlobalState({ initialValue: new UintN128(2n ** 100n) }) - bytec 6 // "implicitKeyArc4UintN128" - // tests/artifacts/state-ops/contract.algo.ts:645 - // return this.implicitKeyArc4UintN128.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_implicit_key_arc4_dynamic_bytes() -> bytes: -get_implicit_key_arc4_dynamic_bytes: - // tests/artifacts/state-ops/contract.algo.ts:648-649 - // @arc4.abimethod() - // get_implicit_key_arc4_dynamic_bytes(): DynamicBytes { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:650 - // return this.implicitKeyArc4DynamicBytes.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:606 - // implicitKeyArc4DynamicBytes = GlobalState({ initialValue: new DynamicBytes('dynamic bytes') }) - bytec 7 // "implicitKeyArc4DynamicBytes" - // tests/artifacts/state-ops/contract.algo.ts:650 - // return this.implicitKeyArc4DynamicBytes.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_uintn64() -> bytes: -get_arc4_uintn64: - // tests/artifacts/state-ops/contract.algo.ts:654-655 - // @arc4.abimethod() - // get_arc4_uintn64(): UintN64 { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:656 - // return this.arc4UintN64.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:609 - // arc4UintN64 = GlobalState({ initialValue: new UintN64(1337), key: 'explicit_key_arc4_uintn64' }) - bytec 8 // "explicit_key_arc4_uintn64" - // tests/artifacts/state-ops/contract.algo.ts:656 - // return this.arc4UintN64.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_str() -> bytes: -get_arc4_str: - // tests/artifacts/state-ops/contract.algo.ts:659-660 - // @arc4.abimethod() - // get_arc4_str(): Str { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:661 - // return this.arc4Str.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:610 - // arc4Str = GlobalState({ initialValue: new Str('Hello'), key: 'explicit_key_arc4_str' }) - bytec 9 // "explicit_key_arc4_str" - // tests/artifacts/state-ops/contract.algo.ts:661 - // return this.arc4Str.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_byte() -> bytes: -get_arc4_byte: - // tests/artifacts/state-ops/contract.algo.ts:664-665 - // @arc4.abimethod() - // get_arc4_byte(): Byte { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:666 - // return this.arc4Byte.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:611 - // arc4Byte = GlobalState({ initialValue: new Byte(0), key: 'explicit_key_arc4_byte' }) - bytec 10 // "explicit_key_arc4_byte" - // tests/artifacts/state-ops/contract.algo.ts:666 - // return this.arc4Byte.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_bool() -> bytes: -get_arc4_bool: - // tests/artifacts/state-ops/contract.algo.ts:669-670 - // @arc4.abimethod() - // get_arc4_bool(): arc4.Bool { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:671 - // return this.arc4Bool.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:612 - // arc4Bool = GlobalState({ initialValue: new Bool(true), key: 'explicit_key_arc4_bool' }) - bytec 11 // "explicit_key_arc4_bool" - // tests/artifacts/state-ops/contract.algo.ts:671 - // return this.arc4Bool.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_address() -> bytes: -get_arc4_address: - // tests/artifacts/state-ops/contract.algo.ts:674-675 - // @arc4.abimethod() - // get_arc4_address(): Address { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:676 - // return this.arc4Address.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:613 - // arc4Address = GlobalState({ initialValue: new Address(Global.creatorAddress), key: 'explicit_key_arc4_address' }) - bytec 12 // "explicit_key_arc4_address" - // tests/artifacts/state-ops/contract.algo.ts:676 - // return this.arc4Address.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_uintn128() -> bytes: -get_arc4_uintn128: - // tests/artifacts/state-ops/contract.algo.ts:679-680 - // @arc4.abimethod() - // get_arc4_uintn128(): UintN128 { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:681 - // return this.arc4UintN128.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:614 - // arc4UintN128 = GlobalState({ initialValue: new UintN128(2n ** 100n), key: 'explicit_key_arc4_uintn128' }) - bytec 13 // "explicit_key_arc4_uintn128" - // tests/artifacts/state-ops/contract.algo.ts:681 - // return this.arc4UintN128.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.get_arc4_dynamic_bytes() -> bytes: -get_arc4_dynamic_bytes: - // tests/artifacts/state-ops/contract.algo.ts:684-685 - // @arc4.abimethod() - // get_arc4_dynamic_bytes(): DynamicBytes { - proto 0 1 - // tests/artifacts/state-ops/contract.algo.ts:686 - // return this.arc4DynamicBytes.value - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:615 - // arc4DynamicBytes = GlobalState({ initialValue: new DynamicBytes('dynamic bytes'), key: 'explicit_key_arc4_dynamic_bytes' }) - bytec 14 // "explicit_key_arc4_dynamic_bytes" - // tests/artifacts/state-ops/contract.algo.ts:686 - // return this.arc4DynamicBytes.value - app_global_get_ex - assert // check GlobalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_uintn64(value: bytes) -> void: -set_implicit_key_arc4_uintn64: - // tests/artifacts/state-ops/contract.algo.ts:690-691 - // @arc4.abimethod() - // set_implicit_key_arc4_uintn64(value: UintN64) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:600 - // implicitKeyArc4UintN64 = GlobalState({ initialValue: new UintN64(1337) }) - bytec_1 // "implicitKeyArc4UintN64" - // tests/artifacts/state-ops/contract.algo.ts:692 - // this.implicitKeyArc4UintN64.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_str(value: bytes) -> void: -set_implicit_key_arc4_str: - // tests/artifacts/state-ops/contract.algo.ts:695-696 - // @arc4.abimethod() - // set_implicit_key_arc4_str(value: Str) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:601 - // implicitKeyArc4Str = GlobalState({ initialValue: new Str('Hello') }) - bytec_2 // "implicitKeyArc4Str" - // tests/artifacts/state-ops/contract.algo.ts:697 - // this.implicitKeyArc4Str.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_byte(value: bytes) -> void: -set_implicit_key_arc4_byte: - // tests/artifacts/state-ops/contract.algo.ts:700-701 - // @arc4.abimethod() - // set_implicit_key_arc4_byte(value: Byte) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:602 - // implicitKeyArc4Byte = GlobalState({ initialValue: new Byte(0) }) - bytec_3 // "implicitKeyArc4Byte" - // tests/artifacts/state-ops/contract.algo.ts:702 - // this.implicitKeyArc4Byte.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_bool(value: bytes) -> void: -set_implicit_key_arc4_bool: - // tests/artifacts/state-ops/contract.algo.ts:705-706 - // @arc4.abimethod() - // set_implicit_key_arc4_bool(value: Bool) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:603 - // implicitKeyArc4Bool = GlobalState({ initialValue: new Bool(true) }) - bytec 4 // "implicitKeyArc4Bool" - // tests/artifacts/state-ops/contract.algo.ts:707 - // this.implicitKeyArc4Bool.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_address(value: bytes) -> void: -set_implicit_key_arc4_address: - // tests/artifacts/state-ops/contract.algo.ts:710-711 - // @arc4.abimethod() - // set_implicit_key_arc4_address(value: Address) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:604 - // implicitKeyArc4Address = GlobalState({ initialValue: new Address(Global.creatorAddress) }) - bytec 5 // "implicitKeyArc4Address" - // tests/artifacts/state-ops/contract.algo.ts:712 - // this.implicitKeyArc4Address.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_uintn128(value: bytes) -> void: -set_implicit_key_arc4_uintn128: - // tests/artifacts/state-ops/contract.algo.ts:715-716 - // @arc4.abimethod() - // set_implicit_key_arc4_uintn128(value: UintN128) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:605 - // implicitKeyArc4UintN128 = GlobalState({ initialValue: new UintN128(2n ** 100n) }) - bytec 6 // "implicitKeyArc4UintN128" - // tests/artifacts/state-ops/contract.algo.ts:717 - // this.implicitKeyArc4UintN128.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_implicit_key_arc4_dynamic_bytes(value: bytes) -> void: -set_implicit_key_arc4_dynamic_bytes: - // tests/artifacts/state-ops/contract.algo.ts:720-721 - // @arc4.abimethod() - // set_implicit_key_arc4_dynamic_bytes(value: DynamicBytes) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:606 - // implicitKeyArc4DynamicBytes = GlobalState({ initialValue: new DynamicBytes('dynamic bytes') }) - bytec 7 // "implicitKeyArc4DynamicBytes" - // tests/artifacts/state-ops/contract.algo.ts:722 - // this.implicitKeyArc4DynamicBytes.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_uintn64(value: bytes) -> void: -set_arc4_uintn64: - // tests/artifacts/state-ops/contract.algo.ts:726-727 - // @arc4.abimethod() - // set_arc4_uintn64(value: UintN64) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:609 - // arc4UintN64 = GlobalState({ initialValue: new UintN64(1337), key: 'explicit_key_arc4_uintn64' }) - bytec 8 // "explicit_key_arc4_uintn64" - // tests/artifacts/state-ops/contract.algo.ts:728 - // this.arc4UintN64.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_str(value: bytes) -> void: -set_arc4_str: - // tests/artifacts/state-ops/contract.algo.ts:731-732 - // @arc4.abimethod() - // set_arc4_str(value: Str) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:610 - // arc4Str = GlobalState({ initialValue: new Str('Hello'), key: 'explicit_key_arc4_str' }) - bytec 9 // "explicit_key_arc4_str" - // tests/artifacts/state-ops/contract.algo.ts:733 - // this.arc4Str.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_byte(value: bytes) -> void: -set_arc4_byte: - // tests/artifacts/state-ops/contract.algo.ts:736-737 - // @arc4.abimethod() - // set_arc4_byte(value: Byte) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:611 - // arc4Byte = GlobalState({ initialValue: new Byte(0), key: 'explicit_key_arc4_byte' }) - bytec 10 // "explicit_key_arc4_byte" - // tests/artifacts/state-ops/contract.algo.ts:738 - // this.arc4Byte.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_bool(value: bytes) -> void: -set_arc4_bool: - // tests/artifacts/state-ops/contract.algo.ts:741-742 - // @arc4.abimethod() - // set_arc4_bool(value: Bool) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:612 - // arc4Bool = GlobalState({ initialValue: new Bool(true), key: 'explicit_key_arc4_bool' }) - bytec 11 // "explicit_key_arc4_bool" - // tests/artifacts/state-ops/contract.algo.ts:743 - // this.arc4Bool.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_address(value: bytes) -> void: -set_arc4_address: - // tests/artifacts/state-ops/contract.algo.ts:746-747 - // @arc4.abimethod() - // set_arc4_address(value: Address) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:613 - // arc4Address = GlobalState({ initialValue: new Address(Global.creatorAddress), key: 'explicit_key_arc4_address' }) - bytec 12 // "explicit_key_arc4_address" - // tests/artifacts/state-ops/contract.algo.ts:748 - // this.arc4Address.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_uintn128(value: bytes) -> void: -set_arc4_uintn128: - // tests/artifacts/state-ops/contract.algo.ts:751-752 - // @arc4.abimethod() - // set_arc4_uintn128(value: UintN128) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:614 - // arc4UintN128 = GlobalState({ initialValue: new UintN128(2n ** 100n), key: 'explicit_key_arc4_uintn128' }) - bytec 13 // "explicit_key_arc4_uintn128" - // tests/artifacts/state-ops/contract.algo.ts:753 - // this.arc4UintN128.value = value - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::GlobalStateContract.set_arc4_dynamic_bytes(value: bytes) -> void: -set_arc4_dynamic_bytes: - // tests/artifacts/state-ops/contract.algo.ts:756-757 - // @arc4.abimethod() - // set_arc4_dynamic_bytes(value: DynamicBytes) { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:615 - // arc4DynamicBytes = GlobalState({ initialValue: new DynamicBytes('dynamic bytes'), key: 'explicit_key_arc4_dynamic_bytes' }) - bytec 14 // "explicit_key_arc4_dynamic_bytes" - // tests/artifacts/state-ops/contract.algo.ts:758 - // this.arc4DynamicBytes.value = value - frame_dig -1 - app_global_put - retsub diff --git a/tests/artifacts/state-ops/data/GlobalStateContract.arc32.json b/tests/artifacts/state-ops/data/GlobalStateContract.arc32.json deleted file mode 100644 index 13f3b75..0000000 --- a/tests/artifacts/state-ops/data/GlobalStateContract.arc32.json +++ /dev/null @@ -1,528 +0,0 @@ -{ - "hints": { - "get_implicit_key_arc4_uintn64()uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_str()string": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_byte()byte": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_bool()bool": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_address()address": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_uintn128()uint128": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_dynamic_bytes()byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_uintn64()uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_str()string": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_byte()byte": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_bool()bool": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_address()address": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_uintn128()uint128": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_dynamic_bytes()byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_uintn64(uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_str(string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_byte(byte)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_bool(bool)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_address(address)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_uintn128(uint128)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_implicit_key_arc4_dynamic_bytes(byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_uintn64(uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_str(string)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_byte(byte)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_bool(bool)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_address(address)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_uintn128(uint128)void": { - "call_config": { - "no_op": "CALL" - } - }, - "set_arc4_dynamic_bytes(byte[])void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImltcGxpY2l0S2V5QXJjNFVpbnRONjQiICJpbXBsaWNpdEtleUFyYzRTdHIiICJpbXBsaWNpdEtleUFyYzRCeXRlIiAiaW1wbGljaXRLZXlBcmM0Qm9vbCIgImltcGxpY2l0S2V5QXJjNEFkZHJlc3MiICJpbXBsaWNpdEtleUFyYzRVaW50TjEyOCIgImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIgImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQiICJleHBsaWNpdF9rZXlfYXJjNF9zdHIiICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIiAiZXhwbGljaXRfa2V5X2FyYzRfYm9vbCIgImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCIgImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiIDB4MDAwMDAwMDAwMDAwMDUzOSAweDAwMDU0ODY1NmM2YzZmIDB4MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDAKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnRONjQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnRONjQoMTMzNykgfSkKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0S2V5QXJjNFVpbnRONjQiCiAgICBieXRlYyAxNSAvLyAweDAwMDAwMDAwMDAwMDA1MzkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAxCiAgICAvLyBpbXBsaWNpdEtleUFyYzRTdHIgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFN0cignSGVsbG8nKSB9KQogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRLZXlBcmM0U3RyIgogICAgYnl0ZWMgMTYgLy8gMHgwMDA1NDg2NTZjNmM2ZgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDIKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJ5dGUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJ5dGUoMCkgfSkKICAgIGJ5dGVjXzMgLy8gImltcGxpY2l0S2V5QXJjNEJ5dGUiCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSkgfSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDQKICAgIC8vIGltcGxpY2l0S2V5QXJjNEFkZHJlc3MgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKSB9KQogICAgYnl0ZWMgNSAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnROMTI4ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKSB9KQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRLZXlBcmM0VWludE4xMjgiCiAgICBieXRlYyAxNyAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwNgogICAgLy8gaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKSB9KQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzIgogICAgYnl0ZWMgMTggLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjA5CiAgICAvLyBhcmM0VWludE42NCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE42NCgxMzM3KSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCcgfSkKICAgIGJ5dGVjIDggLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQiCiAgICBieXRlYyAxNSAvLyAweDAwMDAwMDAwMDAwMDA1MzkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEwCiAgICAvLyBhcmM0U3RyID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBTdHIoJ0hlbGxvJyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3N0cicgfSkKICAgIGJ5dGVjIDkgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0ciIKICAgIGJ5dGVjIDE2IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjExCiAgICAvLyBhcmM0Qnl0ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQnl0ZSgwKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYnl0ZScgfSkKICAgIGJ5dGVjIDEwIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEyCiAgICAvLyBhcmM0Qm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQm9vbCh0cnVlKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDExIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEzCiAgICAvLyBhcmM0QWRkcmVzcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzJyB9KQogICAgYnl0ZWMgMTIgLy8gImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE0CiAgICAvLyBhcmM0VWludE4xMjggPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnROMTI4KDJuICoqIDEwMG4pLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCcgfSkKICAgIGJ5dGVjIDEzIC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCIKICAgIGJ5dGVjIDE3IC8vIDB4MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE1CiAgICAvLyBhcmM0RHluYW1pY0J5dGVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcycgfSkKICAgIGJ5dGVjIDE0IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgYnl0ZWMgMTggLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMzUKICAgIHB1c2hieXRlc3MgMHg4YWI3ZjhiZiAweDg2ZWMyNGYzIDB4NjkxMjhlOTAgMHg2OGQ1OTBlMiAweDQ0ZWYwNjgxIDB4NWMyMWJkNjAgMHhhYWM4ZWNiMSAweGExNTI4OGNlIDB4NWYyM2FjZmQgMHhkZWQ3NTAzMyAweDY2Mjc5ZTkzIDB4MDk2ZTkyN2IgMHgxMDZiYzAwYiAweDZlYTNmOTk2IDB4M2RmMGEyY2QgMHg4YzRkOGY4MCAweDVlYzMxMTZkIDB4MjBmNTZlZWUgMHgxYzE0OWE0MyAweDhlNmExZGRlIDB4ODdmMDg2OWIgMHgwMjY0NjlhMSAweGYwNTRhYjdiIDB4ZDJlNjQ2ZWYgMHhlNjc0YTI3MCAweGE4N2U1NDBkIDB4NThhNzQwNGEgMHgyNTc3MDhmNyAvLyBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0KCl1aW50NjQiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoKXN0cmluZyIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoKWJ5dGUiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sKClib29sIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcygpYWRkcmVzcyIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KCl1aW50MTI4IiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcygpYnl0ZVtdIiwgbWV0aG9kICJnZXRfYXJjNF91aW50bjY0KCl1aW50NjQiLCBtZXRob2QgImdldF9hcmM0X3N0cigpc3RyaW5nIiwgbWV0aG9kICJnZXRfYXJjNF9ieXRlKClieXRlIiwgbWV0aG9kICJnZXRfYXJjNF9ib29sKClib29sIiwgbWV0aG9kICJnZXRfYXJjNF9hZGRyZXNzKClhZGRyZXNzIiwgbWV0aG9kICJnZXRfYXJjNF91aW50bjEyOCgpdWludDEyOCIsIG1ldGhvZCAiZ2V0X2FyYzRfZHluYW1pY19ieXRlcygpYnl0ZVtdIiwgbWV0aG9kICJzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cihzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYnl0ZSl2b2lkIiwgbWV0aG9kICJzZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChib29sKXZvaWQiLCBtZXRob2QgInNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KHVpbnQxMjgpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInNldF9hcmM0X3VpbnRuNjQodWludDY0KXZvaWQiLCBtZXRob2QgInNldF9hcmM0X3N0cihzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfYnl0ZShieXRlKXZvaWQiLCBtZXRob2QgInNldF9hcmM0X2Jvb2woYm9vbCl2b2lkIiwgbWV0aG9kICJzZXRfYXJjNF9hZGRyZXNzKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfdWludG4xMjgodWludDEyOCl2b2lkIiwgbWV0aG9kICJzZXRfYXJjNF9keW5hbWljX2J5dGVzKGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NF9yb3V0ZUA1IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cl9yb3V0ZUA2IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANyBtYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sX3JvdXRlQDggbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUA5IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDEwIG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMTEgbWFpbl9nZXRfYXJjNF91aW50bjY0X3JvdXRlQDEyIG1haW5fZ2V0X2FyYzRfc3RyX3JvdXRlQDEzIG1haW5fZ2V0X2FyYzRfYnl0ZV9yb3V0ZUAxNCBtYWluX2dldF9hcmM0X2Jvb2xfcm91dGVAMTUgbWFpbl9nZXRfYXJjNF9hZGRyZXNzX3JvdXRlQDE2IG1haW5fZ2V0X2FyYzRfdWludG4xMjhfcm91dGVAMTcgbWFpbl9nZXRfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDE4IG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjRfcm91dGVAMTkgbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyX3JvdXRlQDIwIG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVAMjEgbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbF9yb3V0ZUAyMiBtYWluX3NldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzX3JvdXRlQDIzIG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDI0IG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMjUgbWFpbl9zZXRfYXJjNF91aW50bjY0X3JvdXRlQDI2IG1haW5fc2V0X2FyYzRfc3RyX3JvdXRlQDI3IG1haW5fc2V0X2FyYzRfYnl0ZV9yb3V0ZUAyOCBtYWluX3NldF9hcmM0X2Jvb2xfcm91dGVAMjkgbWFpbl9zZXRfYXJjNF9hZGRyZXNzX3JvdXRlQDMwIG1haW5fc2V0X2FyYzRfdWludG4xMjhfcm91dGVAMzEgbWFpbl9zZXRfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDMyCgptYWluX2FmdGVyX2lmX2Vsc2VAMzk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9zZXRfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X2R5bmFtaWNfYnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2FyYzRfdWludG4xMjhfcm91dGVAMzE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2FyYzRfdWludG4xMjgKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2FyYzRfYWRkcmVzc19yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfYXJjNF9hZGRyZXNzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9hcmM0X2Jvb2xfcm91dGVAMjk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2FyYzRfYm9vbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYXJjNF9ieXRlX3JvdXRlQDI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X2J5dGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2FyYzRfc3RyX3JvdXRlQDI3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X3N0cgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYXJjNF91aW50bjY0X3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X3VpbnRuNjQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMjU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUAyMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbF9yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZV9yb3V0ZUAyMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyX3JvdXRlQDIwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2OTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjRfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfZHluYW1pY19ieXRlcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXJjNF91aW50bjEyOF9yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfdWludG4xMjgKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfYWRkcmVzc19yb3V0ZUAxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfYWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXJjNF9ib29sX3JvdXRlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYXJjNF9ib29sCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X2J5dGVfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hcmM0X2J5dGUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfc3RyX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYXJjNF9zdHIKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfdWludG42NF9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfdWludG42NAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG4xMjgKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3Nfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2xfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2wKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDM5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NCgpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTgtNjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQoKTogVWludE42NCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnRONjQudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAwCiAgICAvLyBpbXBsaWNpdEtleUFyYzRVaW50TjY0ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBVaW50TjY0KDEzMzcpIH0pCiAgICBieXRlY18xIC8vICJpbXBsaWNpdEtleUFyYzRVaW50TjY0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyMAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NC52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyKCkgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjIzLTYyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoKTogU3RyIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyNQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0U3RyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwMQogICAgLy8gaW1wbGljaXRLZXlBcmM0U3RyID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBTdHIoJ0hlbGxvJykgfSkKICAgIGJ5dGVjXzIgLy8gImltcGxpY2l0S2V5QXJjNFN0ciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjUKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNFN0ci52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSgpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjgtNjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoKTogQnl0ZSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEJ5dGUudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAyCiAgICAvLyBpbXBsaWNpdEtleUFyYzRCeXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBCeXRlKDApIH0pCiAgICBieXRlY18zIC8vICJpbXBsaWNpdEtleUFyYzRCeXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzMAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0Qnl0ZS52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbCgpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzMtNjM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2woKTogYXJjNC5Cb29sIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzNQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0Qm9vbC52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSkgfSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjM1CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRCb29sLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKCkgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzOC02MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcygpOiBBZGRyZXNzIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0MAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDQKICAgIC8vIGltcGxpY2l0S2V5QXJjNEFkZHJlc3MgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKSB9KQogICAgYnl0ZWMgNSAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NDAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KCkgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NDMtNjQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KCk6IFVpbnROMTI4IHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0NQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjA1CiAgICAvLyBpbXBsaWNpdEtleUFyYzRVaW50TjEyOCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE4xMjgoMm4gKiogMTAwbikgfSkKICAgIGJ5dGVjIDYgLy8gImltcGxpY2l0S2V5QXJjNFVpbnROMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0NQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMoKSAtPiBieXRlczoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjQ4LTY0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzKCk6IER5bmFtaWNCeXRlcyB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDYKICAgIC8vIGltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJykgfSkKICAgIGJ5dGVjIDcgLy8gImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcy52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF91aW50bjY0KCkgLT4gYnl0ZXM6CmdldF9hcmM0X3VpbnRuNjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjU0LTY1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X3VpbnRuNjQoKTogVWludE42NCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTYKICAgIC8vIHJldHVybiB0aGlzLmFyYzRVaW50TjY0LnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwOQogICAgLy8gYXJjNFVpbnRONjQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnRONjQoMTMzNyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQnIH0pCiAgICBieXRlYyA4IC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjY0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1NgogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnRONjQudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfc3RyKCkgLT4gYnl0ZXM6CmdldF9hcmM0X3N0cjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTktNjYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfc3RyKCk6IFN0ciB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIHJldHVybiB0aGlzLmFyYzRTdHIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEwCiAgICAvLyBhcmM0U3RyID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBTdHIoJ0hlbGxvJyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3N0cicgfSkKICAgIGJ5dGVjIDkgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0ciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIHJldHVybiB0aGlzLmFyYzRTdHIudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYnl0ZSgpIC0+IGJ5dGVzOgpnZXRfYXJjNF9ieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY2NC02NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF9ieXRlKCk6IEJ5dGUgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qnl0ZS52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTEKICAgIC8vIGFyYzRCeXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBCeXRlKDApLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9ieXRlJyB9KQogICAgYnl0ZWMgMTAgLy8gImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qnl0ZS52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF9ib29sKCkgLT4gYnl0ZXM6CmdldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY5LTY3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2Jvb2woKTogYXJjNC5Cb29sIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3MQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJvb2wudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEyCiAgICAvLyBhcmM0Qm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQm9vbCh0cnVlKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDExIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3MQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJvb2wudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYWRkcmVzcygpIC0+IGJ5dGVzOgpnZXRfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3NC02NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF9hZGRyZXNzKCk6IEFkZHJlc3MgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Njc2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0QWRkcmVzcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTMKICAgIC8vIGFyYzRBZGRyZXNzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NzYKICAgIC8vIHJldHVybiB0aGlzLmFyYzRBZGRyZXNzLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3VpbnRuMTI4KCkgLT4gYnl0ZXM6CmdldF9hcmM0X3VpbnRuMTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3OS02ODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF91aW50bjEyOCgpOiBVaW50TjEyOCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODEKICAgIC8vIHJldHVybiB0aGlzLmFyYzRVaW50TjEyOC52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTQKICAgIC8vIGFyYzRVaW50TjEyOCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE4xMjgoMm4gKiogMTAwbiksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4JyB9KQogICAgYnl0ZWMgMTMgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY4MQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnROMTI4LnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2R5bmFtaWNfYnl0ZXMoKSAtPiBieXRlczoKZ2V0X2FyYzRfZHluYW1pY19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODQtNjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfZHluYW1pY19ieXRlcygpOiBEeW5hbWljQnl0ZXMgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Njg2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0RHluYW1pY0J5dGVzLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYxNQogICAgLy8gYXJjNER5bmFtaWNCeXRlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMnIH0pCiAgICBieXRlYyAxNCAvLyAiZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODYKICAgIC8vIHJldHVybiB0aGlzLmFyYzREeW5hbWljQnl0ZXMudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2OTAtNjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQodmFsdWU6IFVpbnRONjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwMAogICAgLy8gaW1wbGljaXRLZXlBcmM0VWludE42NCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE42NCgxMzM3KSB9KQogICAgYnl0ZWNfMSAvLyAiaW1wbGljaXRLZXlBcmM0VWludE42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2OTIKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NC52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cih2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Njk1LTY5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIodmFsdWU6IFN0cikgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAxCiAgICAvLyBpbXBsaWNpdEtleUFyYzRTdHIgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFN0cignSGVsbG8nKSB9KQogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRLZXlBcmM0U3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5NwogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzAwLTcwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKHZhbHVlOiBCeXRlKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDIKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJ5dGUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJ5dGUoMCkgfSkKICAgIGJ5dGVjXzMgLy8gImltcGxpY2l0S2V5QXJjNEJ5dGUiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzAyCiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNEJ5dGUudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzA1LTcwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sKHZhbHVlOiBCb29sKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSkgfSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzA3CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNEJvb2wudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzEwLTcxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKHZhbHVlOiBBZGRyZXNzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDQKICAgIC8vIGltcGxpY2l0S2V5QXJjNEFkZHJlc3MgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKSB9KQogICAgYnl0ZWMgNSAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MTIKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcy52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxNS03MTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG4xMjgodmFsdWU6IFVpbnROMTI4KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnROMTI4ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKSB9KQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRLZXlBcmM0VWludE4xMjgiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzE3CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnROMTI4LnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyMC03MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBzZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyh2YWx1ZTogRHluYW1pY0J5dGVzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDYKICAgIC8vIGltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJykgfSkKICAgIGJ5dGVjIDcgLy8gImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MjIKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF91aW50bjY0KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MjYtNzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2FyYzRfdWludG42NCh2YWx1ZTogVWludE42NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjA5CiAgICAvLyBhcmM0VWludE42NCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE42NCgxMzM3KSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCcgfSkKICAgIGJ5dGVjIDggLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzI4CiAgICAvLyB0aGlzLmFyYzRVaW50TjY0LnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9zdHIodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfYXJjNF9zdHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMxLTczMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9hcmM0X3N0cih2YWx1ZTogU3RyKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTAKICAgIC8vIGFyYzRTdHIgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFN0cignSGVsbG8nKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfc3RyJyB9KQogICAgYnl0ZWMgOSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfc3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczMwogICAgLy8gdGhpcy5hcmM0U3RyLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9ieXRlKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MzYtNzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2FyYzRfYnl0ZSh2YWx1ZTogQnl0ZSkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjExCiAgICAvLyBhcmM0Qnl0ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQnl0ZSgwKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYnl0ZScgfSkKICAgIGJ5dGVjIDEwIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczOAogICAgLy8gdGhpcy5hcmM0Qnl0ZS52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2FyYzRfYm9vbCh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQxLTc0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9hcmM0X2Jvb2wodmFsdWU6IEJvb2wpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYxMgogICAgLy8gYXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2Jvb2wnIH0pCiAgICBieXRlYyAxMSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYm9vbCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NDMKICAgIC8vIHRoaXMuYXJjNEJvb2wudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X2FkZHJlc3ModmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc0Ni03NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBzZXRfYXJjNF9hZGRyZXNzKHZhbHVlOiBBZGRyZXNzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTMKICAgIC8vIGFyYzRBZGRyZXNzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NDgKICAgIC8vIHRoaXMuYXJjNEFkZHJlc3MudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X3VpbnRuMTI4KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfdWludG4xMjg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUxLTc1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9hcmM0X3VpbnRuMTI4KHZhbHVlOiBVaW50TjEyOCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE0CiAgICAvLyBhcmM0VWludE4xMjggPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnROMTI4KDJuICoqIDEwMG4pLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCcgfSkKICAgIGJ5dGVjIDEzIC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NTMKICAgIC8vIHRoaXMuYXJjNFVpbnROMTI4LnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9keW5hbWljX2J5dGVzKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfZHluYW1pY19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NTYtNzU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2FyYzRfZHluYW1pY19ieXRlcyh2YWx1ZTogRHluYW1pY0J5dGVzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTUKICAgIC8vIGFyYzREeW5hbWljQnl0ZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IER5bmFtaWNCeXRlcygnZHluYW1pYyBieXRlcycpLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzJyB9KQogICAgYnl0ZWMgMTQgLy8gImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzU4CiAgICAvLyB0aGlzLmFyYzREeW5hbWljQnl0ZXMudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 14, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "arc4Address": { - "type": "bytes", - "key": "explicit_key_arc4_address" - }, - "arc4Bool": { - "type": "bytes", - "key": "explicit_key_arc4_bool" - }, - "arc4Byte": { - "type": "bytes", - "key": "explicit_key_arc4_byte" - }, - "arc4DynamicBytes": { - "type": "bytes", - "key": "explicit_key_arc4_dynamic_bytes" - }, - "arc4Str": { - "type": "bytes", - "key": "explicit_key_arc4_str" - }, - "arc4UintN128": { - "type": "bytes", - "key": "explicit_key_arc4_uintn128" - }, - "arc4UintN64": { - "type": "bytes", - "key": "explicit_key_arc4_uintn64" - }, - "implicitKeyArc4Address": { - "type": "bytes", - "key": "implicitKeyArc4Address" - }, - "implicitKeyArc4Bool": { - "type": "bytes", - "key": "implicitKeyArc4Bool" - }, - "implicitKeyArc4Byte": { - "type": "bytes", - "key": "implicitKeyArc4Byte" - }, - "implicitKeyArc4DynamicBytes": { - "type": "bytes", - "key": "implicitKeyArc4DynamicBytes" - }, - "implicitKeyArc4Str": { - "type": "bytes", - "key": "implicitKeyArc4Str" - }, - "implicitKeyArc4UintN128": { - "type": "bytes", - "key": "implicitKeyArc4UintN128" - }, - "implicitKeyArc4UintN64": { - "type": "bytes", - "key": "implicitKeyArc4UintN64" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "GlobalStateContract", - "methods": [ - { - "name": "get_implicit_key_arc4_uintn64", - "args": [], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "get_implicit_key_arc4_str", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "get_implicit_key_arc4_byte", - "args": [], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "get_implicit_key_arc4_bool", - "args": [], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "get_implicit_key_arc4_address", - "args": [], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "get_implicit_key_arc4_uintn128", - "args": [], - "readonly": false, - "returns": { - "type": "uint128" - } - }, - { - "name": "get_implicit_key_arc4_dynamic_bytes", - "args": [], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "get_arc4_uintn64", - "args": [], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "get_arc4_str", - "args": [], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "get_arc4_byte", - "args": [], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "get_arc4_bool", - "args": [], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "get_arc4_address", - "args": [], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "get_arc4_uintn128", - "args": [], - "readonly": false, - "returns": { - "type": "uint128" - } - }, - { - "name": "get_arc4_dynamic_bytes", - "args": [], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "set_implicit_key_arc4_uintn64", - "args": [ - { - "type": "uint64", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_implicit_key_arc4_str", - "args": [ - { - "type": "string", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_implicit_key_arc4_byte", - "args": [ - { - "type": "byte", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_implicit_key_arc4_bool", - "args": [ - { - "type": "bool", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_implicit_key_arc4_address", - "args": [ - { - "type": "address", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_implicit_key_arc4_uintn128", - "args": [ - { - "type": "uint128", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_implicit_key_arc4_dynamic_bytes", - "args": [ - { - "type": "byte[]", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_uintn64", - "args": [ - { - "type": "uint64", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_str", - "args": [ - { - "type": "string", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_byte", - "args": [ - { - "type": "byte", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_bool", - "args": [ - { - "type": "bool", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_address", - "args": [ - { - "type": "address", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_uintn128", - "args": [ - { - "type": "uint128", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "set_arc4_dynamic_bytes", - "args": [ - { - "type": "byte[]", - "name": "value" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/GlobalStateContract.arc56.json b/tests/artifacts/state-ops/data/GlobalStateContract.arc56.json deleted file mode 100644 index c6988d9..0000000 --- a/tests/artifacts/state-ops/data/GlobalStateContract.arc56.json +++ /dev/null @@ -1,748 +0,0 @@ -{ - "name": "GlobalStateContract", - "structs": {}, - "methods": [ - { - "name": "get_implicit_key_arc4_uintn64", - "args": [], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_str", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_byte", - "args": [], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_bool", - "args": [], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_address", - "args": [], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_uintn128", - "args": [], - "returns": { - "type": "uint128" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_dynamic_bytes", - "args": [], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_uintn64", - "args": [], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_str", - "args": [], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_byte", - "args": [], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_bool", - "args": [], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_address", - "args": [], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_uintn128", - "args": [], - "returns": { - "type": "uint128" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_dynamic_bytes", - "args": [], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_uintn64", - "args": [ - { - "type": "uint64", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_str", - "args": [ - { - "type": "string", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_byte", - "args": [ - { - "type": "byte", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_bool", - "args": [ - { - "type": "bool", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_address", - "args": [ - { - "type": "address", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_uintn128", - "args": [ - { - "type": "uint128", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_implicit_key_arc4_dynamic_bytes", - "args": [ - { - "type": "byte[]", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_uintn64", - "args": [ - { - "type": "uint64", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_str", - "args": [ - { - "type": "string", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_byte", - "args": [ - { - "type": "byte", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_bool", - "args": [ - { - "type": "bool", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_address", - "args": [ - { - "type": "address", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_uintn128", - "args": [ - { - "type": "uint128", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "set_arc4_dynamic_bytes", - "args": [ - { - "type": "byte[]", - "name": "value" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 14 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "implicitKeyArc4UintN64": { - "keyType": "AVMString", - "valueType": "uint64", - "key": "aW1wbGljaXRLZXlBcmM0VWludE42NA==" - }, - "implicitKeyArc4Str": { - "keyType": "AVMString", - "valueType": "string", - "key": "aW1wbGljaXRLZXlBcmM0U3Ry" - }, - "implicitKeyArc4Byte": { - "keyType": "AVMString", - "valueType": "byte", - "key": "aW1wbGljaXRLZXlBcmM0Qnl0ZQ==" - }, - "implicitKeyArc4Bool": { - "keyType": "AVMString", - "valueType": "bool", - "key": "aW1wbGljaXRLZXlBcmM0Qm9vbA==" - }, - "implicitKeyArc4Address": { - "keyType": "AVMString", - "valueType": "address", - "key": "aW1wbGljaXRLZXlBcmM0QWRkcmVzcw==" - }, - "implicitKeyArc4UintN128": { - "keyType": "AVMString", - "valueType": "uint128", - "key": "aW1wbGljaXRLZXlBcmM0VWludE4xMjg=" - }, - "implicitKeyArc4DynamicBytes": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "aW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVz" - }, - "arc4UintN64": { - "keyType": "AVMString", - "valueType": "uint64", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfdWludG42NA==" - }, - "arc4Str": { - "keyType": "AVMString", - "valueType": "string", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfc3Ry" - }, - "arc4Byte": { - "keyType": "AVMString", - "valueType": "byte", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfYnl0ZQ==" - }, - "arc4Bool": { - "keyType": "AVMString", - "valueType": "bool", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfYm9vbA==" - }, - "arc4Address": { - "keyType": "AVMString", - "valueType": "address", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcw==" - }, - "arc4UintN128": { - "keyType": "AVMString", - "valueType": "uint128", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfdWludG4xMjg=" - }, - "arc4DynamicBytes": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcw==" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 687, - 702, - 717, - 732, - 747, - 762, - 777, - 792, - 807, - 822, - 837, - 852, - 867, - 882, - 897, - 913, - 929, - 945, - 961, - 977, - 993, - 1009, - 1025, - 1041, - 1057, - 1073, - 1089, - 1105 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 1126 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 690, - 705, - 720, - 735, - 750, - 765, - 780, - 795, - 810, - 825, - 840, - 855, - 870, - 885, - 900, - 916, - 932, - 948, - 964, - 980, - 996, - 1012, - 1028, - 1044, - 1060, - 1076, - 1092, - 1108 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 1135, - 1143, - 1151, - 1160, - 1169, - 1178, - 1187, - 1196, - 1205, - 1214, - 1223, - 1232, - 1241, - 1250 - ], - "errorMessage": "check GlobalState exists" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImltcGxpY2l0S2V5QXJjNFVpbnRONjQiICJpbXBsaWNpdEtleUFyYzRTdHIiICJpbXBsaWNpdEtleUFyYzRCeXRlIiAiaW1wbGljaXRLZXlBcmM0Qm9vbCIgImltcGxpY2l0S2V5QXJjNEFkZHJlc3MiICJpbXBsaWNpdEtleUFyYzRVaW50TjEyOCIgImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIgImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQiICJleHBsaWNpdF9rZXlfYXJjNF9zdHIiICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIiAiZXhwbGljaXRfa2V5X2FyYzRfYm9vbCIgImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCIgImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiIDB4MDAwMDAwMDAwMDAwMDUzOSAweDAwMDU0ODY1NmM2YzZmIDB4MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDAKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnRONjQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnRONjQoMTMzNykgfSkKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0S2V5QXJjNFVpbnRONjQiCiAgICBieXRlYyAxNSAvLyAweDAwMDAwMDAwMDAwMDA1MzkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAxCiAgICAvLyBpbXBsaWNpdEtleUFyYzRTdHIgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFN0cignSGVsbG8nKSB9KQogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRLZXlBcmM0U3RyIgogICAgYnl0ZWMgMTYgLy8gMHgwMDA1NDg2NTZjNmM2ZgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDIKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJ5dGUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJ5dGUoMCkgfSkKICAgIGJ5dGVjXzMgLy8gImltcGxpY2l0S2V5QXJjNEJ5dGUiCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSkgfSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDQKICAgIC8vIGltcGxpY2l0S2V5QXJjNEFkZHJlc3MgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKSB9KQogICAgYnl0ZWMgNSAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnROMTI4ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKSB9KQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRLZXlBcmM0VWludE4xMjgiCiAgICBieXRlYyAxNyAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwNgogICAgLy8gaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKSB9KQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzIgogICAgYnl0ZWMgMTggLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjA5CiAgICAvLyBhcmM0VWludE42NCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE42NCgxMzM3KSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCcgfSkKICAgIGJ5dGVjIDggLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQiCiAgICBieXRlYyAxNSAvLyAweDAwMDAwMDAwMDAwMDA1MzkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEwCiAgICAvLyBhcmM0U3RyID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBTdHIoJ0hlbGxvJyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3N0cicgfSkKICAgIGJ5dGVjIDkgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0ciIKICAgIGJ5dGVjIDE2IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjExCiAgICAvLyBhcmM0Qnl0ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQnl0ZSgwKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYnl0ZScgfSkKICAgIGJ5dGVjIDEwIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEyCiAgICAvLyBhcmM0Qm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQm9vbCh0cnVlKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDExIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEzCiAgICAvLyBhcmM0QWRkcmVzcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzJyB9KQogICAgYnl0ZWMgMTIgLy8gImV4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MiCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE0CiAgICAvLyBhcmM0VWludE4xMjggPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnROMTI4KDJuICoqIDEwMG4pLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCcgfSkKICAgIGJ5dGVjIDEzIC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCIKICAgIGJ5dGVjIDE3IC8vIDB4MDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE1CiAgICAvLyBhcmM0RHluYW1pY0J5dGVzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcycgfSkKICAgIGJ5dGVjIDE0IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgYnl0ZWMgMTggLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMzUKICAgIHB1c2hieXRlc3MgMHg4YWI3ZjhiZiAweDg2ZWMyNGYzIDB4NjkxMjhlOTAgMHg2OGQ1OTBlMiAweDQ0ZWYwNjgxIDB4NWMyMWJkNjAgMHhhYWM4ZWNiMSAweGExNTI4OGNlIDB4NWYyM2FjZmQgMHhkZWQ3NTAzMyAweDY2Mjc5ZTkzIDB4MDk2ZTkyN2IgMHgxMDZiYzAwYiAweDZlYTNmOTk2IDB4M2RmMGEyY2QgMHg4YzRkOGY4MCAweDVlYzMxMTZkIDB4MjBmNTZlZWUgMHgxYzE0OWE0MyAweDhlNmExZGRlIDB4ODdmMDg2OWIgMHgwMjY0NjlhMSAweGYwNTRhYjdiIDB4ZDJlNjQ2ZWYgMHhlNjc0YTI3MCAweGE4N2U1NDBkIDB4NThhNzQwNGEgMHgyNTc3MDhmNyAvLyBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0KCl1aW50NjQiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoKXN0cmluZyIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoKWJ5dGUiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sKClib29sIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcygpYWRkcmVzcyIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KCl1aW50MTI4IiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcygpYnl0ZVtdIiwgbWV0aG9kICJnZXRfYXJjNF91aW50bjY0KCl1aW50NjQiLCBtZXRob2QgImdldF9hcmM0X3N0cigpc3RyaW5nIiwgbWV0aG9kICJnZXRfYXJjNF9ieXRlKClieXRlIiwgbWV0aG9kICJnZXRfYXJjNF9ib29sKClib29sIiwgbWV0aG9kICJnZXRfYXJjNF9hZGRyZXNzKClhZGRyZXNzIiwgbWV0aG9kICJnZXRfYXJjNF91aW50bjEyOCgpdWludDEyOCIsIG1ldGhvZCAiZ2V0X2FyYzRfZHluYW1pY19ieXRlcygpYnl0ZVtdIiwgbWV0aG9kICJzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cihzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYnl0ZSl2b2lkIiwgbWV0aG9kICJzZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChib29sKXZvaWQiLCBtZXRob2QgInNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KHVpbnQxMjgpdm9pZCIsIG1ldGhvZCAic2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInNldF9hcmM0X3VpbnRuNjQodWludDY0KXZvaWQiLCBtZXRob2QgInNldF9hcmM0X3N0cihzdHJpbmcpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfYnl0ZShieXRlKXZvaWQiLCBtZXRob2QgInNldF9hcmM0X2Jvb2woYm9vbCl2b2lkIiwgbWV0aG9kICJzZXRfYXJjNF9hZGRyZXNzKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0X2FyYzRfdWludG4xMjgodWludDEyOCl2b2lkIiwgbWV0aG9kICJzZXRfYXJjNF9keW5hbWljX2J5dGVzKGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NF9yb3V0ZUA1IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cl9yb3V0ZUA2IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANyBtYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sX3JvdXRlQDggbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUA5IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDEwIG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMTEgbWFpbl9nZXRfYXJjNF91aW50bjY0X3JvdXRlQDEyIG1haW5fZ2V0X2FyYzRfc3RyX3JvdXRlQDEzIG1haW5fZ2V0X2FyYzRfYnl0ZV9yb3V0ZUAxNCBtYWluX2dldF9hcmM0X2Jvb2xfcm91dGVAMTUgbWFpbl9nZXRfYXJjNF9hZGRyZXNzX3JvdXRlQDE2IG1haW5fZ2V0X2FyYzRfdWludG4xMjhfcm91dGVAMTcgbWFpbl9nZXRfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDE4IG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjRfcm91dGVAMTkgbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyX3JvdXRlQDIwIG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVAMjEgbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbF9yb3V0ZUAyMiBtYWluX3NldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzX3JvdXRlQDIzIG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDI0IG1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMjUgbWFpbl9zZXRfYXJjNF91aW50bjY0X3JvdXRlQDI2IG1haW5fc2V0X2FyYzRfc3RyX3JvdXRlQDI3IG1haW5fc2V0X2FyYzRfYnl0ZV9yb3V0ZUAyOCBtYWluX3NldF9hcmM0X2Jvb2xfcm91dGVAMjkgbWFpbl9zZXRfYXJjNF9hZGRyZXNzX3JvdXRlQDMwIG1haW5fc2V0X2FyYzRfdWludG4xMjhfcm91dGVAMzEgbWFpbl9zZXRfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDMyCgptYWluX2FmdGVyX2lmX2Vsc2VAMzk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9zZXRfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X2R5bmFtaWNfYnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2FyYzRfdWludG4xMjhfcm91dGVAMzE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2FyYzRfdWludG4xMjgKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2FyYzRfYWRkcmVzc19yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfYXJjNF9hZGRyZXNzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9hcmM0X2Jvb2xfcm91dGVAMjk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2FyYzRfYm9vbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYXJjNF9ieXRlX3JvdXRlQDI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X2J5dGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2FyYzRfc3RyX3JvdXRlQDI3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X3N0cgogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYXJjNF91aW50bjY0X3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9hcmM0X3VpbnRuNjQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMjU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUAyMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbF9yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZV9yb3V0ZUAyMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyX3JvdXRlQDIwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU5OAogICAgLy8gZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2OTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjRfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBleHBvcnQgY2xhc3MgR2xvYmFsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfZHluYW1pY19ieXRlcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXJjNF91aW50bjEyOF9yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfdWludG4xMjgKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfYWRkcmVzc19yb3V0ZUAxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfYWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXJjNF9ib29sX3JvdXRlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYXJjNF9ib29sCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X2J5dGVfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hcmM0X2J5dGUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfc3RyX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYXJjNF9zdHIKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfdWludG42NF9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2FyYzRfdWludG42NAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG4xMjgKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3Nfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3MKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2xfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2wKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cl9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OTgKICAgIC8vIGV4cG9ydCBjbGFzcyBHbG9iYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDM5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NCgpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTgtNjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQoKTogVWludE42NCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnRONjQudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAwCiAgICAvLyBpbXBsaWNpdEtleUFyYzRVaW50TjY0ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBVaW50TjY0KDEzMzcpIH0pCiAgICBieXRlY18xIC8vICJpbXBsaWNpdEtleUFyYzRVaW50TjY0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyMAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NC52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyKCkgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjIzLTYyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoKTogU3RyIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyNQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0U3RyLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwMQogICAgLy8gaW1wbGljaXRLZXlBcmM0U3RyID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBTdHIoJ0hlbGxvJykgfSkKICAgIGJ5dGVjXzIgLy8gImltcGxpY2l0S2V5QXJjNFN0ciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjUKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNFN0ci52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZSgpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MjgtNjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoKTogQnl0ZSB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEJ5dGUudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAyCiAgICAvLyBpbXBsaWNpdEtleUFyYzRCeXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBCeXRlKDApIH0pCiAgICBieXRlY18zIC8vICJpbXBsaWNpdEtleUFyYzRCeXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzMAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0Qnl0ZS52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbCgpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MzMtNjM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2woKTogYXJjNC5Cb29sIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzNQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0Qm9vbC52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSkgfSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjM1CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRCb29sLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKCkgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzOC02MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcygpOiBBZGRyZXNzIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0MAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDQKICAgIC8vIGltcGxpY2l0S2V5QXJjNEFkZHJlc3MgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKSB9KQogICAgYnl0ZWMgNSAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NDAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KCkgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NDMtNjQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KCk6IFVpbnROMTI4IHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0NQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjA1CiAgICAvLyBpbXBsaWNpdEtleUFyYzRVaW50TjEyOCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE4xMjgoMm4gKiogMTAwbikgfSkKICAgIGJ5dGVjIDYgLy8gImltcGxpY2l0S2V5QXJjNFVpbnROMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY0NQogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMoKSAtPiBieXRlczoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjQ4LTY0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzKCk6IER5bmFtaWNCeXRlcyB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDYKICAgIC8vIGltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJykgfSkKICAgIGJ5dGVjIDcgLy8gImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTAKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcy52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF91aW50bjY0KCkgLT4gYnl0ZXM6CmdldF9hcmM0X3VpbnRuNjQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjU0LTY1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X3VpbnRuNjQoKTogVWludE42NCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTYKICAgIC8vIHJldHVybiB0aGlzLmFyYzRVaW50TjY0LnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwOQogICAgLy8gYXJjNFVpbnRONjQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnRONjQoMTMzNyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQnIH0pCiAgICBieXRlYyA4IC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjY0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY1NgogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnRONjQudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfc3RyKCkgLT4gYnl0ZXM6CmdldF9hcmM0X3N0cjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NTktNjYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfc3RyKCk6IFN0ciB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIHJldHVybiB0aGlzLmFyYzRTdHIudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEwCiAgICAvLyBhcmM0U3RyID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBTdHIoJ0hlbGxvJyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3N0cicgfSkKICAgIGJ5dGVjIDkgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0ciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIHJldHVybiB0aGlzLmFyYzRTdHIudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYnl0ZSgpIC0+IGJ5dGVzOgpnZXRfYXJjNF9ieXRlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY2NC02NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF9ieXRlKCk6IEJ5dGUgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qnl0ZS52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTEKICAgIC8vIGFyYzRCeXRlID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBCeXRlKDApLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9ieXRlJyB9KQogICAgYnl0ZWMgMTAgLy8gImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qnl0ZS52YWx1ZQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5nZXRfYXJjNF9ib29sKCkgLT4gYnl0ZXM6CmdldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjY5LTY3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2Jvb2woKTogYXJjNC5Cb29sIHsKICAgIHByb3RvIDAgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3MQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJvb2wudmFsdWUKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEyCiAgICAvLyBhcmM0Qm9vbCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQm9vbCh0cnVlKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDExIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3MQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJvb2wudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYWRkcmVzcygpIC0+IGJ5dGVzOgpnZXRfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3NC02NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF9hZGRyZXNzKCk6IEFkZHJlc3MgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Njc2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0QWRkcmVzcy52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTMKICAgIC8vIGFyYzRBZGRyZXNzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NzYKICAgIC8vIHJldHVybiB0aGlzLmFyYzRBZGRyZXNzLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3VpbnRuMTI4KCkgLT4gYnl0ZXM6CmdldF9hcmM0X3VpbnRuMTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3OS02ODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF91aW50bjEyOCgpOiBVaW50TjEyOCB7CiAgICBwcm90byAwIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODEKICAgIC8vIHJldHVybiB0aGlzLmFyYzRVaW50TjEyOC52YWx1ZQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTQKICAgIC8vIGFyYzRVaW50TjEyOCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE4xMjgoMm4gKiogMTAwbiksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4JyB9KQogICAgYnl0ZWMgMTMgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY4MQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnROMTI4LnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2R5bmFtaWNfYnl0ZXMoKSAtPiBieXRlczoKZ2V0X2FyYzRfZHluYW1pY19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODQtNjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfZHluYW1pY19ieXRlcygpOiBEeW5hbWljQnl0ZXMgewogICAgcHJvdG8gMCAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Njg2CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0RHluYW1pY0J5dGVzLnZhbHVlCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYxNQogICAgLy8gYXJjNER5bmFtaWNCeXRlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMnIH0pCiAgICBieXRlYyAxNCAvLyAiZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2ODYKICAgIC8vIHJldHVybiB0aGlzLmFyYzREeW5hbWljQnl0ZXMudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2OTAtNjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQodmFsdWU6IFVpbnRONjQpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwMAogICAgLy8gaW1wbGljaXRLZXlBcmM0VWludE42NCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE42NCgxMzM3KSB9KQogICAgYnl0ZWNfMSAvLyAiaW1wbGljaXRLZXlBcmM0VWludE42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2OTIKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NC52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cih2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Njk1LTY5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIodmFsdWU6IFN0cikgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjAxCiAgICAvLyBpbXBsaWNpdEtleUFyYzRTdHIgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFN0cignSGVsbG8nKSB9KQogICAgYnl0ZWNfMiAvLyAiaW1wbGljaXRLZXlBcmM0U3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5NwogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzAwLTcwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKHZhbHVlOiBCeXRlKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDIKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJ5dGUgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJ5dGUoMCkgfSkKICAgIGJ5dGVjXzMgLy8gImltcGxpY2l0S2V5QXJjNEJ5dGUiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzAyCiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNEJ5dGUudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzA1LTcwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sKHZhbHVlOiBCb29sKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSkgfSkKICAgIGJ5dGVjIDQgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzA3CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNEJvb2wudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzEwLTcxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKHZhbHVlOiBBZGRyZXNzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDQKICAgIC8vIGltcGxpY2l0S2V5QXJjNEFkZHJlc3MgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKSB9KQogICAgYnl0ZWMgNSAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MTIKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcy52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcxNS03MTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBzZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG4xMjgodmFsdWU6IFVpbnROMTI4KSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnROMTI4ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKSB9KQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRLZXlBcmM0VWludE4xMjgiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzE3CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnROMTI4LnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjcyMC03MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBzZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyh2YWx1ZTogRHluYW1pY0J5dGVzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MDYKICAgIC8vIGltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJykgfSkKICAgIGJ5dGVjIDcgLy8gImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MjIKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF91aW50bjY0KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MjYtNzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2FyYzRfdWludG42NCh2YWx1ZTogVWludE42NCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjA5CiAgICAvLyBhcmM0VWludE42NCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgVWludE42NCgxMzM3KSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCcgfSkKICAgIGJ5dGVjIDggLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzI4CiAgICAvLyB0aGlzLmFyYzRVaW50TjY0LnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9zdHIodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfYXJjNF9zdHI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMxLTczMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9hcmM0X3N0cih2YWx1ZTogU3RyKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTAKICAgIC8vIGFyYzRTdHIgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFN0cignSGVsbG8nKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfc3RyJyB9KQogICAgYnl0ZWMgOSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfc3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczMwogICAgLy8gdGhpcy5hcmM0U3RyLnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9ieXRlKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MzYtNzM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2FyYzRfYnl0ZSh2YWx1ZTogQnl0ZSkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjExCiAgICAvLyBhcmM0Qnl0ZSA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBuZXcgQnl0ZSgwKSwga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYnl0ZScgfSkKICAgIGJ5dGVjIDEwIC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczOAogICAgLy8gdGhpcy5hcmM0Qnl0ZS52YWx1ZSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Okdsb2JhbFN0YXRlQ29udHJhY3Quc2V0X2FyYzRfYm9vbCh2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQxLTc0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9hcmM0X2Jvb2wodmFsdWU6IEJvb2wpIHsKICAgIHByb3RvIDEgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYxMgogICAgLy8gYXJjNEJvb2wgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IEJvb2wodHJ1ZSksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2Jvb2wnIH0pCiAgICBieXRlYyAxMSAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYm9vbCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NDMKICAgIC8vIHRoaXMuYXJjNEJvb2wudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X2FkZHJlc3ModmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfYXJjNF9hZGRyZXNzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc0Ni03NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBzZXRfYXJjNF9hZGRyZXNzKHZhbHVlOiBBZGRyZXNzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTMKICAgIC8vIGFyYzRBZGRyZXNzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcyksIGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NDgKICAgIC8vIHRoaXMuYXJjNEFkZHJlc3MudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpHbG9iYWxTdGF0ZUNvbnRyYWN0LnNldF9hcmM0X3VpbnRuMTI4KHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfdWludG4xMjg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUxLTc1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHNldF9hcmM0X3VpbnRuMTI4KHZhbHVlOiBVaW50TjEyOCkgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjE0CiAgICAvLyBhcmM0VWludE4xMjggPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IFVpbnROMTI4KDJuICoqIDEwMG4pLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCcgfSkKICAgIGJ5dGVjIDEzIC8vICJleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NTMKICAgIC8vIHRoaXMuYXJjNFVpbnROMTI4LnZhbHVlID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6R2xvYmFsU3RhdGVDb250cmFjdC5zZXRfYXJjNF9keW5hbWljX2J5dGVzKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2FyYzRfZHluYW1pY19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NTYtNzU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gc2V0X2FyYzRfZHluYW1pY19ieXRlcyh2YWx1ZTogRHluYW1pY0J5dGVzKSB7CiAgICBwcm90byAxIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MTUKICAgIC8vIGFyYzREeW5hbWljQnl0ZXMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IER5bmFtaWNCeXRlcygnZHluYW1pYyBieXRlcycpLCBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzJyB9KQogICAgYnl0ZWMgMTQgLy8gImV4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzU4CiAgICAvLyB0aGlzLmFyYzREeW5hbWljQnl0ZXMudmFsdWUgPSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmEwQVH3x1FmltcGxpY2l0S2V5QXJjNFVpbnRONjQSaW1wbGljaXRLZXlBcmM0U3RyE2ltcGxpY2l0S2V5QXJjNEJ5dGUTaW1wbGljaXRLZXlBcmM0Qm9vbBZpbXBsaWNpdEtleUFyYzRBZGRyZXNzF2ltcGxpY2l0S2V5QXJjNFVpbnROMTI4G2ltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcxlleHBsaWNpdF9rZXlfYXJjNF91aW50bjY0FWV4cGxpY2l0X2tleV9hcmM0X3N0chZleHBsaWNpdF9rZXlfYXJjNF9ieXRlFmV4cGxpY2l0X2tleV9hcmM0X2Jvb2wZZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcxpleHBsaWNpdF9rZXlfYXJjNF91aW50bjEyOB9leHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzCAAAAAAAAAU5BwAFSGVsbG8QAAAAEAAAAAAAAAAAAAAAAA8ADWR5bmFtaWMgYnl0ZXMxGEAARyknD2cqJxBnK4ABAGcnBIABgGcnBTIJZycGJxFnJwcnEmcnCCcPZycJJxBnJwqAAQBnJwuAAYBnJwwyCWcnDScRZycOJxJnMRtBAn+CHASKt/i/BIbsJPMEaRKOkARo1ZDiBETvBoEEXCG9YASqyOyxBKFSiM4EXyOs/QTe11AzBGYnnpMECW6SewQQa8ALBG6j+ZYEPfCizQSMTY+ABF7DEW0EIPVu7gQcFJpDBI5qHd4Eh/CGmwQCZGmhBPBUq3sE0uZG7wTmdKJwBKh+VA0EWKdASgQldwj3NhoAjhwBpAGUAYQBdAFkAVQBRAE0ASQBFAEEAPQA5ADUAMUAtgCnAJgAiQB6AGsAXABNAD4ALwAgABEAAiNDMRkURDEYRDYaAYgCnSJDMRkURDEYRDYaAYgChSJDMRkURDEYRDYaAYgCbSJDMRkURDEYRDYaAYgCVSJDMRkURDEYRDYaAYgCPSJDMRkURDEYRDYaAYgCJSJDMRkURDEYRDYaAYgCDSJDMRkURDEYRDYaAYgB9SJDMRkURDEYRDYaAYgB3SJDMRkURDEYRDYaAYgBxSJDMRkURDEYRDYaAYgBrSJDMRkURDEYRDYaAYgBliJDMRkURDEYRDYaAYgBfyJDMRkURDEYRDYaAYgBaCJDMRkURDEYRIgBUyhMULAiQzEZFEQxGESIATooTFCwIkMxGRREMRhEiAEhKExQsCJDMRkURDEYRIgBCChMULAiQzEZFEQxGESIAO8oTFCwIkMxGRREMRhEiADWKExQsCJDMRkURDEYRIgAvShMULAiQzEZFEQxGESIAKQoTFCwIkMxGRREMRhEiACLKExQsCJDMRkURDEYRIgAcihMULAiQzEZFEQxGESIAFkoTFCwIkMxGRREMRhEiABBKExQsCJDMRkURDEYRIgAKShMULAiQzEZFEQxGESIABEoTFCwIkMxGUD+RzEYFEQiQ4oAASMpZUSJigABIyplRImKAAEjK2VEiYoAASMnBGVEiYoAASMnBWVEiYoAASMnBmVEiYoAASMnB2VEiYoAASMnCGVEiYoAASMnCWVEiYoAASMnCmVEiYoAASMnC2VEiYoAASMnDGVEiYoAASMnDWVEiYoAASMnDmVEiYoBACmL/2eJigEAKov/Z4mKAQAri/9niYoBACcEi/9niYoBACcFi/9niYoBACcGi/9niYoBACcHi/9niYoBACcIi/9niYoBACcJi/9niYoBACcKi/9niYoBACcLi/9niYoBACcMi/9niYoBACcNi/9niYoBACcOi/9niQ==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/GlobalStateContract.clear.teal b/tests/artifacts/state-ops/data/GlobalStateContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/GlobalStateContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/ITxnOpsContract.approval.teal b/tests/artifacts/state-ops/data/ITxnOpsContract.approval.teal deleted file mode 100644 index 32ada0b..0000000 --- a/tests/artifacts/state-ops/data/ITxnOpsContract.approval.teal +++ /dev/null @@ -1,127 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 6 1000 - bytecblock 0x068101 - // tests/artifacts/state-ops/contract.algo.ts:476 - // export class ITxnOpsContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@6 - pushbytes 0x4e7cd9cb // method "verify_itxn_ops()void" - txna ApplicationArgs 0 - match main_verify_itxn_ops_route@3 - -main_after_if_else@10: - // tests/artifacts/state-ops/contract.algo.ts:476 - // export class ITxnOpsContract extends arc4.Contract { - pushint 0 // 0 - return - -main_verify_itxn_ops_route@3: - // tests/artifacts/state-ops/contract.algo.ts:477 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - callsub verify_itxn_ops - intc_0 // 1 - return - -main_bare_routing@6: - // tests/artifacts/state-ops/contract.algo.ts:476 - // export class ITxnOpsContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@10 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::ITxnOpsContract.verify_itxn_ops() -> void: -verify_itxn_ops: - // tests/artifacts/state-ops/contract.algo.ts:477-478 - // @arc4.abimethod() - // public verify_itxn_ops() { - proto 0 0 - // tests/artifacts/state-ops/contract.algo.ts:479 - // op.ITxnCreate.begin() - itxn_begin - // tests/artifacts/state-ops/contract.algo.ts:480 - // op.ITxnCreate.setTypeEnum(TransactionType.ApplicationCall) - intc_1 // 6 - itxn_field TypeEnum - // tests/artifacts/state-ops/contract.algo.ts:481 - // op.ITxnCreate.setOnCompletion(arc4.OnCompleteAction.DeleteApplication) - pushint 5 // 5 - itxn_field OnCompletion - // tests/artifacts/state-ops/contract.algo.ts:482 - // op.ITxnCreate.setApprovalProgram(Bytes.fromHex('068101')) - bytec_0 // 0x068101 - itxn_field ApprovalProgram - // tests/artifacts/state-ops/contract.algo.ts:485 - // op.ITxnCreate.setApprovalProgramPages(Bytes.fromHex('068101')) - bytec_0 // 0x068101 - itxn_field ApprovalProgramPages - // tests/artifacts/state-ops/contract.algo.ts:486 - // op.ITxnCreate.setClearStateProgram(Bytes.fromHex('068101')) - bytec_0 // 0x068101 - itxn_field ClearStateProgram - // tests/artifacts/state-ops/contract.algo.ts:487 - // op.ITxnCreate.setFee(op.Global.minTxnFee) - global MinTxnFee - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:488 - // op.ITxnCreate.next() - itxn_next - // tests/artifacts/state-ops/contract.algo.ts:489 - // op.ITxnCreate.setTypeEnum(TransactionType.Payment) - intc_0 // 1 - itxn_field TypeEnum - // tests/artifacts/state-ops/contract.algo.ts:490 - // op.ITxnCreate.setReceiver(op.Global.creatorAddress) - global CreatorAddress - itxn_field Receiver - // tests/artifacts/state-ops/contract.algo.ts:491 - // op.ITxnCreate.setAmount(Uint64(1000)) - intc_2 // 1000 - itxn_field Amount - // tests/artifacts/state-ops/contract.algo.ts:492 - // op.ITxnCreate.submit() - itxn_submit - // tests/artifacts/state-ops/contract.algo.ts:494 - // assert(op.ITxn.receiver === op.Global.creatorAddress) - itxn Receiver - global CreatorAddress - == - assert - // tests/artifacts/state-ops/contract.algo.ts:495 - // assert(op.ITxn.amount === Uint64(1000)) - itxn Amount - intc_2 // 1000 - == - assert - // tests/artifacts/state-ops/contract.algo.ts:496 - // assert(op.ITxn.typeEnum === TransactionType.Payment) - itxn TypeEnum - intc_0 // 1 - == - assert - // tests/artifacts/state-ops/contract.algo.ts:498 - // assert(op.GITxn.typeEnum(0) === TransactionType.ApplicationCall) - gitxn 0 TypeEnum - intc_1 // 6 - == - assert - // tests/artifacts/state-ops/contract.algo.ts:499 - // assert(op.GITxn.typeEnum(1) === TransactionType.Payment) - gitxn 1 TypeEnum - intc_0 // 1 - == - assert - retsub diff --git a/tests/artifacts/state-ops/data/ITxnOpsContract.arc32.json b/tests/artifacts/state-ops/data/ITxnOpsContract.arc32.json deleted file mode 100644 index 5927e5a..0000000 --- a/tests/artifacts/state-ops/data/ITxnOpsContract.arc32.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "hints": { - "verify_itxn_ops()void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSA2IDEwMDAKICAgIGJ5dGVjYmxvY2sgMHgwNjgxMDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIGV4cG9ydCBjbGFzcyBJVHhuT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHg0ZTdjZDljYiAvLyBtZXRob2QgInZlcmlmeV9pdHhuX29wcygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2l0eG5fb3BzX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIGV4cG9ydCBjbGFzcyBJVHhuT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2l0eG5fb3BzX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHZlcmlmeV9pdHhuX29wcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIGV4cG9ydCBjbGFzcyBJVHhuT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpJVHhuT3BzQ29udHJhY3QudmVyaWZ5X2l0eG5fb3BzKCkgLT4gdm9pZDoKdmVyaWZ5X2l0eG5fb3BzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ3Ny00NzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2l0eG5fb3BzKCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBvcC5JVHhuQ3JlYXRlLmJlZ2luKCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0VHlwZUVudW0oVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbCkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldE9uQ29tcGxldGlvbihhcmM0Lk9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24pCiAgICBwdXNoaW50IDUgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0ODIKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0QXBwcm92YWxQcm9ncmFtKEJ5dGVzLmZyb21IZXgoJzA2ODEwMScpKQogICAgYnl0ZWNfMCAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0ODUKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0QXBwcm92YWxQcm9ncmFtUGFnZXMoQnl0ZXMuZnJvbUhleCgnMDY4MTAxJykpCiAgICBieXRlY18wIC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDg2CiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldENsZWFyU3RhdGVQcm9ncmFtKEJ5dGVzLmZyb21IZXgoJzA2ODEwMScpKQogICAgYnl0ZWNfMCAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ4NwogICAgLy8gb3AuSVR4bkNyZWF0ZS5zZXRGZWUob3AuR2xvYmFsLm1pblR4bkZlZSkKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDg4CiAgICAvLyBvcC5JVHhuQ3JlYXRlLm5leHQoKQogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDg5CiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldFR5cGVFbnVtKFRyYW5zYWN0aW9uVHlwZS5QYXltZW50KQogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0UmVjZWl2ZXIob3AuR2xvYmFsLmNyZWF0b3JBZGRyZXNzKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkxCiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldEFtb3VudChVaW50NjQoMTAwMCkpCiAgICBpbnRjXzIgLy8gMTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0OTIKICAgIC8vIG9wLklUeG5DcmVhdGUuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDk0CiAgICAvLyBhc3NlcnQob3AuSVR4bi5yZWNlaXZlciA9PT0gb3AuR2xvYmFsLmNyZWF0b3JBZGRyZXNzKQogICAgaXR4biBSZWNlaXZlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDk1CiAgICAvLyBhc3NlcnQob3AuSVR4bi5hbW91bnQgPT09IFVpbnQ2NCgxMDAwKSkKICAgIGl0eG4gQW1vdW50CiAgICBpbnRjXzIgLy8gMTAwMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gYXNzZXJ0KG9wLklUeG4udHlwZUVudW0gPT09IFRyYW5zYWN0aW9uVHlwZS5QYXltZW50KQogICAgaXR4biBUeXBlRW51bQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0OTgKICAgIC8vIGFzc2VydChvcC5HSVR4bi50eXBlRW51bSgwKSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbCkKICAgIGdpdHhuIDAgVHlwZUVudW0KICAgIGludGNfMSAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDk5CiAgICAvLyBhc3NlcnQob3AuR0lUeG4udHlwZUVudW0oMSkgPT09IFRyYW5zYWN0aW9uVHlwZS5QYXltZW50KQogICAgZ2l0eG4gMSBUeXBlRW51bQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "ITxnOpsContract", - "methods": [ - { - "name": "verify_itxn_ops", - "args": [], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/ITxnOpsContract.arc56.json b/tests/artifacts/state-ops/data/ITxnOpsContract.arc56.json deleted file mode 100644 index b8879e0..0000000 --- a/tests/artifacts/state-ops/data/ITxnOpsContract.arc56.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "name": "ITxnOpsContract", - "structs": {}, - "methods": [ - { - "name": "verify_itxn_ops", - "args": [], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 37 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 54 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 40 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSA2IDEwMDAKICAgIGJ5dGVjYmxvY2sgMHgwNjgxMDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIGV4cG9ydCBjbGFzcyBJVHhuT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHg0ZTdjZDljYiAvLyBtZXRob2QgInZlcmlmeV9pdHhuX29wcygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2l0eG5fb3BzX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIGV4cG9ydCBjbGFzcyBJVHhuT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2l0eG5fb3BzX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHZlcmlmeV9pdHhuX29wcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIGV4cG9ydCBjbGFzcyBJVHhuT3BzQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpJVHhuT3BzQ29udHJhY3QudmVyaWZ5X2l0eG5fb3BzKCkgLT4gdm9pZDoKdmVyaWZ5X2l0eG5fb3BzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ3Ny00NzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2l0eG5fb3BzKCkgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBvcC5JVHhuQ3JlYXRlLmJlZ2luKCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0VHlwZUVudW0oVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbCkKICAgIGludGNfMSAvLyA2CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldE9uQ29tcGxldGlvbihhcmM0Lk9uQ29tcGxldGVBY3Rpb24uRGVsZXRlQXBwbGljYXRpb24pCiAgICBwdXNoaW50IDUgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0ODIKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0QXBwcm92YWxQcm9ncmFtKEJ5dGVzLmZyb21IZXgoJzA2ODEwMScpKQogICAgYnl0ZWNfMCAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0ODUKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0QXBwcm92YWxQcm9ncmFtUGFnZXMoQnl0ZXMuZnJvbUhleCgnMDY4MTAxJykpCiAgICBieXRlY18wIC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDg2CiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldENsZWFyU3RhdGVQcm9ncmFtKEJ5dGVzLmZyb21IZXgoJzA2ODEwMScpKQogICAgYnl0ZWNfMCAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ4NwogICAgLy8gb3AuSVR4bkNyZWF0ZS5zZXRGZWUob3AuR2xvYmFsLm1pblR4bkZlZSkKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDg4CiAgICAvLyBvcC5JVHhuQ3JlYXRlLm5leHQoKQogICAgaXR4bl9uZXh0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDg5CiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldFR5cGVFbnVtKFRyYW5zYWN0aW9uVHlwZS5QYXltZW50KQogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIG9wLklUeG5DcmVhdGUuc2V0UmVjZWl2ZXIob3AuR2xvYmFsLmNyZWF0b3JBZGRyZXNzKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkxCiAgICAvLyBvcC5JVHhuQ3JlYXRlLnNldEFtb3VudChVaW50NjQoMTAwMCkpCiAgICBpbnRjXzIgLy8gMTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0OTIKICAgIC8vIG9wLklUeG5DcmVhdGUuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDk0CiAgICAvLyBhc3NlcnQob3AuSVR4bi5yZWNlaXZlciA9PT0gb3AuR2xvYmFsLmNyZWF0b3JBZGRyZXNzKQogICAgaXR4biBSZWNlaXZlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDk1CiAgICAvLyBhc3NlcnQob3AuSVR4bi5hbW91bnQgPT09IFVpbnQ2NCgxMDAwKSkKICAgIGl0eG4gQW1vdW50CiAgICBpbnRjXzIgLy8gMTAwMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gYXNzZXJ0KG9wLklUeG4udHlwZUVudW0gPT09IFRyYW5zYWN0aW9uVHlwZS5QYXltZW50KQogICAgaXR4biBUeXBlRW51bQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0OTgKICAgIC8vIGFzc2VydChvcC5HSVR4bi50eXBlRW51bSgwKSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbCkKICAgIGdpdHhuIDAgVHlwZUVudW0KICAgIGludGNfMSAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDk5CiAgICAvLyBhc3NlcnQob3AuR0lUeG4udHlwZUVudW0oMSkgPT09IFRyYW5zYWN0aW9uVHlwZS5QYXltZW50KQogICAgZ2l0eG4gMSBUeXBlRW51bQogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiADAQboByYBAwaBATEbQQAcgAROfNnLNhoAjgEAA4EAQzEZFEQxGESIAA0iQzEZQP/sMRgURCJDigAAsSOyEIEFshkosh4oskAosh8yALIBtiKyEDIJsgcksgiztAcyCRJEtAgkEkS0ECISRLcAECMSRLcBECISRIk=", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/ITxnOpsContract.clear.teal b/tests/artifacts/state-ops/data/ITxnOpsContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/ITxnOpsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/ItxnDemoContract.approval.teal b/tests/artifacts/state-ops/data/ItxnDemoContract.approval.teal deleted file mode 100644 index 5c21316..0000000 --- a/tests/artifacts/state-ops/data/ItxnDemoContract.approval.teal +++ /dev/null @@ -1,457 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// tests/artifacts/state-ops/contract.algo.ts::ItxnDemoContract.approvalProgram() -> uint64: -main: - intcblock 0 3 1000 6 - bytecblock "name" "unit" 0x098101 0x "AST1" "AST2" "AST3" "with args param set" "\t\xc2\x81\x01" "3rd" - intc_0 // 0 - dupn 2 - bytec_3 // "" - dupn 2 - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/state-ops/contract.algo.ts:505 - // name = GlobalState({ initialValue: Bytes() }) - bytec_0 // "name" - bytec_3 // 0x - app_global_put - -main_after_if_else@2: - // tests/artifacts/state-ops/contract.algo.ts:508 - // if (Txn.numAppArgs) { - txn NumAppArgs - bz main_after_if_else@15 - // tests/artifacts/state-ops/contract.algo.ts:509 - // switch (Txn.applicationArgs(0)) { - intc_0 // 0 - txnas ApplicationArgs - // tests/artifacts/state-ops/contract.algo.ts:510 - // case Bytes('test1'): - pushbytess "test1" "test2" "test3" "test4" // "test1", "test2", "test3", "test4" - // tests/artifacts/state-ops/contract.algo.ts:509-519 - // switch (Txn.applicationArgs(0)) { - // case Bytes('test1'): - // this.test1() - // break - // case Bytes('test2'): - // this.test2() - // break - // case Bytes('test3'): - // case Bytes('test4'): - // break - // } - uncover 4 - match main_switch_case_0@4 main_switch_case_1@6 main_after_if_else@15 main_after_if_else@15 - -main_after_if_else@15: - // tests/artifacts/state-ops/contract.algo.ts:521 - // return true - pushint 1 // 1 - return - -main_switch_case_1@6: - intc_0 // 0 - bury 4 - bytec_3 // "" - bury 1 - // tests/artifacts/state-ops/contract.algo.ts:574 - // if (Txn.numAppArgs) { - txn NumAppArgs - bz main_else_body@18 - // tests/artifacts/state-ops/contract.algo.ts:575 - // const args = [Bytes('1'), Bytes('2')] as const - pushbytes "1" - bury 6 - pushbytes "2" - bury 5 - // tests/artifacts/state-ops/contract.algo.ts:579 - // appArgs: args, - pushint 2 // 2 - bury 3 - // tests/artifacts/state-ops/contract.algo.ts:580 - // onCompletion: arc4.OnCompleteAction.NoOp, - intc_0 // 0 - bury 1 - pushint 1 // 1 - bury 2 - // tests/artifacts/state-ops/contract.algo.ts:581 - // note: 'with args param set', - bytec 7 // "with args param set" - -main_after_if_else@19: - // tests/artifacts/state-ops/contract.algo.ts:591 - // const createAppTxn = createAppParams.submit() - itxn_begin - itxn_field Note - dig 1 - bz main_next_field@21 - dup - itxn_field OnCompletion - -main_next_field@21: - dig 5 - itxn_field ApplicationArgs - dig 4 - itxn_field ApplicationArgs - dig 2 - intc_1 // 3 - >= - // tests/artifacts/state-ops/contract.algo.ts:591 - // const createAppTxn = createAppParams.submit() - bz main_next_field@23 - dig 3 - itxn_field ApplicationArgs - -main_next_field@23: - // tests/artifacts/state-ops/contract.algo.ts:503 - // const APPROVE = Bytes('\x09\x81\x01') - bytec 8 // "\t\xc2\x81\x01" - itxn_field ClearStateProgramPages - bytec 8 // "\t\xc2\x81\x01" - itxn_field ApprovalProgramPages - // tests/artifacts/state-ops/contract.algo.ts:576-582 - // createAppParams = itxn.applicationCall({ - // approvalProgram: APPROVE, - // clearStateProgram: APPROVE, - // appArgs: args, - // onCompletion: arc4.OnCompleteAction.NoOp, - // note: 'with args param set', - // }) - intc_3 // 6 - itxn_field TypeEnum - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:591 - // const createAppTxn = createAppParams.submit() - itxn_submit - itxn Note - // tests/artifacts/state-ops/contract.algo.ts:592 - // assert(createAppTxn.appArgs(0) === Bytes('1'), 'correct args used 1') - itxna ApplicationArgs 0 - pushbytes "1" - == - assert // correct args used 1 - // tests/artifacts/state-ops/contract.algo.ts:593 - // assert(createAppTxn.appArgs(1) === Bytes('2'), 'correct args used 2') - itxna ApplicationArgs 1 - pushbytes "2" - == - assert // correct args used 2 - // tests/artifacts/state-ops/contract.algo.ts:594 - // assert(createAppTxn.note === Bytes('with args param set')) - bytec 7 // "with args param set" - == - assert - // tests/artifacts/state-ops/contract.algo.ts:515 - // break - b main_after_if_else@15 - -main_else_body@18: - // tests/artifacts/state-ops/contract.algo.ts:587 - // appArgs: [Bytes('3'), '4', Bytes('5')], - pushbytes "3" - bury 6 - pushbytes "4" - bury 5 - pushbytes "5" - bury 4 - intc_1 // 3 - bury 3 - // tests/artifacts/state-ops/contract.algo.ts:588 - // note: 'no args param set', - pushbytes "no args param set" - // tests/artifacts/state-ops/contract.algo.ts:584 - // createAppParams = itxn.applicationCall({ - intc_0 // 0 - bury 3 - b main_after_if_else@19 - -main_switch_case_0@4: - // tests/artifacts/state-ops/contract.algo.ts:505 - // name = GlobalState({ initialValue: Bytes() }) - bytec_0 // "name" - // tests/artifacts/state-ops/contract.algo.ts:525 - // this.name.value = Bytes('AST1') - bytec 4 // "AST1" - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:529 - // assetName: this.name.value, - intc_0 // 0 - // tests/artifacts/state-ops/contract.algo.ts:505 - // name = GlobalState({ initialValue: Bytes() }) - bytec_0 // "name" - // tests/artifacts/state-ops/contract.algo.ts:529 - // assetName: this.name.value, - app_global_get_ex - assert // check GlobalState exists - // tests/artifacts/state-ops/contract.algo.ts:532 - // manager: Global.currentApplicationAddress, - global CurrentApplicationAddress - // tests/artifacts/state-ops/contract.algo.ts:533 - // reserve: Global.currentApplicationAddress, - dup - // tests/artifacts/state-ops/contract.algo.ts:505 - // name = GlobalState({ initialValue: Bytes() }) - bytec_0 // "name" - // tests/artifacts/state-ops/contract.algo.ts:536 - // this.name.value = Bytes('AST2') - bytec 5 // "AST2" - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:537 - // const asset1_txn = assetParams.submit() - itxn_begin - dup - itxn_field ConfigAssetReserve - dig 1 - itxn_field ConfigAssetManager - // tests/artifacts/state-ops/contract.algo.ts:531 - // decimals: 3, - intc_1 // 3 - itxn_field ConfigAssetDecimals - // tests/artifacts/state-ops/contract.algo.ts:530 - // unitName: 'unit', - bytec_1 // "unit" - itxn_field ConfigAssetUnitName - uncover 2 - itxn_field ConfigAssetName - // tests/artifacts/state-ops/contract.algo.ts:528 - // total: 1000, - intc_2 // 1000 - itxn_field ConfigAssetTotal - // tests/artifacts/state-ops/contract.algo.ts:527-534 - // const assetParams = itxn.assetConfig({ - // total: 1000, - // assetName: this.name.value, - // unitName: 'unit', - // decimals: 3, - // manager: Global.currentApplicationAddress, - // reserve: Global.currentApplicationAddress, - // }) - intc_1 // 3 - itxn_field TypeEnum - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:537 - // const asset1_txn = assetParams.submit() - itxn_submit - itxn ConfigAssetName - itxn CreatedAssetID - // tests/artifacts/state-ops/contract.algo.ts:539 - // assetName: this.name.value, - intc_0 // 0 - // tests/artifacts/state-ops/contract.algo.ts:505 - // name = GlobalState({ initialValue: Bytes() }) - bytec_0 // "name" - // tests/artifacts/state-ops/contract.algo.ts:539 - // assetName: this.name.value, - app_global_get_ex - assert // check GlobalState exists - // tests/artifacts/state-ops/contract.algo.ts:541 - // const asset2_txn = assetParams.submit() - itxn_begin - dig 3 - itxn_field ConfigAssetReserve - dig 4 - itxn_field ConfigAssetManager - // tests/artifacts/state-ops/contract.algo.ts:531 - // decimals: 3, - intc_1 // 3 - itxn_field ConfigAssetDecimals - // tests/artifacts/state-ops/contract.algo.ts:530 - // unitName: 'unit', - bytec_1 // "unit" - itxn_field ConfigAssetUnitName - itxn_field ConfigAssetName - // tests/artifacts/state-ops/contract.algo.ts:528 - // total: 1000, - intc_2 // 1000 - itxn_field ConfigAssetTotal - // tests/artifacts/state-ops/contract.algo.ts:527-534 - // const assetParams = itxn.assetConfig({ - // total: 1000, - // assetName: this.name.value, - // unitName: 'unit', - // decimals: 3, - // manager: Global.currentApplicationAddress, - // reserve: Global.currentApplicationAddress, - // }) - intc_1 // 3 - itxn_field TypeEnum - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:541 - // const asset2_txn = assetParams.submit() - itxn_submit - itxn ConfigAssetName - itxn CreatedAssetID - // tests/artifacts/state-ops/contract.algo.ts:543 - // assert(asset1_txn.assetName === Bytes('AST1'), 'asset1_txn is correct') - uncover 3 - bytec 4 // "AST1" - == - assert // asset1_txn is correct - // tests/artifacts/state-ops/contract.algo.ts:544 - // assert(asset2_txn.assetName === Bytes('AST2'), 'asset2_txn is correct') - swap - bytec 5 // "AST2" - == - assert // asset2_txn is correct - // tests/artifacts/state-ops/contract.algo.ts:545 - // assert(asset1_txn.createdAsset.name === Bytes('AST1'), 'created asset 1 is correct') - swap - asset_params_get AssetName - assert // asset exists - bytec 4 // "AST1" - == - assert // created asset 1 is correct - // tests/artifacts/state-ops/contract.algo.ts:546 - // assert(asset2_txn.createdAsset.name === Bytes('AST2'), 'created asset 2 is correct') - asset_params_get AssetName - assert // asset exists - bytec 5 // "AST2" - == - assert // created asset 2 is correct - // tests/artifacts/state-ops/contract.algo.ts:558 - // const [appCreateTxn, asset3_txn] = itxn.submitGroup(appCreateParams, assetParams) - itxn_begin - // tests/artifacts/state-ops/contract.algo.ts:550 - // clearStateProgram: Bytes.fromHex('098101'), - bytec_2 // 0x098101 - itxn_field ClearStateProgramPages - // tests/artifacts/state-ops/contract.algo.ts:549 - // approvalProgram: Bytes.fromHex('098101'), - bytec_2 // 0x098101 - itxn_field ApprovalProgramPages - // tests/artifacts/state-ops/contract.algo.ts:548-552 - // const appCreateParams = itxn.applicationCall({ - // approvalProgram: Bytes.fromHex('098101'), - // clearStateProgram: Bytes.fromHex('098101'), - // fee: 0, - // }) - intc_3 // 6 - itxn_field TypeEnum - // tests/artifacts/state-ops/contract.algo.ts:551 - // fee: 0, - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:558 - // const [appCreateTxn, asset3_txn] = itxn.submitGroup(appCreateParams, assetParams) - itxn_next - dup - itxn_field ConfigAssetReserve - dig 1 - itxn_field ConfigAssetManager - // tests/artifacts/state-ops/contract.algo.ts:531 - // decimals: 3, - intc_1 // 3 - itxn_field ConfigAssetDecimals - // tests/artifacts/state-ops/contract.algo.ts:530 - // unitName: 'unit', - bytec_1 // "unit" - itxn_field ConfigAssetUnitName - // tests/artifacts/state-ops/contract.algo.ts:555 - // assetName: 'AST3', - bytec 6 // "AST3" - itxn_field ConfigAssetName - // tests/artifacts/state-ops/contract.algo.ts:528 - // total: 1000, - intc_2 // 1000 - itxn_field ConfigAssetTotal - // tests/artifacts/state-ops/contract.algo.ts:527-534 - // const assetParams = itxn.assetConfig({ - // total: 1000, - // assetName: this.name.value, - // unitName: 'unit', - // decimals: 3, - // manager: Global.currentApplicationAddress, - // reserve: Global.currentApplicationAddress, - // }) - intc_1 // 3 - itxn_field TypeEnum - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:558 - // const [appCreateTxn, asset3_txn] = itxn.submitGroup(appCreateParams, assetParams) - itxn_submit - itxn ConfigAssetName - gitxn 0 ApplicationID - // tests/artifacts/state-ops/contract.algo.ts:560 - // assert(appCreateTxn.appId, 'app is created') - assert // app is created - // tests/artifacts/state-ops/contract.algo.ts:561 - // assert(asset3_txn.assetName === Bytes('AST3'), 'asset3_txn is correct') - bytec 6 // "AST3" - == - assert // asset3_txn is correct - // tests/artifacts/state-ops/contract.algo.ts:569 - // itxn.submitGroup(appCreateParams, assetParams) - itxn_begin - // tests/artifacts/state-ops/contract.algo.ts:564 - // note: '3rd', - bytec 9 // "3rd" - itxn_field Note - // tests/artifacts/state-ops/contract.algo.ts:550 - // clearStateProgram: Bytes.fromHex('098101'), - bytec_2 // 0x098101 - itxn_field ClearStateProgramPages - // tests/artifacts/state-ops/contract.algo.ts:549 - // approvalProgram: Bytes.fromHex('098101'), - bytec_2 // 0x098101 - itxn_field ApprovalProgramPages - // tests/artifacts/state-ops/contract.algo.ts:548-552 - // const appCreateParams = itxn.applicationCall({ - // approvalProgram: Bytes.fromHex('098101'), - // clearStateProgram: Bytes.fromHex('098101'), - // fee: 0, - // }) - intc_3 // 6 - itxn_field TypeEnum - // tests/artifacts/state-ops/contract.algo.ts:551 - // fee: 0, - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:569 - // itxn.submitGroup(appCreateParams, assetParams) - itxn_next - // tests/artifacts/state-ops/contract.algo.ts:567 - // note: '3rd', - bytec 9 // "3rd" - itxn_field Note - itxn_field ConfigAssetReserve - itxn_field ConfigAssetManager - // tests/artifacts/state-ops/contract.algo.ts:531 - // decimals: 3, - intc_1 // 3 - itxn_field ConfigAssetDecimals - // tests/artifacts/state-ops/contract.algo.ts:530 - // unitName: 'unit', - bytec_1 // "unit" - itxn_field ConfigAssetUnitName - // tests/artifacts/state-ops/contract.algo.ts:555 - // assetName: 'AST3', - bytec 6 // "AST3" - itxn_field ConfigAssetName - // tests/artifacts/state-ops/contract.algo.ts:528 - // total: 1000, - intc_2 // 1000 - itxn_field ConfigAssetTotal - // tests/artifacts/state-ops/contract.algo.ts:527-534 - // const assetParams = itxn.assetConfig({ - // total: 1000, - // assetName: this.name.value, - // unitName: 'unit', - // decimals: 3, - // manager: Global.currentApplicationAddress, - // reserve: Global.currentApplicationAddress, - // }) - intc_1 // 3 - itxn_field TypeEnum - intc_0 // 0 - itxn_field Fee - // tests/artifacts/state-ops/contract.algo.ts:569 - // itxn.submitGroup(appCreateParams, assetParams) - itxn_submit - // tests/artifacts/state-ops/contract.algo.ts:512 - // break - b main_after_if_else@15 diff --git a/tests/artifacts/state-ops/data/ItxnDemoContract.clear.teal b/tests/artifacts/state-ops/data/ItxnDemoContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/ItxnDemoContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/LocalStateContract.approval.teal b/tests/artifacts/state-ops/data/LocalStateContract.approval.teal deleted file mode 100644 index 955c021..0000000 --- a/tests/artifacts/state-ops/data/LocalStateContract.approval.teal +++ /dev/null @@ -1,795 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 "implicitKeyArc4UintN64" 0x0000000000000539 "implicitKeyArc4Str" 0x000548656c6c6f "implicitKeyArc4Byte" "implicitKeyArc4Bool" "implicitKeyArc4Address" "implicitKeyArc4UintN128" 0x00000010000000000000000000000000 "implicitKeyArc4DynamicBytes" 0x000d64796e616d6963206279746573 "explicit_key_arc4_uintn64" "explicit_key_arc4_str" "explicit_key_arc4_byte" "explicit_key_arc4_bool" "explicit_key_arc4_address" "explicit_key_arc4_uintn128" "explicit_key_arc4_dynamic_bytes" - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@20 - pushbytess 0x30c6d58a 0xeecdf0a0 0x6c6f17da 0xecf633b0 0x3e531223 0x3ed6799d 0x6fecdd80 0x676a87c2 0x1e0f8951 0x42e85fd7 0x6521d49b 0xe07c56cd 0xaa19d2b5 0xb922312d 0xfc0feed9 // method "opt_in()void", method "get_implicit_key_arc4_uintn64(account)uint64", method "get_implicit_key_arc4_str(account)string", method "get_implicit_key_arc4_byte(account)byte", method "get_implicit_key_arc4_bool(account)bool", method "get_implicit_key_arc4_address(account)address", method "get_implicit_key_arc4_uintn128(account)uint128", method "get_implicit_key_arc4_dynamic_bytes(account)byte[]", method "get_arc4_uintn64(account)uint64", method "get_arc4_str(account)string", method "get_arc4_byte(account)byte", method "get_arc4_bool(account)bool", method "get_arc4_address(account)address", method "get_arc4_uintn128(account)uint128", method "get_arc4_dynamic_bytes(account)byte[]" - txna ApplicationArgs 0 - match main_opt_in_route@3 main_get_implicit_key_arc4_uintn64_route@4 main_get_implicit_key_arc4_str_route@5 main_get_implicit_key_arc4_byte_route@6 main_get_implicit_key_arc4_bool_route@7 main_get_implicit_key_arc4_address_route@8 main_get_implicit_key_arc4_uintn128_route@9 main_get_implicit_key_arc4_dynamic_bytes_route@10 main_get_arc4_uintn64_route@11 main_get_arc4_str_route@12 main_get_arc4_byte_route@13 main_get_arc4_bool_route@14 main_get_arc4_address_route@15 main_get_arc4_uintn128_route@16 main_get_arc4_dynamic_bytes_route@17 - -main_after_if_else@24: - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - intc_1 // 0 - return - -main_get_arc4_dynamic_bytes_route@17: - // tests/artifacts/state-ops/contract.algo.ts:867 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:867 - // @arc4.abimethod() - callsub get_arc4_dynamic_bytes - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_uintn128_route@16: - // tests/artifacts/state-ops/contract.algo.ts:862 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:862 - // @arc4.abimethod() - callsub get_arc4_uintn128 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_address_route@15: - // tests/artifacts/state-ops/contract.algo.ts:857 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:857 - // @arc4.abimethod() - callsub get_arc4_address - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_bool_route@14: - // tests/artifacts/state-ops/contract.algo.ts:852 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:852 - // @arc4.abimethod() - callsub get_arc4_bool - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_byte_route@13: - // tests/artifacts/state-ops/contract.algo.ts:847 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:847 - // @arc4.abimethod() - callsub get_arc4_byte - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_str_route@12: - // tests/artifacts/state-ops/contract.algo.ts:842 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:842 - // @arc4.abimethod() - callsub get_arc4_str - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_arc4_uintn64_route@11: - // tests/artifacts/state-ops/contract.algo.ts:837 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:837 - // @arc4.abimethod() - callsub get_arc4_uintn64 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_dynamic_bytes_route@10: - // tests/artifacts/state-ops/contract.algo.ts:831 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:831 - // @arc4.abimethod() - callsub get_implicit_key_arc4_dynamic_bytes - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_uintn128_route@9: - // tests/artifacts/state-ops/contract.algo.ts:826 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:826 - // @arc4.abimethod() - callsub get_implicit_key_arc4_uintn128 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_address_route@8: - // tests/artifacts/state-ops/contract.algo.ts:821 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:821 - // @arc4.abimethod() - callsub get_implicit_key_arc4_address - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_bool_route@7: - // tests/artifacts/state-ops/contract.algo.ts:816 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:816 - // @arc4.abimethod() - callsub get_implicit_key_arc4_bool - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_byte_route@6: - // tests/artifacts/state-ops/contract.algo.ts:811 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:811 - // @arc4.abimethod() - callsub get_implicit_key_arc4_byte - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_str_route@5: - // tests/artifacts/state-ops/contract.algo.ts:806 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:806 - // @arc4.abimethod() - callsub get_implicit_key_arc4_str - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_get_implicit_key_arc4_uintn64_route@4: - // tests/artifacts/state-ops/contract.algo.ts:801 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:801 - // @arc4.abimethod() - callsub get_implicit_key_arc4_uintn64 - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_opt_in_route@3: - // tests/artifacts/state-ops/contract.algo.ts:781 - // @arc4.abimethod({ allowActions: ['OptIn'] }) - txn OnCompletion - intc_0 // OptIn - == - assert // OnCompletion is not OptIn - txn ApplicationID - assert // can only call when not creating - callsub opt_in - intc_0 // 1 - return - -main_bare_routing@20: - // tests/artifacts/state-ops/contract.algo.ts:762 - // export class LocalStateContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@24 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.opt_in() -> void: -opt_in: - // tests/artifacts/state-ops/contract.algo.ts:781-782 - // @arc4.abimethod({ allowActions: ['OptIn'] }) - // opt_in(): void { - proto 0 0 - // tests/artifacts/state-ops/contract.algo.ts:783 - // this.implicitKeyArc4UintN64(Global.creatorAddress).value = new UintN64(1337) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:764 - // implicitKeyArc4UintN64 = LocalState() - bytec_1 // "implicitKeyArc4UintN64" - // tests/artifacts/state-ops/contract.algo.ts:783 - // this.implicitKeyArc4UintN64(Global.creatorAddress).value = new UintN64(1337) - bytec_2 // 0x0000000000000539 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:784 - // this.implicitKeyArc4Str(Global.creatorAddress).value = new Str('Hello') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:765 - // implicitKeyArc4Str = LocalState() - bytec_3 // "implicitKeyArc4Str" - // tests/artifacts/state-ops/contract.algo.ts:784 - // this.implicitKeyArc4Str(Global.creatorAddress).value = new Str('Hello') - bytec 4 // 0x000548656c6c6f - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:785 - // this.implicitKeyArc4Byte(Global.creatorAddress).value = new Byte(0) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:766 - // implicitKeyArc4Byte = LocalState() - bytec 5 // "implicitKeyArc4Byte" - // tests/artifacts/state-ops/contract.algo.ts:785 - // this.implicitKeyArc4Byte(Global.creatorAddress).value = new Byte(0) - pushbytes 0x00 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:786 - // this.implicitKeyArc4Bool(Global.creatorAddress).value = new Bool(true) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:767 - // implicitKeyArc4Bool = LocalState() - bytec 6 // "implicitKeyArc4Bool" - // tests/artifacts/state-ops/contract.algo.ts:786 - // this.implicitKeyArc4Bool(Global.creatorAddress).value = new Bool(true) - pushbytes 0x80 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:787 - // this.implicitKeyArc4Address(Global.creatorAddress).value = new Address(Global.creatorAddress) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:768 - // implicitKeyArc4Address = LocalState
() - bytec 7 // "implicitKeyArc4Address" - // tests/artifacts/state-ops/contract.algo.ts:787 - // this.implicitKeyArc4Address(Global.creatorAddress).value = new Address(Global.creatorAddress) - global CreatorAddress - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:788 - // this.implicitKeyArc4UintN128(Global.creatorAddress).value = new UintN128(2n ** 100n) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:769 - // implicitKeyArc4UintN128 = LocalState() - bytec 8 // "implicitKeyArc4UintN128" - // tests/artifacts/state-ops/contract.algo.ts:788 - // this.implicitKeyArc4UintN128(Global.creatorAddress).value = new UintN128(2n ** 100n) - bytec 9 // 0x00000010000000000000000000000000 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:789 - // this.implicitKeyArc4DynamicBytes(Global.creatorAddress).value = new DynamicBytes('dynamic bytes') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:770 - // implicitKeyArc4DynamicBytes = LocalState() - bytec 10 // "implicitKeyArc4DynamicBytes" - // tests/artifacts/state-ops/contract.algo.ts:789 - // this.implicitKeyArc4DynamicBytes(Global.creatorAddress).value = new DynamicBytes('dynamic bytes') - bytec 11 // 0x000d64796e616d6963206279746573 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:791 - // this.arc4UintN64(Global.creatorAddress).value = new UintN64(1337) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:773 - // arc4UintN64 = LocalState({ key: 'explicit_key_arc4_uintn64' }) - bytec 12 // "explicit_key_arc4_uintn64" - // tests/artifacts/state-ops/contract.algo.ts:791 - // this.arc4UintN64(Global.creatorAddress).value = new UintN64(1337) - bytec_2 // 0x0000000000000539 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:792 - // this.arc4Str(Global.creatorAddress).value = new Str('Hello') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:774 - // arc4Str = LocalState({ key: 'explicit_key_arc4_str' }) - bytec 13 // "explicit_key_arc4_str" - // tests/artifacts/state-ops/contract.algo.ts:792 - // this.arc4Str(Global.creatorAddress).value = new Str('Hello') - bytec 4 // 0x000548656c6c6f - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:793 - // this.arc4Byte(Global.creatorAddress).value = new Byte(0) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:775 - // arc4Byte = LocalState({ key: 'explicit_key_arc4_byte' }) - bytec 14 // "explicit_key_arc4_byte" - // tests/artifacts/state-ops/contract.algo.ts:793 - // this.arc4Byte(Global.creatorAddress).value = new Byte(0) - pushbytes 0x00 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:794 - // this.arc4Bool(Global.creatorAddress).value = new Bool(true) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:776 - // arc4Bool = LocalState({ key: 'explicit_key_arc4_bool' }) - bytec 15 // "explicit_key_arc4_bool" - // tests/artifacts/state-ops/contract.algo.ts:794 - // this.arc4Bool(Global.creatorAddress).value = new Bool(true) - pushbytes 0x80 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:795 - // this.arc4Address(Global.creatorAddress).value = new Address(Global.creatorAddress) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:777 - // arc4Address = LocalState
({ key: 'explicit_key_arc4_address' }) - bytec 16 // "explicit_key_arc4_address" - // tests/artifacts/state-ops/contract.algo.ts:795 - // this.arc4Address(Global.creatorAddress).value = new Address(Global.creatorAddress) - global CreatorAddress - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:796 - // this.arc4UintN128(Global.creatorAddress).value = new UintN128(2n ** 100n) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:778 - // arc4UintN128 = LocalState({ key: 'explicit_key_arc4_uintn128' }) - bytec 17 // "explicit_key_arc4_uintn128" - // tests/artifacts/state-ops/contract.algo.ts:796 - // this.arc4UintN128(Global.creatorAddress).value = new UintN128(2n ** 100n) - bytec 9 // 0x00000010000000000000000000000000 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:797 - // this.arc4DynamicBytes(Global.creatorAddress).value = new DynamicBytes('dynamic bytes') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:779 - // arc4DynamicBytes = LocalState({ key: 'explicit_key_arc4_dynamic_bytes' }) - bytec 18 // "explicit_key_arc4_dynamic_bytes" - // tests/artifacts/state-ops/contract.algo.ts:797 - // this.arc4DynamicBytes(Global.creatorAddress).value = new DynamicBytes('dynamic bytes') - bytec 11 // 0x000d64796e616d6963206279746573 - app_local_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_uintn64(a: bytes) -> bytes: -get_implicit_key_arc4_uintn64: - // tests/artifacts/state-ops/contract.algo.ts:801-802 - // @arc4.abimethod() - // get_implicit_key_arc4_uintn64(a: Account): UintN64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:803 - // return this.implicitKeyArc4UintN64(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:764 - // implicitKeyArc4UintN64 = LocalState() - bytec_1 // "implicitKeyArc4UintN64" - // tests/artifacts/state-ops/contract.algo.ts:803 - // return this.implicitKeyArc4UintN64(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_str(a: bytes) -> bytes: -get_implicit_key_arc4_str: - // tests/artifacts/state-ops/contract.algo.ts:806-807 - // @arc4.abimethod() - // get_implicit_key_arc4_str(a: Account): Str { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:808 - // return this.implicitKeyArc4Str(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:765 - // implicitKeyArc4Str = LocalState() - bytec_3 // "implicitKeyArc4Str" - // tests/artifacts/state-ops/contract.algo.ts:808 - // return this.implicitKeyArc4Str(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_byte(a: bytes) -> bytes: -get_implicit_key_arc4_byte: - // tests/artifacts/state-ops/contract.algo.ts:811-812 - // @arc4.abimethod() - // get_implicit_key_arc4_byte(a: Account): Byte { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:813 - // return this.implicitKeyArc4Byte(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:766 - // implicitKeyArc4Byte = LocalState() - bytec 5 // "implicitKeyArc4Byte" - // tests/artifacts/state-ops/contract.algo.ts:813 - // return this.implicitKeyArc4Byte(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_bool(a: bytes) -> bytes: -get_implicit_key_arc4_bool: - // tests/artifacts/state-ops/contract.algo.ts:816-817 - // @arc4.abimethod() - // get_implicit_key_arc4_bool(a: Account): Bool { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:818 - // return this.implicitKeyArc4Bool(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:767 - // implicitKeyArc4Bool = LocalState() - bytec 6 // "implicitKeyArc4Bool" - // tests/artifacts/state-ops/contract.algo.ts:818 - // return this.implicitKeyArc4Bool(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_address(a: bytes) -> bytes: -get_implicit_key_arc4_address: - // tests/artifacts/state-ops/contract.algo.ts:821-822 - // @arc4.abimethod() - // get_implicit_key_arc4_address(a: Account): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:823 - // return this.implicitKeyArc4Address(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:768 - // implicitKeyArc4Address = LocalState
() - bytec 7 // "implicitKeyArc4Address" - // tests/artifacts/state-ops/contract.algo.ts:823 - // return this.implicitKeyArc4Address(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_uintn128(a: bytes) -> bytes: -get_implicit_key_arc4_uintn128: - // tests/artifacts/state-ops/contract.algo.ts:826-827 - // @arc4.abimethod() - // get_implicit_key_arc4_uintn128(a: Account): UintN128 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:828 - // return this.implicitKeyArc4UintN128(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:769 - // implicitKeyArc4UintN128 = LocalState() - bytec 8 // "implicitKeyArc4UintN128" - // tests/artifacts/state-ops/contract.algo.ts:828 - // return this.implicitKeyArc4UintN128(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_implicit_key_arc4_dynamic_bytes(a: bytes) -> bytes: -get_implicit_key_arc4_dynamic_bytes: - // tests/artifacts/state-ops/contract.algo.ts:831-832 - // @arc4.abimethod() - // get_implicit_key_arc4_dynamic_bytes(a: Account): DynamicBytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:833 - // return this.implicitKeyArc4DynamicBytes(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:770 - // implicitKeyArc4DynamicBytes = LocalState() - bytec 10 // "implicitKeyArc4DynamicBytes" - // tests/artifacts/state-ops/contract.algo.ts:833 - // return this.implicitKeyArc4DynamicBytes(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_uintn64(a: bytes) -> bytes: -get_arc4_uintn64: - // tests/artifacts/state-ops/contract.algo.ts:837-838 - // @arc4.abimethod() - // get_arc4_uintn64(a: Account): arc4.UintN64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:839 - // return this.arc4UintN64(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:773 - // arc4UintN64 = LocalState({ key: 'explicit_key_arc4_uintn64' }) - bytec 12 // "explicit_key_arc4_uintn64" - // tests/artifacts/state-ops/contract.algo.ts:839 - // return this.arc4UintN64(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_str(a: bytes) -> bytes: -get_arc4_str: - // tests/artifacts/state-ops/contract.algo.ts:842-843 - // @arc4.abimethod() - // get_arc4_str(a: Account): Str { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:844 - // return this.arc4Str(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:774 - // arc4Str = LocalState({ key: 'explicit_key_arc4_str' }) - bytec 13 // "explicit_key_arc4_str" - // tests/artifacts/state-ops/contract.algo.ts:844 - // return this.arc4Str(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_byte(a: bytes) -> bytes: -get_arc4_byte: - // tests/artifacts/state-ops/contract.algo.ts:847-848 - // @arc4.abimethod() - // get_arc4_byte(a: Account): Byte { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:849 - // return this.arc4Byte(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:775 - // arc4Byte = LocalState({ key: 'explicit_key_arc4_byte' }) - bytec 14 // "explicit_key_arc4_byte" - // tests/artifacts/state-ops/contract.algo.ts:849 - // return this.arc4Byte(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_bool(a: bytes) -> bytes: -get_arc4_bool: - // tests/artifacts/state-ops/contract.algo.ts:852-853 - // @arc4.abimethod() - // get_arc4_bool(a: Account): Bool { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:854 - // return this.arc4Bool(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:776 - // arc4Bool = LocalState({ key: 'explicit_key_arc4_bool' }) - bytec 15 // "explicit_key_arc4_bool" - // tests/artifacts/state-ops/contract.algo.ts:854 - // return this.arc4Bool(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_address(a: bytes) -> bytes: -get_arc4_address: - // tests/artifacts/state-ops/contract.algo.ts:857-858 - // @arc4.abimethod() - // get_arc4_address(a: Account): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:859 - // return this.arc4Address(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:777 - // arc4Address = LocalState
({ key: 'explicit_key_arc4_address' }) - bytec 16 // "explicit_key_arc4_address" - // tests/artifacts/state-ops/contract.algo.ts:859 - // return this.arc4Address(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_uintn128(a: bytes) -> bytes: -get_arc4_uintn128: - // tests/artifacts/state-ops/contract.algo.ts:862-863 - // @arc4.abimethod() - // get_arc4_uintn128(a: Account): UintN128 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:864 - // return this.arc4UintN128(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:778 - // arc4UintN128 = LocalState({ key: 'explicit_key_arc4_uintn128' }) - bytec 17 // "explicit_key_arc4_uintn128" - // tests/artifacts/state-ops/contract.algo.ts:864 - // return this.arc4UintN128(a).value - app_local_get_ex - assert // check LocalState exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::LocalStateContract.get_arc4_dynamic_bytes(a: bytes) -> bytes: -get_arc4_dynamic_bytes: - // tests/artifacts/state-ops/contract.algo.ts:867-868 - // @arc4.abimethod() - // get_arc4_dynamic_bytes(a: Account): DynamicBytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:869 - // return this.arc4DynamicBytes(a).value - frame_dig -1 - intc_1 // 0 - // tests/artifacts/state-ops/contract.algo.ts:779 - // arc4DynamicBytes = LocalState({ key: 'explicit_key_arc4_dynamic_bytes' }) - bytec 18 // "explicit_key_arc4_dynamic_bytes" - // tests/artifacts/state-ops/contract.algo.ts:869 - // return this.arc4DynamicBytes(a).value - app_local_get_ex - assert // check LocalState exists - retsub diff --git a/tests/artifacts/state-ops/data/LocalStateContract.arc32.json b/tests/artifacts/state-ops/data/LocalStateContract.arc32.json deleted file mode 100644 index 1eaf0cd..0000000 --- a/tests/artifacts/state-ops/data/LocalStateContract.arc32.json +++ /dev/null @@ -1,359 +0,0 @@ -{ - "hints": { - "opt_in()void": { - "call_config": { - "opt_in": "CALL" - } - }, - "get_implicit_key_arc4_uintn64(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_str(account)string": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_byte(account)byte": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_bool(account)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_address(account)address": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_uintn128(account)uint128": { - "call_config": { - "no_op": "CALL" - } - }, - "get_implicit_key_arc4_dynamic_bytes(account)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_uintn64(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_str(account)string": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_byte(account)byte": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_bool(account)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_address(account)address": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_uintn128(account)uint128": { - "call_config": { - "no_op": "CALL" - } - }, - "get_arc4_dynamic_bytes(account)byte[]": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImltcGxpY2l0S2V5QXJjNFVpbnRONjQiIDB4MDAwMDAwMDAwMDAwMDUzOSAiaW1wbGljaXRLZXlBcmM0U3RyIiAweDAwMDU0ODY1NmM2YzZmICJpbXBsaWNpdEtleUFyYzRCeXRlIiAiaW1wbGljaXRLZXlBcmM0Qm9vbCIgImltcGxpY2l0S2V5QXJjNEFkZHJlc3MiICJpbXBsaWNpdEtleUFyYzRVaW50TjEyOCIgMHgwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAiaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzIiAweDAwMGQ2NDc5NmU2MTZkNjk2MzIwNjI3OTc0NjU3MyAiZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCIgImV4cGxpY2l0X2tleV9hcmM0X3N0ciIgImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIiAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIgImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IiAiZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AyMAogICAgcHVzaGJ5dGVzcyAweDMwYzZkNThhIDB4ZWVjZGYwYTAgMHg2YzZmMTdkYSAweGVjZjYzM2IwIDB4M2U1MzEyMjMgMHgzZWQ2Nzk5ZCAweDZmZWNkZDgwIDB4Njc2YTg3YzIgMHgxZTBmODk1MSAweDQyZTg1ZmQ3IDB4NjUyMWQ0OWIgMHhlMDdjNTZjZCAweGFhMTlkMmI1IDB4YjkyMjMxMmQgMHhmYzBmZWVkOSAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoYWNjb3VudClzdHJpbmciLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKGFjY291bnQpYnl0ZSIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2woYWNjb3VudClib29sIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyhhY2NvdW50KWFkZHJlc3MiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOChhY2NvdW50KXVpbnQxMjgiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzKGFjY291bnQpYnl0ZVtdIiwgbWV0aG9kICJnZXRfYXJjNF91aW50bjY0KGFjY291bnQpdWludDY0IiwgbWV0aG9kICJnZXRfYXJjNF9zdHIoYWNjb3VudClzdHJpbmciLCBtZXRob2QgImdldF9hcmM0X2J5dGUoYWNjb3VudClieXRlIiwgbWV0aG9kICJnZXRfYXJjNF9ib29sKGFjY291bnQpYm9vbCIsIG1ldGhvZCAiZ2V0X2FyYzRfYWRkcmVzcyhhY2NvdW50KWFkZHJlc3MiLCBtZXRob2QgImdldF9hcmM0X3VpbnRuMTI4KGFjY291bnQpdWludDEyOCIsIG1ldGhvZCAiZ2V0X2FyYzRfZHluYW1pY19ieXRlcyhhY2NvdW50KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3JvdXRlQDMgbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NF9yb3V0ZUA0IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cl9yb3V0ZUA1IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANiBtYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sX3JvdXRlQDcgbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUA4IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDkgbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxMCBtYWluX2dldF9hcmM0X3VpbnRuNjRfcm91dGVAMTEgbWFpbl9nZXRfYXJjNF9zdHJfcm91dGVAMTIgbWFpbl9nZXRfYXJjNF9ieXRlX3JvdXRlQDEzIG1haW5fZ2V0X2FyYzRfYm9vbF9yb3V0ZUAxNCBtYWluX2dldF9hcmM0X2FkZHJlc3Nfcm91dGVAMTUgbWFpbl9nZXRfYXJjNF91aW50bjEyOF9yb3V0ZUAxNiBtYWluX2dldF9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMTcKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF9keW5hbWljX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X3VpbnRuMTI4X3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9hcmM0X3VpbnRuMTI4CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X2FkZHJlc3Nfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYyCiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X2FyYzRfYWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXJjNF9ib29sX3JvdXRlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9hcmM0X2Jvb2wKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfYnl0ZV9yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF9ieXRlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X3N0cl9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF9zdHIKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfdWludG42NF9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF91aW50bjY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOF9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYyCiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2wKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODA2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYyCiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdF9pbl9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ09wdEluJ10gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBPcHRJbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE9wdEluCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgb3B0X2luCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3Qub3B0X2luKCkgLT4gdm9pZDoKb3B0X2luOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4MS03ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydPcHRJbiddIH0pCiAgICAvLyBvcHRfaW4oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODMKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IFVpbnRONjQoMTMzNykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2NAogICAgLy8gaW1wbGljaXRLZXlBcmM0VWludE42NCA9IExvY2FsU3RhdGU8VWludE42ND4oKQogICAgYnl0ZWNfMSAvLyAiaW1wbGljaXRLZXlBcmM0VWludE42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODMKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IFVpbnRONjQoMTMzNykKICAgIGJ5dGVjXzIgLy8gMHgwMDAwMDAwMDAwMDAwNTM5CiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg0CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNFN0cihHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IFN0cignSGVsbG8nKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzY1CiAgICAvLyBpbXBsaWNpdEtleUFyYzRTdHIgPSBMb2NhbFN0YXRlPFN0cj4oKQogICAgYnl0ZWNfMyAvLyAiaW1wbGljaXRLZXlBcmM0U3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4NAogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBTdHIoJ0hlbGxvJykKICAgIGJ5dGVjIDQgLy8gMHgwMDA1NDg2NTZjNmM2ZgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4NQogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRCeXRlKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgQnl0ZSgwKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzY2CiAgICAvLyBpbXBsaWNpdEtleUFyYzRCeXRlID0gTG9jYWxTdGF0ZTxCeXRlPigpCiAgICBieXRlYyA1IC8vICJpbXBsaWNpdEtleUFyYzRCeXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4NQogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRCeXRlKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgQnl0ZSgwKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODYKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2NwogICAgLy8gaW1wbGljaXRLZXlBcmM0Qm9vbCA9IExvY2FsU3RhdGU8Qm9vbD4oKQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRLZXlBcmM0Qm9vbCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODYKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIHB1c2hieXRlcyAweDgwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg3CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2OAogICAgLy8gaW1wbGljaXRLZXlBcmM0QWRkcmVzcyA9IExvY2FsU3RhdGU8QWRkcmVzcz4oKQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODcKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg4CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnROMTI4KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgVWludE4xMjgoMm4gKiogMTAwbikKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2OQogICAgLy8gaW1wbGljaXRLZXlBcmM0VWludE4xMjggPSBMb2NhbFN0YXRlPFVpbnROMTI4PigpCiAgICBieXRlYyA4IC8vICJpbXBsaWNpdEtleUFyYzRVaW50TjEyOCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODgKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKQogICAgYnl0ZWMgOSAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg5CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IER5bmFtaWNCeXRlcygnZHluYW1pYyBieXRlcycpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzAKICAgIC8vIGltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyA9IExvY2FsU3RhdGU8RHluYW1pY0J5dGVzPigpCiAgICBieXRlYyAxMCAvLyAiaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4OQogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzREeW5hbWljQnl0ZXMoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKQogICAgYnl0ZWMgMTEgLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIHRoaXMuYXJjNFVpbnRONjQoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjY0KDEzMzcpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzMKICAgIC8vIGFyYzRVaW50TjY0ID0gTG9jYWxTdGF0ZTxVaW50TjY0Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIHRoaXMuYXJjNFVpbnRONjQoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjY0KDEzMzcpCiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDUzOQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5MgogICAgLy8gdGhpcy5hcmM0U3RyKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgU3RyKCdIZWxsbycpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzQKICAgIC8vIGFyYzRTdHIgPSBMb2NhbFN0YXRlPFN0cj4oeyBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9zdHInIH0pCiAgICBieXRlYyAxMyAvLyAiZXhwbGljaXRfa2V5X2FyYzRfc3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5MgogICAgLy8gdGhpcy5hcmM0U3RyKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgU3RyKCdIZWxsbycpCiAgICBieXRlYyA0IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTMKICAgIC8vIHRoaXMuYXJjNEJ5dGUoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBCeXRlKDApCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzUKICAgIC8vIGFyYzRCeXRlID0gTG9jYWxTdGF0ZTxCeXRlPih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2J5dGUnIH0pCiAgICBieXRlYyAxNCAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYnl0ZSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTMKICAgIC8vIHRoaXMuYXJjNEJ5dGUoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBCeXRlKDApCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NAogICAgLy8gdGhpcy5hcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NgogICAgLy8gYXJjNEJvb2wgPSBMb2NhbFN0YXRlPEJvb2w+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDE1IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NAogICAgLy8gdGhpcy5hcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIHB1c2hieXRlcyAweDgwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzk1CiAgICAvLyB0aGlzLmFyYzRBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgQWRkcmVzcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzcKICAgIC8vIGFyYzRBZGRyZXNzID0gTG9jYWxTdGF0ZTxBZGRyZXNzPih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MnIH0pCiAgICBieXRlYyAxNiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTUKICAgIC8vIHRoaXMuYXJjNEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NgogICAgLy8gdGhpcy5hcmM0VWludE4xMjgoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc4CiAgICAvLyBhcmM0VWludE4xMjggPSBMb2NhbFN0YXRlPFVpbnROMTI4Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4JyB9KQogICAgYnl0ZWMgMTcgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NgogICAgLy8gdGhpcy5hcmM0VWludE4xMjgoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKQogICAgYnl0ZWMgOSAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzk3CiAgICAvLyB0aGlzLmFyYzREeW5hbWljQnl0ZXMoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhcmM0RHluYW1pY0J5dGVzID0gTG9jYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcycgfSkKICAgIGJ5dGVjIDE4IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NwogICAgLy8gdGhpcy5hcmM0RHluYW1pY0J5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJykKICAgIGJ5dGVjIDExIC8vIDB4MDAwZDY0Nzk2ZTYxNmQ2OTYzMjA2Mjc5NzQ2NTczCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NChhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwMS04MDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NChhOiBBY2NvdW50KTogVWludE42NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MDMKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnRONjQoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjQKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnRONjQgPSBMb2NhbFN0YXRlPFVpbnRONjQ+KCkKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0S2V5QXJjNFVpbnRONjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODAzCiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRVaW50TjY0KGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwNi04MDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyKGE6IEFjY291bnQpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODA4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjUKICAgIC8vIGltcGxpY2l0S2V5QXJjNFN0ciA9IExvY2FsU3RhdGU8U3RyPigpCiAgICBieXRlY18zIC8vICJpbXBsaWNpdEtleUFyYzRTdHIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODA4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MTEtODEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYTogQWNjb3VudCk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODEzCiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRCeXRlKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzY2CiAgICAvLyBpbXBsaWNpdEtleUFyYzRCeXRlID0gTG9jYWxTdGF0ZTxCeXRlPigpCiAgICBieXRlYyA1IC8vICJpbXBsaWNpdEtleUFyYzRCeXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxMwogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0Qnl0ZShhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxNi04MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChhOiBBY2NvdW50KTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MTgKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEJvb2woYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjcKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBMb2NhbFN0YXRlPEJvb2w+KCkKICAgIGJ5dGVjIDYgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODE4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRCb29sKGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGE6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIxLTgyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGE6IEFjY291bnQpOiBBZGRyZXNzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyMwogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcyhhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2OAogICAgLy8gaW1wbGljaXRLZXlBcmM0QWRkcmVzcyA9IExvY2FsU3RhdGU8QWRkcmVzcz4oKQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MjMKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEFkZHJlc3MoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KGE6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyNi04MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG4xMjgoYTogQWNjb3VudCk6IFVpbnROMTI4IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyOAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjkKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnROMTI4ID0gTG9jYWxTdGF0ZTxVaW50TjEyOD4oKQogICAgYnl0ZWMgOCAvLyAiaW1wbGljaXRLZXlBcmM0VWludE4xMjgiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODI4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRVaW50TjEyOChhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzMS04MzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyhhOiBBY2NvdW50KTogRHluYW1pY0J5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzMwogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzcwCiAgICAvLyBpbXBsaWNpdEtleUFyYzREeW5hbWljQnl0ZXMgPSBMb2NhbFN0YXRlPER5bmFtaWNCeXRlcz4oKQogICAgYnl0ZWMgMTAgLy8gImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzMKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyhhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfYXJjNF91aW50bjY0KGE6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzctODM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfdWludG42NChhOiBBY2NvdW50KTogYXJjNC5VaW50TjY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzOQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnRONjQoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzMKICAgIC8vIGFyYzRVaW50TjY0ID0gTG9jYWxTdGF0ZTxVaW50TjY0Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzkKICAgIC8vIHJldHVybiB0aGlzLmFyYzRVaW50TjY0KGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3N0cihhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X3N0cjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDItODQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfc3RyKGE6IEFjY291bnQpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ0CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0U3RyKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc0CiAgICAvLyBhcmM0U3RyID0gTG9jYWxTdGF0ZTxTdHI+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfc3RyJyB9KQogICAgYnl0ZWMgMTMgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0ciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDQKICAgIC8vIHJldHVybiB0aGlzLmFyYzRTdHIoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYnl0ZShhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X2J5dGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ3LTg0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2J5dGUoYTogQWNjb3VudCk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ5CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qnl0ZShhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NQogICAgLy8gYXJjNEJ5dGUgPSBMb2NhbFN0YXRlPEJ5dGU+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYnl0ZScgfSkKICAgIGJ5dGVjIDE0IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0OQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJ5dGUoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYm9vbChhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUyLTg1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2Jvb2woYTogQWNjb3VudCk6IEJvb2wgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU0CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qm9vbChhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NgogICAgLy8gYXJjNEJvb2wgPSBMb2NhbFN0YXRlPEJvb2w+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDE1IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1NAogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJvb2woYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYWRkcmVzcyhhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU3LTg1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2FkZHJlc3MoYTogQWNjb3VudCk6IEFkZHJlc3MgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU5CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0QWRkcmVzcyhhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NwogICAgLy8gYXJjNEFkZHJlc3MgPSBMb2NhbFN0YXRlPEFkZHJlc3M+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcycgfSkKICAgIGJ5dGVjIDE2IC8vICJleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1OQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEFkZHJlc3MoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfdWludG4xMjgoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYXJjNF91aW50bjEyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NjItODYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfdWludG4xMjgoYTogQWNjb3VudCk6IFVpbnROMTI4IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2NAogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnROMTI4KGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc4CiAgICAvLyBhcmM0VWludE4xMjggPSBMb2NhbFN0YXRlPFVpbnROMTI4Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4JyB9KQogICAgYnl0ZWMgMTcgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2NAogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnROMTI4KGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2R5bmFtaWNfYnl0ZXMoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2Ny04NjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF9keW5hbWljX2J5dGVzKGE6IEFjY291bnQpOiBEeW5hbWljQnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODY5CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0RHluYW1pY0J5dGVzKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhcmM0RHluYW1pY0J5dGVzID0gTG9jYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcycgfSkKICAgIGJ5dGVjIDE4IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2OQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNER5bmFtaWNCeXRlcyhhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 14, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": { - "arc4Address": { - "type": "bytes", - "key": "explicit_key_arc4_address" - }, - "arc4Bool": { - "type": "bytes", - "key": "explicit_key_arc4_bool" - }, - "arc4Byte": { - "type": "bytes", - "key": "explicit_key_arc4_byte" - }, - "arc4DynamicBytes": { - "type": "bytes", - "key": "explicit_key_arc4_dynamic_bytes" - }, - "arc4Str": { - "type": "bytes", - "key": "explicit_key_arc4_str" - }, - "arc4UintN128": { - "type": "bytes", - "key": "explicit_key_arc4_uintn128" - }, - "arc4UintN64": { - "type": "bytes", - "key": "explicit_key_arc4_uintn64" - }, - "implicitKeyArc4Address": { - "type": "bytes", - "key": "implicitKeyArc4Address" - }, - "implicitKeyArc4Bool": { - "type": "bytes", - "key": "implicitKeyArc4Bool" - }, - "implicitKeyArc4Byte": { - "type": "bytes", - "key": "implicitKeyArc4Byte" - }, - "implicitKeyArc4DynamicBytes": { - "type": "bytes", - "key": "implicitKeyArc4DynamicBytes" - }, - "implicitKeyArc4Str": { - "type": "bytes", - "key": "implicitKeyArc4Str" - }, - "implicitKeyArc4UintN128": { - "type": "bytes", - "key": "implicitKeyArc4UintN128" - }, - "implicitKeyArc4UintN64": { - "type": "bytes", - "key": "implicitKeyArc4UintN64" - } - }, - "reserved": {} - } - }, - "contract": { - "name": "LocalStateContract", - "methods": [ - { - "name": "opt_in", - "args": [], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "get_implicit_key_arc4_uintn64", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "get_implicit_key_arc4_str", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "get_implicit_key_arc4_byte", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "get_implicit_key_arc4_bool", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "get_implicit_key_arc4_address", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "get_implicit_key_arc4_uintn128", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint128" - } - }, - { - "name": "get_implicit_key_arc4_dynamic_bytes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "get_arc4_uintn64", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "get_arc4_str", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "get_arc4_byte", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "get_arc4_bool", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "get_arc4_address", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "get_arc4_uintn128", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint128" - } - }, - { - "name": "get_arc4_dynamic_bytes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/LocalStateContract.arc56.json b/tests/artifacts/state-ops/data/LocalStateContract.arc56.json deleted file mode 100644 index 8fc5fc3..0000000 --- a/tests/artifacts/state-ops/data/LocalStateContract.arc56.json +++ /dev/null @@ -1,519 +0,0 @@ -{ - "name": "LocalStateContract", - "structs": {}, - "methods": [ - { - "name": "opt_in", - "args": [], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "OptIn" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_uintn64", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_str", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_byte", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_bool", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_address", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_uintn128", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint128" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_implicit_key_arc4_dynamic_bytes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_uintn64", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_str", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "string" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_byte", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "byte" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_bool", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_address", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_uintn128", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint128" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "get_arc4_dynamic_bytes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 14 - } - }, - "keys": { - "global": {}, - "local": { - "implicitKeyArc4UintN64": { - "keyType": "AVMString", - "valueType": "uint64", - "key": "aW1wbGljaXRLZXlBcmM0VWludE42NA==" - }, - "implicitKeyArc4Str": { - "keyType": "AVMString", - "valueType": "string", - "key": "aW1wbGljaXRLZXlBcmM0U3Ry" - }, - "implicitKeyArc4Byte": { - "keyType": "AVMString", - "valueType": "byte", - "key": "aW1wbGljaXRLZXlBcmM0Qnl0ZQ==" - }, - "implicitKeyArc4Bool": { - "keyType": "AVMString", - "valueType": "bool", - "key": "aW1wbGljaXRLZXlBcmM0Qm9vbA==" - }, - "implicitKeyArc4Address": { - "keyType": "AVMString", - "valueType": "address", - "key": "aW1wbGljaXRLZXlBcmM0QWRkcmVzcw==" - }, - "implicitKeyArc4UintN128": { - "keyType": "AVMString", - "valueType": "uint128", - "key": "aW1wbGljaXRLZXlBcmM0VWludE4xMjg=" - }, - "implicitKeyArc4DynamicBytes": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "aW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVz" - }, - "arc4UintN64": { - "keyType": "AVMString", - "valueType": "uint64", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfdWludG42NA==" - }, - "arc4Str": { - "keyType": "AVMString", - "valueType": "string", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfc3Ry" - }, - "arc4Byte": { - "keyType": "AVMString", - "valueType": "byte", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfYnl0ZQ==" - }, - "arc4Bool": { - "keyType": "AVMString", - "valueType": "bool", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfYm9vbA==" - }, - "arc4Address": { - "keyType": "AVMString", - "valueType": "address", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcw==" - }, - "arc4UintN128": { - "keyType": "AVMString", - "valueType": "uint128", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfdWludG4xMjg=" - }, - "arc4DynamicBytes": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "ZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcw==" - } - }, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 520, - 542, - 564, - 586, - 608, - 630, - 652, - 674, - 696, - 718, - 740, - 762, - 784, - 806 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 829 - ], - "errorMessage": "OnCompletion is not OptIn" - }, - { - "pc": [ - 846 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 523, - 545, - 567, - 589, - 611, - 633, - 655, - 677, - 699, - 721, - 743, - 765, - 787, - 809, - 832 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 959, - 969, - 980, - 991, - 1002, - 1013, - 1024, - 1035, - 1046, - 1057, - 1068, - 1079, - 1090, - 1101 - ], - "errorMessage": "check LocalState exists" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImltcGxpY2l0S2V5QXJjNFVpbnRONjQiIDB4MDAwMDAwMDAwMDAwMDUzOSAiaW1wbGljaXRLZXlBcmM0U3RyIiAweDAwMDU0ODY1NmM2YzZmICJpbXBsaWNpdEtleUFyYzRCeXRlIiAiaW1wbGljaXRLZXlBcmM0Qm9vbCIgImltcGxpY2l0S2V5QXJjNEFkZHJlc3MiICJpbXBsaWNpdEtleUFyYzRVaW50TjEyOCIgMHgwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAiaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzIiAweDAwMGQ2NDc5NmU2MTZkNjk2MzIwNjI3OTc0NjU3MyAiZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCIgImV4cGxpY2l0X2tleV9hcmM0X3N0ciIgImV4cGxpY2l0X2tleV9hcmM0X2J5dGUiICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIiAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIgImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IiAiZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AyMAogICAgcHVzaGJ5dGVzcyAweDMwYzZkNThhIDB4ZWVjZGYwYTAgMHg2YzZmMTdkYSAweGVjZjYzM2IwIDB4M2U1MzEyMjMgMHgzZWQ2Nzk5ZCAweDZmZWNkZDgwIDB4Njc2YTg3YzIgMHgxZTBmODk1MSAweDQyZTg1ZmQ3IDB4NjUyMWQ0OWIgMHhlMDdjNTZjZCAweGFhMTlkMmI1IDB4YjkyMjMxMmQgMHhmYzBmZWVkOSAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuNjQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoYWNjb3VudClzdHJpbmciLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9ieXRlKGFjY291bnQpYnl0ZSIsIG1ldGhvZCAiZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2woYWNjb3VudClib29sIiwgbWV0aG9kICJnZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzcyhhY2NvdW50KWFkZHJlc3MiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOChhY2NvdW50KXVpbnQxMjgiLCBtZXRob2QgImdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzKGFjY291bnQpYnl0ZVtdIiwgbWV0aG9kICJnZXRfYXJjNF91aW50bjY0KGFjY291bnQpdWludDY0IiwgbWV0aG9kICJnZXRfYXJjNF9zdHIoYWNjb3VudClzdHJpbmciLCBtZXRob2QgImdldF9hcmM0X2J5dGUoYWNjb3VudClieXRlIiwgbWV0aG9kICJnZXRfYXJjNF9ib29sKGFjY291bnQpYm9vbCIsIG1ldGhvZCAiZ2V0X2FyYzRfYWRkcmVzcyhhY2NvdW50KWFkZHJlc3MiLCBtZXRob2QgImdldF9hcmM0X3VpbnRuMTI4KGFjY291bnQpdWludDEyOCIsIG1ldGhvZCAiZ2V0X2FyYzRfZHluYW1pY19ieXRlcyhhY2NvdW50KWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3JvdXRlQDMgbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NF9yb3V0ZUA0IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cl9yb3V0ZUA1IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANiBtYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sX3JvdXRlQDcgbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUA4IG1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4X3JvdXRlQDkgbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxMCBtYWluX2dldF9hcmM0X3VpbnRuNjRfcm91dGVAMTEgbWFpbl9nZXRfYXJjNF9zdHJfcm91dGVAMTIgbWFpbl9nZXRfYXJjNF9ieXRlX3JvdXRlQDEzIG1haW5fZ2V0X2FyYzRfYm9vbF9yb3V0ZUAxNCBtYWluX2dldF9hcmM0X2FkZHJlc3Nfcm91dGVAMTUgbWFpbl9nZXRfYXJjNF91aW50bjEyOF9yb3V0ZUAxNiBtYWluX2dldF9hcmM0X2R5bmFtaWNfYnl0ZXNfcm91dGVAMTcKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF9keW5hbWljX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X3VpbnRuMTI4X3JvdXRlQDE2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9hcmM0X3VpbnRuMTI4CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X2FkZHJlc3Nfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYyCiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X2FyYzRfYWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXJjNF9ib29sX3JvdXRlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9hcmM0X2Jvb2wKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfYnl0ZV9yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF9ieXRlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hcmM0X3N0cl9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF9zdHIKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FyYzRfdWludG42NF9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfYXJjNF91aW50bjY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOF9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjEyOAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfYWRkcmVzc19yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYyCiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2Jvb2wKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODA2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzYyCiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZUNvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3N0cgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2MgogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX29wdF9pbl9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ09wdEluJ10gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBPcHRJbgogICAgPT0KICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE9wdEluCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgb3B0X2luCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjIKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3Qub3B0X2luKCkgLT4gdm9pZDoKb3B0X2luOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4MS03ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydPcHRJbiddIH0pCiAgICAvLyBvcHRfaW4oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODMKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IFVpbnRONjQoMTMzNykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2NAogICAgLy8gaW1wbGljaXRLZXlBcmM0VWludE42NCA9IExvY2FsU3RhdGU8VWludE42ND4oKQogICAgYnl0ZWNfMSAvLyAiaW1wbGljaXRLZXlBcmM0VWludE42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODMKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE42NChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IFVpbnRONjQoMTMzNykKICAgIGJ5dGVjXzIgLy8gMHgwMDAwMDAwMDAwMDAwNTM5CiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg0CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNFN0cihHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IFN0cignSGVsbG8nKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzY1CiAgICAvLyBpbXBsaWNpdEtleUFyYzRTdHIgPSBMb2NhbFN0YXRlPFN0cj4oKQogICAgYnl0ZWNfMyAvLyAiaW1wbGljaXRLZXlBcmM0U3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4NAogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBTdHIoJ0hlbGxvJykKICAgIGJ5dGVjIDQgLy8gMHgwMDA1NDg2NTZjNmM2ZgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4NQogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRCeXRlKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgQnl0ZSgwKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzY2CiAgICAvLyBpbXBsaWNpdEtleUFyYzRCeXRlID0gTG9jYWxTdGF0ZTxCeXRlPigpCiAgICBieXRlYyA1IC8vICJpbXBsaWNpdEtleUFyYzRCeXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4NQogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzRCeXRlKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgQnl0ZSgwKQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODYKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2NwogICAgLy8gaW1wbGljaXRLZXlBcmM0Qm9vbCA9IExvY2FsU3RhdGU8Qm9vbD4oKQogICAgYnl0ZWMgNiAvLyAiaW1wbGljaXRLZXlBcmM0Qm9vbCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODYKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIHB1c2hieXRlcyAweDgwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg3CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2OAogICAgLy8gaW1wbGljaXRLZXlBcmM0QWRkcmVzcyA9IExvY2FsU3RhdGU8QWRkcmVzcz4oKQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODcKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg4CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnROMTI4KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgVWludE4xMjgoMm4gKiogMTAwbikKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2OQogICAgLy8gaW1wbGljaXRLZXlBcmM0VWludE4xMjggPSBMb2NhbFN0YXRlPFVpbnROMTI4PigpCiAgICBieXRlYyA4IC8vICJpbXBsaWNpdEtleUFyYzRVaW50TjEyOCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3ODgKICAgIC8vIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKQogICAgYnl0ZWMgOSAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzg5CiAgICAvLyB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IER5bmFtaWNCeXRlcygnZHluYW1pYyBieXRlcycpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzAKICAgIC8vIGltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyA9IExvY2FsU3RhdGU8RHluYW1pY0J5dGVzPigpCiAgICBieXRlYyAxMCAvLyAiaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4OQogICAgLy8gdGhpcy5pbXBsaWNpdEtleUFyYzREeW5hbWljQnl0ZXMoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKQogICAgYnl0ZWMgMTEgLy8gMHgwMDBkNjQ3OTZlNjE2ZDY5NjMyMDYyNzk3NDY1NzMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIHRoaXMuYXJjNFVpbnRONjQoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjY0KDEzMzcpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzMKICAgIC8vIGFyYzRVaW50TjY0ID0gTG9jYWxTdGF0ZTxVaW50TjY0Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIHRoaXMuYXJjNFVpbnRONjQoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjY0KDEzMzcpCiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDUzOQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5MgogICAgLy8gdGhpcy5hcmM0U3RyKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgU3RyKCdIZWxsbycpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzQKICAgIC8vIGFyYzRTdHIgPSBMb2NhbFN0YXRlPFN0cj4oeyBrZXk6ICdleHBsaWNpdF9rZXlfYXJjNF9zdHInIH0pCiAgICBieXRlYyAxMyAvLyAiZXhwbGljaXRfa2V5X2FyYzRfc3RyIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5MgogICAgLy8gdGhpcy5hcmM0U3RyKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgU3RyKCdIZWxsbycpCiAgICBieXRlYyA0IC8vIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTMKICAgIC8vIHRoaXMuYXJjNEJ5dGUoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBCeXRlKDApCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzUKICAgIC8vIGFyYzRCeXRlID0gTG9jYWxTdGF0ZTxCeXRlPih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2J5dGUnIH0pCiAgICBieXRlYyAxNCAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYnl0ZSIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTMKICAgIC8vIHRoaXMuYXJjNEJ5dGUoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBCeXRlKDApCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NAogICAgLy8gdGhpcy5hcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NgogICAgLy8gYXJjNEJvb2wgPSBMb2NhbFN0YXRlPEJvb2w+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDE1IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NAogICAgLy8gdGhpcy5hcmM0Qm9vbChHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IEJvb2wodHJ1ZSkKICAgIHB1c2hieXRlcyAweDgwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzk1CiAgICAvLyB0aGlzLmFyYzRBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgQWRkcmVzcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzcKICAgIC8vIGFyYzRBZGRyZXNzID0gTG9jYWxTdGF0ZTxBZGRyZXNzPih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X2FkZHJlc3MnIH0pCiAgICBieXRlYyAxNiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OTUKICAgIC8vIHRoaXMuYXJjNEFkZHJlc3MoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBBZGRyZXNzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NgogICAgLy8gdGhpcy5hcmM0VWludE4xMjgoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc4CiAgICAvLyBhcmM0VWludE4xMjggPSBMb2NhbFN0YXRlPFVpbnROMTI4Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4JyB9KQogICAgYnl0ZWMgMTcgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NgogICAgLy8gdGhpcy5hcmM0VWludE4xMjgoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBVaW50TjEyOCgybiAqKiAxMDBuKQogICAgYnl0ZWMgOSAvLyAweDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzk3CiAgICAvLyB0aGlzLmFyYzREeW5hbWljQnl0ZXMoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IG5ldyBEeW5hbWljQnl0ZXMoJ2R5bmFtaWMgYnl0ZXMnKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhcmM0RHluYW1pY0J5dGVzID0gTG9jYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcycgfSkKICAgIGJ5dGVjIDE4IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc5NwogICAgLy8gdGhpcy5hcmM0RHluYW1pY0J5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgRHluYW1pY0J5dGVzKCdkeW5hbWljIGJ5dGVzJykKICAgIGJ5dGVjIDExIC8vIDB4MDAwZDY0Nzk2ZTYxNmQ2OTYzMjA2Mjc5NzQ2NTczCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NChhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF91aW50bjY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwMS04MDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG42NChhOiBBY2NvdW50KTogVWludE42NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MDMKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNFVpbnRONjQoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjQKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnRONjQgPSBMb2NhbFN0YXRlPFVpbnRONjQ+KCkKICAgIGJ5dGVjXzEgLy8gImltcGxpY2l0S2V5QXJjNFVpbnRONjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODAzCiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRVaW50TjY0KGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9zdHIoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwNi04MDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfc3RyKGE6IEFjY291bnQpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODA4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjUKICAgIC8vIGltcGxpY2l0S2V5QXJjNFN0ciA9IExvY2FsU3RhdGU8U3RyPigpCiAgICBieXRlY18zIC8vICJpbXBsaWNpdEtleUFyYzRTdHIiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODA4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRTdHIoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfaW1wbGljaXRfa2V5X2FyYzRfYnl0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MTEtODEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2J5dGUoYTogQWNjb3VudCk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODEzCiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRCeXRlKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzY2CiAgICAvLyBpbXBsaWNpdEtleUFyYzRCeXRlID0gTG9jYWxTdGF0ZTxCeXRlPigpCiAgICBieXRlYyA1IC8vICJpbXBsaWNpdEtleUFyYzRCeXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxMwogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0Qnl0ZShhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9ib29sOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxNi04MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfYm9vbChhOiBBY2NvdW50KTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MTgKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEJvb2woYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjcKICAgIC8vIGltcGxpY2l0S2V5QXJjNEJvb2wgPSBMb2NhbFN0YXRlPEJvb2w+KCkKICAgIGJ5dGVjIDYgLy8gImltcGxpY2l0S2V5QXJjNEJvb2wiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODE4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRCb29sKGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGE6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIxLTgyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9pbXBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzKGE6IEFjY291bnQpOiBBZGRyZXNzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyMwogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0QWRkcmVzcyhhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2OAogICAgLy8gaW1wbGljaXRLZXlBcmM0QWRkcmVzcyA9IExvY2FsU3RhdGU8QWRkcmVzcz4oKQogICAgYnl0ZWMgNyAvLyAiaW1wbGljaXRLZXlBcmM0QWRkcmVzcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MjMKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNEFkZHJlc3MoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4KGE6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2ltcGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyNi04MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfdWludG4xMjgoYTogQWNjb3VudCk6IFVpbnROMTI4IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyOAogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0VWludE4xMjgoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NjkKICAgIC8vIGltcGxpY2l0S2V5QXJjNFVpbnROMTI4ID0gTG9jYWxTdGF0ZTxVaW50TjEyOD4oKQogICAgYnl0ZWMgOCAvLyAiaW1wbGljaXRLZXlBcmM0VWludE4xMjgiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODI4CiAgICAvLyByZXR1cm4gdGhpcy5pbXBsaWNpdEtleUFyYzRVaW50TjEyOChhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9pbXBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzMS04MzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfaW1wbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcyhhOiBBY2NvdW50KTogRHluYW1pY0J5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzMwogICAgLy8gcmV0dXJuIHRoaXMuaW1wbGljaXRLZXlBcmM0RHluYW1pY0J5dGVzKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzcwCiAgICAvLyBpbXBsaWNpdEtleUFyYzREeW5hbWljQnl0ZXMgPSBMb2NhbFN0YXRlPER5bmFtaWNCeXRlcz4oKQogICAgYnl0ZWMgMTAgLy8gImltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzMKICAgIC8vIHJldHVybiB0aGlzLmltcGxpY2l0S2V5QXJjNER5bmFtaWNCeXRlcyhhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkxvY2FsU3RhdGVDb250cmFjdC5nZXRfYXJjNF91aW50bjY0KGE6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2FyYzRfdWludG42NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzctODM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfdWludG42NChhOiBBY2NvdW50KTogYXJjNC5VaW50TjY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzOQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnRONjQoYSkudmFsdWUKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NzMKICAgIC8vIGFyYzRVaW50TjY0ID0gTG9jYWxTdGF0ZTxVaW50TjY0Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQnIH0pCiAgICBieXRlYyAxMiAvLyAiZXhwbGljaXRfa2V5X2FyYzRfdWludG42NCIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MzkKICAgIC8vIHJldHVybiB0aGlzLmFyYzRVaW50TjY0KGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X3N0cihhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X3N0cjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDItODQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfc3RyKGE6IEFjY291bnQpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ0CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0U3RyKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc0CiAgICAvLyBhcmM0U3RyID0gTG9jYWxTdGF0ZTxTdHI+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfc3RyJyB9KQogICAgYnl0ZWMgMTMgLy8gImV4cGxpY2l0X2tleV9hcmM0X3N0ciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NDQKICAgIC8vIHJldHVybiB0aGlzLmFyYzRTdHIoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYnl0ZShhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X2J5dGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ3LTg0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2J5dGUoYTogQWNjb3VudCk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODQ5CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qnl0ZShhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NQogICAgLy8gYXJjNEJ5dGUgPSBMb2NhbFN0YXRlPEJ5dGU+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYnl0ZScgfSkKICAgIGJ5dGVjIDE0IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ieXRlIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg0OQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJ5dGUoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYm9vbChhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X2Jvb2w6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUyLTg1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2Jvb2woYTogQWNjb3VudCk6IEJvb2wgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU0CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0Qm9vbChhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NgogICAgLy8gYXJjNEJvb2wgPSBMb2NhbFN0YXRlPEJvb2w+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYm9vbCcgfSkKICAgIGJ5dGVjIDE1IC8vICJleHBsaWNpdF9rZXlfYXJjNF9ib29sIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1NAogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEJvb2woYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfYWRkcmVzcyhhOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcmM0X2FkZHJlc3M6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU3LTg1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGdldF9hcmM0X2FkZHJlc3MoYTogQWNjb3VudCk6IEFkZHJlc3MgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODU5CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0QWRkcmVzcyhhKS52YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3NwogICAgLy8gYXJjNEFkZHJlc3MgPSBMb2NhbFN0YXRlPEFkZHJlc3M+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfYWRkcmVzcycgfSkKICAgIGJ5dGVjIDE2IC8vICJleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1OQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNEFkZHJlc3MoYSkudmFsdWUKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpMb2NhbFN0YXRlQ29udHJhY3QuZ2V0X2FyYzRfdWludG4xMjgoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYXJjNF91aW50bjEyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4NjItODYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZ2V0X2FyYzRfdWludG4xMjgoYTogQWNjb3VudCk6IFVpbnROMTI4IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2NAogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnROMTI4KGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc4CiAgICAvLyBhcmM0VWludE4xMjggPSBMb2NhbFN0YXRlPFVpbnROMTI4Pih7IGtleTogJ2V4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4JyB9KQogICAgYnl0ZWMgMTcgLy8gImV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2NAogICAgLy8gcmV0dXJuIHRoaXMuYXJjNFVpbnROMTI4KGEpLnZhbHVlCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6TG9jYWxTdGF0ZUNvbnRyYWN0LmdldF9hcmM0X2R5bmFtaWNfYnl0ZXMoYTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYXJjNF9keW5hbWljX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2Ny04NjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBnZXRfYXJjNF9keW5hbWljX2J5dGVzKGE6IEFjY291bnQpOiBEeW5hbWljQnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODY5CiAgICAvLyByZXR1cm4gdGhpcy5hcmM0RHluYW1pY0J5dGVzKGEpLnZhbHVlCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhcmM0RHluYW1pY0J5dGVzID0gTG9jYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnZXhwbGljaXRfa2V5X2FyYzRfZHluYW1pY19ieXRlcycgfSkKICAgIGJ5dGVjIDE4IC8vICJleHBsaWNpdF9rZXlfYXJjNF9keW5hbWljX2J5dGVzIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg2OQogICAgLy8gcmV0dXJuIHRoaXMuYXJjNER5bmFtaWNCeXRlcyhhKS52YWx1ZQogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmEwQVH3x1FmltcGxpY2l0S2V5QXJjNFVpbnRONjQIAAAAAAAABTkSaW1wbGljaXRLZXlBcmM0U3RyBwAFSGVsbG8TaW1wbGljaXRLZXlBcmM0Qnl0ZRNpbXBsaWNpdEtleUFyYzRCb29sFmltcGxpY2l0S2V5QXJjNEFkZHJlc3MXaW1wbGljaXRLZXlBcmM0VWludE4xMjgQAAAAEAAAAAAAAAAAAAAAABtpbXBsaWNpdEtleUFyYzREeW5hbWljQnl0ZXMPAA1keW5hbWljIGJ5dGVzGWV4cGxpY2l0X2tleV9hcmM0X3VpbnRuNjQVZXhwbGljaXRfa2V5X2FyYzRfc3RyFmV4cGxpY2l0X2tleV9hcmM0X2J5dGUWZXhwbGljaXRfa2V5X2FyYzRfYm9vbBlleHBsaWNpdF9rZXlfYXJjNF9hZGRyZXNzGmV4cGxpY2l0X2tleV9hcmM0X3VpbnRuMTI4H2V4cGxpY2l0X2tleV9hcmM0X2R5bmFtaWNfYnl0ZXMxG0EBs4IPBDDG1YoE7s3woARsbxfaBOz2M7AEPlMSIwQ+1nmdBG/s3YAEZ2qHwgQeD4lRBELoX9cEZSHUmwTgfFbNBKoZ0rUEuSIxLQT8D+7ZNhoAjg8BNgEgAQoA9ADeAMgAsgCcAIYAcABaAEQALgAYAAIjQzEZFEQxGEQ2GgEXwByIAi8oTFCwIkMxGRREMRhENhoBF8AciAIOKExQsCJDMRkURDEYRDYaARfAHIgB7ShMULAiQzEZFEQxGEQ2GgEXwByIAcwoTFCwIkMxGRREMRhENhoBF8AciAGrKExQsCJDMRkURDEYRDYaARfAHIgBiihMULAiQzEZFEQxGEQ2GgEXwByIAWkoTFCwIkMxGRREMRhENhoBF8AciAFIKExQsCJDMRkURDEYRDYaARfAHIgBJyhMULAiQzEZFEQxGEQ2GgEXwByIAQYoTFCwIkMxGRREMRhENhoBF8AciADlKExQsCJDMRkURDEYRDYaARfAHIgAxChMULAiQzEZFEQxGEQ2GgEXwByIAKQoTFCwIkMxGRREMRhENhoBF8AciACEKExQsCJDMRkiEkQxGESIAA0iQzEZQP64MRgURCJDigAAMgkpKmYyCSsnBGYyCScFgAEAZjIJJwaAAYBmMgknBzIJZjIJJwgnCWYyCScKJwtmMgknDCpmMgknDScEZjIJJw6AAQBmMgknD4ABgGYyCScQMglmMgknEScJZjIJJxInC2aJigEBi/8jKWNEiYoBAYv/IytjRImKAQGL/yMnBWNEiYoBAYv/IycGY0SJigEBi/8jJwdjRImKAQGL/yMnCGNEiYoBAYv/IycKY0SJigEBi/8jJwxjRImKAQGL/yMnDWNEiYoBAYv/IycOY0SJigEBi/8jJw9jRImKAQGL/yMnEGNEiYoBAYv/IycRY0SJigEBi/8jJxJjRIk=", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/LocalStateContract.clear.teal b/tests/artifacts/state-ops/data/LocalStateContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/LocalStateContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.approval.teal b/tests/artifacts/state-ops/data/StateAcctParamsGetContract.approval.teal deleted file mode 100644 index 3abcc98..0000000 --- a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.approval.teal +++ /dev/null @@ -1,836 +0,0 @@ -#pragma version 11 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@18 - pushbytess 0x5f5b43e4 0x73dc93c7 0x5626dfeb 0xdc8a25bf 0x198ebd8c 0x2301ab26 0x9f68fca6 0xa975c2d1 0xd1e04801 0xb6966be5 0x195d5418 0x6adae3f1 0xdf8cfee5 // method "verify_acct_balance(account)uint64", method "verify_acct_min_balance(account)uint64", method "verify_acct_auth_addr(account)address", method "verify_acct_total_num_uint(account)uint64", method "verify_acct_total_num_byte_slice(account)uint64", method "verify_acct_total_extra_app_pages(account)uint64", method "verify_acct_total_apps_created(account)uint64", method "verify_acct_total_apps_opted_in(account)uint64", method "verify_acct_total_assets_created(account)uint64", method "verify_acct_total_assets(account)uint64", method "verify_acct_total_boxes(account)uint64", method "verify_acct_total_box_bytes(account)uint64", method "verify_acct_incentive_eligible(account)bool" - txna ApplicationArgs 0 - match main_verify_acct_balance_route@3 main_verify_acct_min_balance_route@4 main_verify_acct_auth_addr_route@5 main_verify_acct_total_num_uint_route@6 main_verify_acct_total_num_byte_slice_route@7 main_verify_acct_total_extra_app_pages_route@8 main_verify_acct_total_apps_created_route@9 main_verify_acct_total_apps_opted_in_route@10 main_verify_acct_total_assets_created_route@11 main_verify_acct_total_assets_route@12 main_verify_acct_total_boxes_route@13 main_verify_acct_total_box_bytes_route@14 main_verify_acct_incentive_eligible_route@15 - -main_after_if_else@22: - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - intc_1 // 0 - return - -main_verify_acct_incentive_eligible_route@15: - // tests/artifacts/state-ops/contract.algo.ts:139 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:139 - // @arc4.abimethod() - callsub verify_acct_incentive_eligible - pushbytes 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_box_bytes_route@14: - // tests/artifacts/state-ops/contract.algo.ts:130 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:130 - // @arc4.abimethod() - callsub verify_acct_total_box_bytes - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_boxes_route@13: - // tests/artifacts/state-ops/contract.algo.ts:121 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:121 - // @arc4.abimethod() - callsub verify_acct_total_boxes - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_assets_route@12: - // tests/artifacts/state-ops/contract.algo.ts:112 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:112 - // @arc4.abimethod() - callsub verify_acct_total_assets - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_assets_created_route@11: - // tests/artifacts/state-ops/contract.algo.ts:103 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:103 - // @arc4.abimethod() - callsub verify_acct_total_assets_created - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_apps_opted_in_route@10: - // tests/artifacts/state-ops/contract.algo.ts:94 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:94 - // @arc4.abimethod() - callsub verify_acct_total_apps_opted_in - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_apps_created_route@9: - // tests/artifacts/state-ops/contract.algo.ts:85 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:85 - // @arc4.abimethod() - callsub verify_acct_total_apps_created - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_extra_app_pages_route@8: - // tests/artifacts/state-ops/contract.algo.ts:76 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:76 - // @arc4.abimethod() - callsub verify_acct_total_extra_app_pages - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_num_byte_slice_route@7: - // tests/artifacts/state-ops/contract.algo.ts:67 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:67 - // @arc4.abimethod() - callsub verify_acct_total_num_byte_slice - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_total_num_uint_route@6: - // tests/artifacts/state-ops/contract.algo.ts:58 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:58 - // @arc4.abimethod() - callsub verify_acct_total_num_uint - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_auth_addr_route@5: - // tests/artifacts/state-ops/contract.algo.ts:49 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:49 - // @arc4.abimethod() - callsub verify_acct_auth_addr - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_min_balance_route@4: - // tests/artifacts/state-ops/contract.algo.ts:37 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:37 - // @arc4.abimethod() - callsub verify_acct_min_balance - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_acct_balance_route@3: - // tests/artifacts/state-ops/contract.algo.ts:25 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - // tests/artifacts/state-ops/contract.algo.ts:25 - // @arc4.abimethod() - callsub verify_acct_balance - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@18: - // tests/artifacts/state-ops/contract.algo.ts:23-24 - // @contract({ name: 'StateAcctParamsGetContract', avmVersion: 11 }) - // export class StateAcctParamsGetContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@22 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_balance(a: bytes) -> uint64: -verify_acct_balance: - // tests/artifacts/state-ops/contract.algo.ts:25-26 - // @arc4.abimethod() - // public verify_acct_balance(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:27 - // const [value, funded] = op.AcctParams.acctBalance(a) - frame_dig -1 - acct_params_get AcctBalance - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:28 - // const [value_index, funded_index] = op.AcctParams.acctBalance(get_1st_ref_index()) - dup - acct_params_get AcctBalance - // tests/artifacts/state-ops/contract.algo.ts:29 - // assert(value === value_index, 'expected value by index to match') - dig 4 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:30 - // assert(funded === funded_index, 'expected funded by index to match') - uncover 2 - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:31 - // assert(value === a.balance, 'expected Account balance to match') - frame_dig -1 - acct_params_get AcctBalance - assert // account funded - dig 2 - == - assert // expected Account balance to match - // tests/artifacts/state-ops/contract.algo.ts:32 - // assert(value === op.balance(a), 'expected op.balance to match') - frame_dig -1 - balance - dig 2 - == - assert // expected op.balance to match - // tests/artifacts/state-ops/contract.algo.ts:33 - // assert(value === op.balance(get_1st_ref_index()), 'expected op.balance by index to match') - balance - dig 1 - == - assert // expected op.balance by index to match - // tests/artifacts/state-ops/contract.algo.ts:34 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_min_balance(a: bytes) -> uint64: -verify_acct_min_balance: - // tests/artifacts/state-ops/contract.algo.ts:37-38 - // @arc4.abimethod() - // public verify_acct_min_balance(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:39 - // const [value, funded] = op.AcctParams.acctMinBalance(a) - frame_dig -1 - acct_params_get AcctMinBalance - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:40 - // const [value_index, funded_index] = op.AcctParams.acctMinBalance(get_1st_ref_index()) - dup - acct_params_get AcctMinBalance - // tests/artifacts/state-ops/contract.algo.ts:41 - // assert(value === value_index, 'expected value by index to match') - dig 4 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:42 - // assert(funded === funded_index, 'expected funded by index to match') - uncover 2 - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:43 - // assert(value === a.minBalance, 'expected Account min_balance to match') - frame_dig -1 - acct_params_get AcctMinBalance - assert // account funded - dig 2 - == - assert // expected Account min_balance to match - // tests/artifacts/state-ops/contract.algo.ts:44 - // assert(value === op.minBalance(a), 'expected op.min_balance to match') - frame_dig -1 - min_balance - dig 2 - == - assert // expected op.min_balance to match - // tests/artifacts/state-ops/contract.algo.ts:45 - // assert(value === op.minBalance(get_1st_ref_index()), 'expected op.min_balance by index to match') - min_balance - dig 1 - == - assert // expected op.min_balance by index to match - // tests/artifacts/state-ops/contract.algo.ts:46 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_auth_addr(a: bytes) -> bytes: -verify_acct_auth_addr: - // tests/artifacts/state-ops/contract.algo.ts:49-50 - // @arc4.abimethod() - // public verify_acct_auth_addr(a: Account): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:51 - // const [value, funded] = op.AcctParams.acctAuthAddr(a) - frame_dig -1 - acct_params_get AcctAuthAddr - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:52 - // const [value_index, funded_index] = op.AcctParams.acctAuthAddr(get_1st_ref_index()) - acct_params_get AcctAuthAddr - // tests/artifacts/state-ops/contract.algo.ts:53 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:54 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:55 - // return new Address(value) - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_num_uint(a: bytes) -> uint64: -verify_acct_total_num_uint: - // tests/artifacts/state-ops/contract.algo.ts:58-59 - // @arc4.abimethod() - // public verify_acct_total_num_uint(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:60 - // const [value, funded] = op.AcctParams.acctTotalNumUint(a) - frame_dig -1 - acct_params_get AcctTotalNumUint - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:61 - // const [value_index, funded_index] = op.AcctParams.acctTotalNumUint(get_1st_ref_index()) - acct_params_get AcctTotalNumUint - // tests/artifacts/state-ops/contract.algo.ts:62 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:63 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:64 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_num_byte_slice(a: bytes) -> uint64: -verify_acct_total_num_byte_slice: - // tests/artifacts/state-ops/contract.algo.ts:67-68 - // @arc4.abimethod() - // public verify_acct_total_num_byte_slice(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:69 - // const [value, funded] = op.AcctParams.acctTotalNumByteSlice(a) - frame_dig -1 - acct_params_get AcctTotalNumByteSlice - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:70 - // const [value_index, funded_index] = op.AcctParams.acctTotalNumByteSlice(get_1st_ref_index()) - acct_params_get AcctTotalNumByteSlice - // tests/artifacts/state-ops/contract.algo.ts:71 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:72 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:73 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_extra_app_pages(a: bytes) -> uint64: -verify_acct_total_extra_app_pages: - // tests/artifacts/state-ops/contract.algo.ts:76-77 - // @arc4.abimethod() - // public verify_acct_total_extra_app_pages(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:78 - // const [value, funded] = op.AcctParams.acctTotalExtraAppPages(a) - frame_dig -1 - acct_params_get AcctTotalExtraAppPages - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:79 - // const [value_index, funded_index] = op.AcctParams.acctTotalExtraAppPages(get_1st_ref_index()) - acct_params_get AcctTotalExtraAppPages - // tests/artifacts/state-ops/contract.algo.ts:80 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:81 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:82 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_apps_created(a: bytes) -> uint64: -verify_acct_total_apps_created: - // tests/artifacts/state-ops/contract.algo.ts:85-86 - // @arc4.abimethod() - // public verify_acct_total_apps_created(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:87 - // const [value, funded] = op.AcctParams.acctTotalAppsCreated(a) - frame_dig -1 - acct_params_get AcctTotalAppsCreated - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:88 - // const [value_index, funded_index] = op.AcctParams.acctTotalAppsCreated(get_1st_ref_index()) - acct_params_get AcctTotalAppsCreated - // tests/artifacts/state-ops/contract.algo.ts:89 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:90 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:91 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_apps_opted_in(a: bytes) -> uint64: -verify_acct_total_apps_opted_in: - // tests/artifacts/state-ops/contract.algo.ts:94-95 - // @arc4.abimethod() - // public verify_acct_total_apps_opted_in(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:96 - // const [value, funded] = op.AcctParams.acctTotalAppsOptedIn(a) - frame_dig -1 - acct_params_get AcctTotalAppsOptedIn - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:97 - // const [value_index, funded_index] = op.AcctParams.acctTotalAppsOptedIn(get_1st_ref_index()) - acct_params_get AcctTotalAppsOptedIn - // tests/artifacts/state-ops/contract.algo.ts:98 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:99 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:100 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_assets_created(a: bytes) -> uint64: -verify_acct_total_assets_created: - // tests/artifacts/state-ops/contract.algo.ts:103-104 - // @arc4.abimethod() - // public verify_acct_total_assets_created(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:105 - // const [value, funded] = op.AcctParams.acctTotalAssetsCreated(a) - frame_dig -1 - acct_params_get AcctTotalAssetsCreated - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:106 - // const [value_index, funded_index] = op.AcctParams.acctTotalAssetsCreated(get_1st_ref_index()) - acct_params_get AcctTotalAssetsCreated - // tests/artifacts/state-ops/contract.algo.ts:107 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:108 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:109 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_assets(a: bytes) -> uint64: -verify_acct_total_assets: - // tests/artifacts/state-ops/contract.algo.ts:112-113 - // @arc4.abimethod() - // public verify_acct_total_assets(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:114 - // const [value, funded] = op.AcctParams.acctTotalAssets(a) - frame_dig -1 - acct_params_get AcctTotalAssets - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:115 - // const [value_index, funded_index] = op.AcctParams.acctTotalAssets(get_1st_ref_index()) - acct_params_get AcctTotalAssets - // tests/artifacts/state-ops/contract.algo.ts:116 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:117 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:118 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_boxes(a: bytes) -> uint64: -verify_acct_total_boxes: - // tests/artifacts/state-ops/contract.algo.ts:121-122 - // @arc4.abimethod() - // public verify_acct_total_boxes(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:123 - // const [value, funded] = op.AcctParams.acctTotalBoxes(a) - frame_dig -1 - acct_params_get AcctTotalBoxes - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:124 - // const [value_index, funded_index] = op.AcctParams.acctTotalBoxes(get_1st_ref_index()) - acct_params_get AcctTotalBoxes - // tests/artifacts/state-ops/contract.algo.ts:125 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:126 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:127 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_total_box_bytes(a: bytes) -> uint64: -verify_acct_total_box_bytes: - // tests/artifacts/state-ops/contract.algo.ts:130-131 - // @arc4.abimethod() - // public verify_acct_total_box_bytes(a: Account): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:132 - // const [value, funded] = op.AcctParams.acctTotalBoxBytes(a) - frame_dig -1 - acct_params_get AcctTotalBoxBytes - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:133 - // const [value_index, funded_index] = op.AcctParams.acctTotalBoxBytes(get_1st_ref_index()) - acct_params_get AcctTotalBoxBytes - // tests/artifacts/state-ops/contract.algo.ts:134 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:135 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:136 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAcctParamsGetContract.verify_acct_incentive_eligible(a: bytes) -> uint64: -verify_acct_incentive_eligible: - // tests/artifacts/state-ops/contract.algo.ts:139-140 - // @arc4.abimethod() - // public verify_acct_incentive_eligible(a: Account): boolean { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:141 - // const [value, funded] = op.AcctParams.acctIncentiveEligible(a) - frame_dig -1 - acct_params_get AcctIncentiveEligible - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:142 - // const [value_index, funded_index] = op.AcctParams.acctIncentiveEligible(get_1st_ref_index()) - acct_params_get AcctIncentiveEligible - // tests/artifacts/state-ops/contract.algo.ts:143 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:144 - // assert(funded === funded_index, 'expected funded by index to match') - == - assert // expected funded by index to match - // tests/artifacts/state-ops/contract.algo.ts:145 - // return value - retsub diff --git a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc32.json b/tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc32.json deleted file mode 100644 index c03181f..0000000 --- a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc32.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "hints": { - "verify_acct_balance(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_min_balance(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_auth_addr(account)address": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_num_uint(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_num_byte_slice(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_extra_app_pages(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_apps_created(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_apps_opted_in(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_assets_created(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_assets(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_boxes(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_total_box_bytes(account)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_acct_incentive_eligible(account)bool": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ1N0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE4CiAgICBwdXNoYnl0ZXNzIDB4NWY1YjQzZTQgMHg3M2RjOTNjNyAweDU2MjZkZmViIDB4ZGM4YTI1YmYgMHgxOThlYmQ4YyAweDIzMDFhYjI2IDB4OWY2OGZjYTYgMHhhOTc1YzJkMSAweGQxZTA0ODAxIDB4YjY5NjZiZTUgMHgxOTVkNTQxOCAweDZhZGFlM2YxIDB4ZGY4Y2ZlZTUgLy8gbWV0aG9kICJ2ZXJpZnlfYWNjdF9iYWxhbmNlKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF9taW5fYmFsYW5jZShhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfYXV0aF9hZGRyKGFjY291bnQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbihhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0cyhhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2JveF9ieXRlcyhhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfaW5jZW50aXZlX2VsaWdpYmxlKGFjY291bnQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2FjY3RfYmFsYW5jZV9yb3V0ZUAzIG1haW5fdmVyaWZ5X2FjY3RfbWluX2JhbGFuY2Vfcm91dGVANCBtYWluX3ZlcmlmeV9hY2N0X2F1dGhfYWRkcl9yb3V0ZUA1IG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnRfcm91dGVANiBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlX3JvdXRlQDcgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXNfcm91dGVAOCBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZF9yb3V0ZUA5IG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbl9yb3V0ZUAxMCBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkX3JvdXRlQDExIG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX3JvdXRlQDEyIG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXNfcm91dGVAMTMgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXNfcm91dGVAMTQgbWFpbl92ZXJpZnlfYWNjdF9pbmNlbnRpdmVfZWxpZ2libGVfcm91dGVAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ1N0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF9pbmNlbnRpdmVfZWxpZ2libGVfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF9pbmNlbnRpdmVfZWxpZ2libGUKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzX3JvdXRlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2JveGVzX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX3JvdXRlQDEyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbl9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZF9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXNfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludF9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X2F1dGhfYWRkcl9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X2F1dGhfYWRkcgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF9taW5fYmFsYW5jZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X21pbl9iYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X2JhbGFuY2Vfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF9iYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ1N0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X2JhbGFuY2UoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfYmFsYW5jZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNS0yNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYWNjdF9iYWxhbmNlKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdEJhbGFuY2UoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdEJhbGFuY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGR1cAogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIGFzc2VydChmdW5kZWQgPT09IGZ1bmRlZF9pbmRleCwgJ2V4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCcpCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gYS5iYWxhbmNlLCAnZXhwZWN0ZWQgQWNjb3VudCBiYWxhbmNlIHRvIG1hdGNoJykKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIEFjY291bnQgYmFsYW5jZSB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IG9wLmJhbGFuY2UoYSksICdleHBlY3RlZCBvcC5iYWxhbmNlIHRvIG1hdGNoJykKICAgIGZyYW1lX2RpZyAtMQogICAgYmFsYW5jZQogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgb3AuYmFsYW5jZSB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IG9wLmJhbGFuY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSksICdleHBlY3RlZCBvcC5iYWxhbmNlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGJhbGFuY2UKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG9wLmJhbGFuY2UgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3LTM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdE1pbkJhbGFuY2UoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdE1pbkJhbGFuY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGR1cAogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIGFzc2VydChmdW5kZWQgPT09IGZ1bmRlZF9pbmRleCwgJ2V4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCcpCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gYS5taW5CYWxhbmNlLCAnZXhwZWN0ZWQgQWNjb3VudCBtaW5fYmFsYW5jZSB0byBtYXRjaCcpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBBY2NvdW50IG1pbl9iYWxhbmNlIHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gb3AubWluQmFsYW5jZShhKSwgJ2V4cGVjdGVkIG9wLm1pbl9iYWxhbmNlIHRvIG1hdGNoJykKICAgIGZyYW1lX2RpZyAtMQogICAgbWluX2JhbGFuY2UKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG9wLm1pbl9iYWxhbmNlIHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gb3AubWluQmFsYW5jZShnZXRfMXN0X3JlZl9pbmRleCgpKSwgJ2V4cGVjdGVkIG9wLm1pbl9iYWxhbmNlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIG1pbl9iYWxhbmNlCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBvcC5taW5fYmFsYW5jZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfYXV0aF9hZGRyKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2FjY3RfYXV0aF9hZGRyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5LTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X2F1dGhfYWRkcihhOiBBY2NvdW50KTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gY29uc3QgW3ZhbHVlLCBmdW5kZWRdID0gb3AuQWNjdFBhcmFtcy5hY2N0QXV0aEFkZHIoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RBdXRoQWRkcihnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OC01OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludChhOiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbE51bVVpbnQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxOdW1VaW50KGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3LTY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsTnVtQnl0ZVNsaWNlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxOdW1CeXRlU2xpY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MgogICAgLy8gYXNzZXJ0KGZ1bmRlZCA9PT0gZnVuZGVkX2luZGV4LCAnZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2LTc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X3RvdGFsX2V4dHJhX2FwcF9wYWdlcyhhOiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEV4dHJhQXBwUGFnZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxFeHRyYUFwcFBhZ2VzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUtODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19jcmVhdGVkKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc0NyZWF0ZWQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc0NyZWF0ZWQoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo5MQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW4oYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo5NC05NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTYKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc09wdGVkSW4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc09wdGVkSW4oZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9hc3NldHNfY3JlYXRlZChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9hc3NldHNfY3JlYXRlZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDMtMTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXNzZXRzQ3JlYXRlZChnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9hc3NldHMoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMi0xMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEFzc2V0cyhhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE1CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEFzc2V0cyhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNgogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIGFzc2VydChmdW5kZWQgPT09IGZ1bmRlZF9pbmRleCwgJ2V4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2JveGVzKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX2JveGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMS0xMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMoYTogQWNjb3VudCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQm94ZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEJveGVzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI2CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXMoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMC0xMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEJveEJ5dGVzKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxCb3hCeXRlcyhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gYXNzZXJ0KGZ1bmRlZCA9PT0gZnVuZGVkX2luZGV4LCAnZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfaW5jZW50aXZlX2VsaWdpYmxlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzktMTQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZShhOiBBY2NvdW50KTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdEluY2VudGl2ZUVsaWdpYmxlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0SW5jZW50aXZlRWxpZ2libGUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDIKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdEluY2VudGl2ZUVsaWdpYmxlKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEluY2VudGl2ZUVsaWdpYmxlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gYXNzZXJ0KGZ1bmRlZCA9PT0gZnVuZGVkX2luZGV4LCAnZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "StateAcctParamsGetContract", - "methods": [ - { - "name": "verify_acct_balance", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_min_balance", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_auth_addr", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "verify_acct_total_num_uint", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_num_byte_slice", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_extra_app_pages", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_apps_created", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_apps_opted_in", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_assets_created", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_assets", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_boxes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_total_box_bytes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_acct_incentive_eligible", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc56.json b/tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc56.json deleted file mode 100644 index 6931c37..0000000 --- a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.arc56.json +++ /dev/null @@ -1,462 +0,0 @@ -{ - "name": "StateAcctParamsGetContract", - "structs": {}, - "methods": [ - { - "name": "verify_acct_balance", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_min_balance", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_auth_addr", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_num_uint", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_num_byte_slice", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_extra_app_pages", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_apps_created", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_apps_opted_in", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_assets_created", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_assets", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_boxes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_total_box_bytes", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_acct_incentive_eligible", - "args": [ - { - "type": "account", - "name": "a" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 120, - 149, - 172, - 195, - 218, - 241, - 264, - 287, - 310, - 333, - 356, - 378, - 401 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 460, - 506 - ], - "errorMessage": "account funded" - }, - { - "pc": [ - 429 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 123, - 152, - 175, - 198, - 221, - 244, - 267, - 290, - 313, - 336, - 359, - 381, - 404 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 464 - ], - "errorMessage": "expected Account balance to match" - }, - { - "pc": [ - 510 - ], - "errorMessage": "expected Account min_balance to match" - }, - { - "pc": [ - 455, - 501, - 544, - 566, - 588, - 610, - 632, - 654, - 676, - 698, - 720, - 742, - 764 - ], - "errorMessage": "expected funded by index to match" - }, - { - "pc": [ - 476 - ], - "errorMessage": "expected op.balance by index to match" - }, - { - "pc": [ - 471 - ], - "errorMessage": "expected op.balance to match" - }, - { - "pc": [ - 522 - ], - "errorMessage": "expected op.min_balance by index to match" - }, - { - "pc": [ - 517 - ], - "errorMessage": "expected op.min_balance to match" - }, - { - "pc": [ - 451, - 497, - 542, - 564, - 586, - 608, - 630, - 652, - 674, - 696, - 718, - 740, - 762 - ], - "errorMessage": "expected value by index to match" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ1N0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE4CiAgICBwdXNoYnl0ZXNzIDB4NWY1YjQzZTQgMHg3M2RjOTNjNyAweDU2MjZkZmViIDB4ZGM4YTI1YmYgMHgxOThlYmQ4YyAweDIzMDFhYjI2IDB4OWY2OGZjYTYgMHhhOTc1YzJkMSAweGQxZTA0ODAxIDB4YjY5NjZiZTUgMHgxOTVkNTQxOCAweDZhZGFlM2YxIDB4ZGY4Y2ZlZTUgLy8gbWV0aG9kICJ2ZXJpZnlfYWNjdF9iYWxhbmNlKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF9taW5fYmFsYW5jZShhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfYXV0aF9hZGRyKGFjY291bnQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGFjY291bnQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbihhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0cyhhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hY2N0X3RvdGFsX2JveF9ieXRlcyhhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FjY3RfaW5jZW50aXZlX2VsaWdpYmxlKGFjY291bnQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2FjY3RfYmFsYW5jZV9yb3V0ZUAzIG1haW5fdmVyaWZ5X2FjY3RfbWluX2JhbGFuY2Vfcm91dGVANCBtYWluX3ZlcmlmeV9hY2N0X2F1dGhfYWRkcl9yb3V0ZUA1IG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfbnVtX3VpbnRfcm91dGVANiBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlX3JvdXRlQDcgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXNfcm91dGVAOCBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZF9yb3V0ZUA5IG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbl9yb3V0ZUAxMCBtYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkX3JvdXRlQDExIG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX3JvdXRlQDEyIG1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXNfcm91dGVAMTMgbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXNfcm91dGVAMTQgbWFpbl92ZXJpZnlfYWNjdF9pbmNlbnRpdmVfZWxpZ2libGVfcm91dGVAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ1N0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF9pbmNlbnRpdmVfZWxpZ2libGVfcm91dGVAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF9pbmNlbnRpdmVfZWxpZ2libGUKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzX3JvdXRlQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2JveGVzX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX3JvdXRlQDEyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzX2NyZWF0ZWQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbl9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZF9yb3V0ZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXNfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FjY3RfdG90YWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF90b3RhbF9udW1fYnl0ZV9zbGljZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludF9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X3RvdGFsX251bV91aW50CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X2F1dGhfYWRkcl9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X2F1dGhfYWRkcgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYWNjdF9taW5fYmFsYW5jZV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMtMjQKICAgIC8vIEBjb250cmFjdCh7IG5hbWU6ICdTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCcsIGF2bVZlcnNpb246IDExIH0pCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hY2N0X21pbl9iYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hY2N0X2JhbGFuY2Vfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzLTI0CiAgICAvLyBAY29udHJhY3QoeyBuYW1lOiAnU3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QnLCBhdm1WZXJzaW9uOiAxMSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYWNjdF9iYWxhbmNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMy0yNAogICAgLy8gQGNvbnRyYWN0KHsgbmFtZTogJ1N0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0JywgYXZtVmVyc2lvbjogMTEgfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X2JhbGFuY2UoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfYmFsYW5jZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNS0yNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYWNjdF9iYWxhbmNlKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdEJhbGFuY2UoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdEJhbGFuY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGR1cAogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIGFzc2VydChmdW5kZWQgPT09IGZ1bmRlZF9pbmRleCwgJ2V4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCcpCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gYS5iYWxhbmNlLCAnZXhwZWN0ZWQgQWNjb3VudCBiYWxhbmNlIHRvIG1hdGNoJykKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIEFjY291bnQgYmFsYW5jZSB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IG9wLmJhbGFuY2UoYSksICdleHBlY3RlZCBvcC5iYWxhbmNlIHRvIG1hdGNoJykKICAgIGZyYW1lX2RpZyAtMQogICAgYmFsYW5jZQogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgb3AuYmFsYW5jZSB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IG9wLmJhbGFuY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSksICdleHBlY3RlZCBvcC5iYWxhbmNlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGJhbGFuY2UKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG9wLmJhbGFuY2UgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X21pbl9iYWxhbmNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3LTM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X21pbl9iYWxhbmNlKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdE1pbkJhbGFuY2UoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdE1pbkJhbGFuY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGR1cAogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIGFzc2VydChmdW5kZWQgPT09IGZ1bmRlZF9pbmRleCwgJ2V4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCcpCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gYS5taW5CYWxhbmNlLCAnZXhwZWN0ZWQgQWNjb3VudCBtaW5fYmFsYW5jZSB0byBtYXRjaCcpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBBY2NvdW50IG1pbl9iYWxhbmNlIHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gb3AubWluQmFsYW5jZShhKSwgJ2V4cGVjdGVkIG9wLm1pbl9iYWxhbmNlIHRvIG1hdGNoJykKICAgIGZyYW1lX2RpZyAtMQogICAgbWluX2JhbGFuY2UKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG9wLm1pbl9iYWxhbmNlIHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gb3AubWluQmFsYW5jZShnZXRfMXN0X3JlZl9pbmRleCgpKSwgJ2V4cGVjdGVkIG9wLm1pbl9iYWxhbmNlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIG1pbl9iYWxhbmNlCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBvcC5taW5fYmFsYW5jZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfYXV0aF9hZGRyKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2FjY3RfYXV0aF9hZGRyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ5LTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X2F1dGhfYWRkcihhOiBBY2NvdW50KTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gY29uc3QgW3ZhbHVlLCBmdW5kZWRdID0gb3AuQWNjdFBhcmFtcy5hY2N0QXV0aEFkZHIoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RBdXRoQWRkcihnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RBdXRoQWRkcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1NQogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo1OC01OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYWNjdF90b3RhbF9udW1fdWludChhOiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbE51bVVpbnQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbE51bVVpbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxOdW1VaW50KGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3LTY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X3RvdGFsX251bV9ieXRlX3NsaWNlKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsTnVtQnl0ZVNsaWNlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxOdW1CeXRlU2xpY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3MgogICAgLy8gYXNzZXJ0KGZ1bmRlZCA9PT0gZnVuZGVkX2luZGV4LCAnZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9leHRyYV9hcHBfcGFnZXMoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfZXh0cmFfYXBwX3BhZ2VzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc2LTc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X3RvdGFsX2V4dHJhX2FwcF9wYWdlcyhhOiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc4CiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEV4dHJhQXBwUGFnZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEV4dHJhQXBwUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo3OQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxFeHRyYUFwcFBhZ2VzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsRXh0cmFBcHBQYWdlcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgwCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfY3JlYXRlZChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX2NyZWF0ZWQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUtODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19jcmVhdGVkKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc0NyZWF0ZWQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNDcmVhdGVkCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc0NyZWF0ZWQoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzQ3JlYXRlZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo5MQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2FwcHNfb3B0ZWRfaW4oYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYXBwc19vcHRlZF9pbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo5NC05NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYWNjdF90b3RhbF9hcHBzX29wdGVkX2luKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTYKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc09wdGVkSW4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFwcHNPcHRlZEluCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXBwc09wdGVkSW4oZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxBcHBzT3B0ZWRJbgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9hc3NldHNfY3JlYXRlZChhOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYWNjdF90b3RhbF9hc3NldHNfY3JlYXRlZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDMtMTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X3RvdGFsX2Fzc2V0c19jcmVhdGVkKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQXNzZXRzQ3JlYXRlZChnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0c0NyZWF0ZWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9hc3NldHMoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMi0xMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYXNzZXRzKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE0CiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEFzc2V0cyhhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE1CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEFzc2V0cyhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNgogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIGFzc2VydChmdW5kZWQgPT09IGZ1bmRlZF9pbmRleCwgJ2V4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGZ1bmRlZCBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQWNjdFBhcmFtc0dldENvbnRyYWN0LnZlcmlmeV9hY2N0X3RvdGFsX2JveGVzKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X3RvdGFsX2JveGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMS0xMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYm94ZXMoYTogQWNjb3VudCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdFRvdGFsQm94ZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveGVzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGZ1bmRlZF9pbmRleF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEJveGVzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdFRvdGFsQm94ZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI2CiAgICAvLyBhc3NlcnQoZnVuZGVkID09PSBmdW5kZWRfaW5kZXgsICdleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBmdW5kZWQgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFjY3RQYXJhbXNHZXRDb250cmFjdC52ZXJpZnlfYWNjdF90b3RhbF9ib3hfYnl0ZXMoYTogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMC0xMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FjY3RfdG90YWxfYm94X2J5dGVzKGE6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBbdmFsdWUsIGZ1bmRlZF0gPSBvcC5BY2N0UGFyYW1zLmFjY3RUb3RhbEJveEJ5dGVzKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0VG90YWxCb3hCeXRlcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBmdW5kZWRfaW5kZXhdID0gb3AuQWNjdFBhcmFtcy5hY2N0VG90YWxCb3hCeXRlcyhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEJveEJ5dGVzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gYXNzZXJ0KGZ1bmRlZCA9PT0gZnVuZGVkX2luZGV4LCAnZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBY2N0UGFyYW1zR2V0Q29udHJhY3QudmVyaWZ5X2FjY3RfaW5jZW50aXZlX2VsaWdpYmxlKGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzktMTQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hY2N0X2luY2VudGl2ZV9lbGlnaWJsZShhOiBBY2NvdW50KTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZnVuZGVkXSA9IG9wLkFjY3RQYXJhbXMuYWNjdEluY2VudGl2ZUVsaWdpYmxlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0SW5jZW50aXZlRWxpZ2libGUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDIKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZnVuZGVkX2luZGV4XSA9IG9wLkFjY3RQYXJhbXMuYWNjdEluY2VudGl2ZUVsaWdpYmxlKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEluY2VudGl2ZUVsaWdpYmxlCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gYXNzZXJ0KGZ1bmRlZCA9PT0gZnVuZGVkX2luZGV4LCAnZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZnVuZGVkIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CyACAQAmAQQVH3x1MRtBAZSCDQRfW0PkBHPck8cEVibf6wTciiW/BBmOvYwEIwGrJgSfaPymBKl1wtEE0eBIAQS2lmvlBBldVBgEatrj8QTfjP7lNhoAjg0BGwEEAO4A1wDAAKkAkgB7AGQATQA2AB8AAiNDMRkURDEYRDYaARfAHIgCY4ABACNPAlQoTFCwIkMxGRREMRhENhoBF8AciAIwFihMULAiQzEZFEQxGEQ2GgEXwByIAgMWKExQsCJDMRkURDEYRDYaARfAHIgB1hYoTFCwIkMxGRREMRhENhoBF8AciAGpFihMULAiQzEZFEQxGEQ2GgEXwByIAXwWKExQsCJDMRkURDEYRDYaARfAHIgBTxYoTFCwIkMxGRREMRhENhoBF8AciAEiFihMULAiQzEZFEQxGEQ2GgEXwByIAPUWKExQsCJDMRkURDEYRDYaARfAHIgAyBYoTFCwIkMxGRREMRhENhoBF8AciACbKExQsCJDMRkURDEYRDYaARfAHIgAVxYoTFCwIkMxGRREMRhENhoBF8AciAASFihMULAiQzEZQP7JMRgURCJDigEBi/9zACLAGhdJcwBLBE8CEkRPAhJEi/9zAERLAhJEi/9gSwISRGBLARJEiYoBAYv/cwEiwBoXSXMBSwRPAhJETwISRIv/cwFESwISRIv/eEsCEkR4SwESRImKAQGL/3MCIsAaF3MCSwNPAhJEEkSJigEBi/9zAyLAGhdzA0sDTwISRBJEiYoBAYv/cwQiwBoXcwRLA08CEkQSRImKAQGL/3MFIsAaF3MFSwNPAhJEEkSJigEBi/9zBiLAGhdzBksDTwISRBJEiYoBAYv/cwciwBoXcwdLA08CEkQSRImKAQGL/3MIIsAaF3MISwNPAhJEEkSJigEBi/9zCSLAGhdzCUsDTwISRBJEiYoBAYv/cwoiwBoXcwpLA08CEkQSRImKAQGL/3MLIsAaF3MLSwNPAhJEEkSJigEBi/9zDCLAGhdzDEsDTwISRBJEiQ==", - "clear": "C4EBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.clear.teal b/tests/artifacts/state-ops/data/StateAcctParamsGetContract.clear.teal deleted file mode 100644 index 42f81b0..0000000 --- a/tests/artifacts/state-ops/data/StateAcctParamsGetContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 11 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAppGlobalContract.approval.teal b/tests/artifacts/state-ops/data/StateAppGlobalContract.approval.teal deleted file mode 100644 index 117a9dc..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalContract.approval.teal +++ /dev/null @@ -1,311 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 0x00 - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@12 - pushbytess 0xa997a187 0x4db8aa41 0x6693ab92 0x857fd923 0x36996451 0x3920a57b 0x93a852e1 // method "verify_get_bytes(byte[])byte[]", method "verify_get_uint64(byte[])uint64", method "verify_get_ex_bytes(application,byte[])(byte[],bool)", method "verify_get_ex_uint64(application,byte[])(uint64,bool)", method "verify_put_uint64(byte[],uint64)void", method "verify_put_bytes(byte[],byte[])void", method "verify_delete(byte[])void" - txna ApplicationArgs 0 - match main_verify_get_bytes_route@3 main_verify_get_uint64_route@4 main_verify_get_ex_bytes_route@5 main_verify_get_ex_uint64_route@6 main_verify_put_uint64_route@7 main_verify_put_bytes_route@8 main_verify_delete_route@9 - -main_after_if_else@16: - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - intc_1 // 0 - return - -main_verify_delete_route@9: - // tests/artifacts/state-ops/contract.algo.ts:401 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:401 - // @arc4.abimethod() - callsub verify_delete - intc_0 // 1 - return - -main_verify_put_bytes_route@8: - // tests/artifacts/state-ops/contract.algo.ts:396 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:396 - // @arc4.abimethod() - callsub verify_put_bytes - intc_0 // 1 - return - -main_verify_put_uint64_route@7: - // tests/artifacts/state-ops/contract.algo.ts:391 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - btoi - // tests/artifacts/state-ops/contract.algo.ts:391 - // @arc4.abimethod() - callsub verify_put_uint64 - intc_0 // 1 - return - -main_verify_get_ex_uint64_route@6: - // tests/artifacts/state-ops/contract.algo.ts:386 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:386 - // @arc4.abimethod() - callsub verify_get_ex_uint64 - swap - itob - bytec_1 // 0x00 - intc_1 // 0 - uncover 3 - setbit - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_get_ex_bytes_route@5: - // tests/artifacts/state-ops/contract.algo.ts:381 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:381 - // @arc4.abimethod() - callsub verify_get_ex_bytes - dig 1 - len - itob - extract 6 2 - uncover 2 - concat - bytec_1 // 0x00 - intc_1 // 0 - uncover 3 - setbit - pushbytes 0x0003 - swap - concat - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_get_uint64_route@4: - // tests/artifacts/state-ops/contract.algo.ts:375 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:375 - // @arc4.abimethod() - callsub verify_get_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_get_bytes_route@3: - // tests/artifacts/state-ops/contract.algo.ts:369 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txna ApplicationArgs 1 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:369 - // @arc4.abimethod() - callsub verify_get_bytes - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@12: - // tests/artifacts/state-ops/contract.algo.ts:365 - // export class StateAppGlobalContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@16 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_get_bytes(a: bytes) -> bytes: -verify_get_bytes: - // tests/artifacts/state-ops/contract.algo.ts:369-370 - // @arc4.abimethod() - // verify_get_bytes(a: bytes): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:371 - // const value = op.AppGlobal.getBytes(a) - frame_dig -1 - app_global_get - // tests/artifacts/state-ops/contract.algo.ts:372 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_get_uint64(a: bytes) -> uint64: -verify_get_uint64: - // tests/artifacts/state-ops/contract.algo.ts:375-376 - // @arc4.abimethod() - // verify_get_uint64(a: bytes): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:377 - // const value = op.AppGlobal.getUint64(a) - frame_dig -1 - app_global_get - // tests/artifacts/state-ops/contract.algo.ts:378 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_get_ex_bytes(a: uint64, b: bytes) -> bytes, uint64: -verify_get_ex_bytes: - // tests/artifacts/state-ops/contract.algo.ts:381-382 - // @arc4.abimethod() - // verify_get_ex_bytes(a: Application, b: bytes): readonly [bytes, boolean] { - proto 2 2 - // tests/artifacts/state-ops/contract.algo.ts:383 - // return op.AppGlobal.getExBytes(a, b) - frame_dig -2 - frame_dig -1 - app_global_get_ex - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_get_ex_uint64(a: uint64, b: bytes) -> uint64, uint64: -verify_get_ex_uint64: - // tests/artifacts/state-ops/contract.algo.ts:386-387 - // @arc4.abimethod() - // verify_get_ex_uint64(a: Application, b: bytes): readonly [uint64, boolean] { - proto 2 2 - // tests/artifacts/state-ops/contract.algo.ts:388 - // return op.AppGlobal.getExUint64(a, b) - frame_dig -2 - frame_dig -1 - app_global_get_ex - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_put_uint64(a: bytes, b: uint64) -> void: -verify_put_uint64: - // tests/artifacts/state-ops/contract.algo.ts:391-392 - // @arc4.abimethod() - // verify_put_uint64(a: bytes, b: uint64): void { - proto 2 0 - // tests/artifacts/state-ops/contract.algo.ts:393 - // op.AppGlobal.put(a, b) - frame_dig -2 - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_put_bytes(a: bytes, b: bytes) -> void: -verify_put_bytes: - // tests/artifacts/state-ops/contract.algo.ts:396-397 - // @arc4.abimethod() - // verify_put_bytes(a: bytes, b: bytes): void { - proto 2 0 - // tests/artifacts/state-ops/contract.algo.ts:398 - // op.AppGlobal.put(a, b) - frame_dig -2 - frame_dig -1 - app_global_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppGlobalContract.verify_delete(a: bytes) -> void: -verify_delete: - // tests/artifacts/state-ops/contract.algo.ts:401-402 - // @arc4.abimethod() - // verify_delete(a: bytes): void { - proto 1 0 - // tests/artifacts/state-ops/contract.algo.ts:403 - // op.AppGlobal.delete(a) - frame_dig -1 - app_global_del - retsub diff --git a/tests/artifacts/state-ops/data/StateAppGlobalContract.arc32.json b/tests/artifacts/state-ops/data/StateAppGlobalContract.arc32.json deleted file mode 100644 index d29e42f..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalContract.arc32.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "hints": { - "verify_get_bytes(byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_get_uint64(byte[])uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_get_ex_bytes(application,byte[])(byte[],bool)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_get_ex_uint64(application,byte[])(uint64,bool)": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_put_uint64(byte[],uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_put_bytes(byte[],byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_delete(byte[])void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMgogICAgcHVzaGJ5dGVzcyAweGE5OTdhMTg3IDB4NGRiOGFhNDEgMHg2NjkzYWI5MiAweDg1N2ZkOTIzIDB4MzY5OTY0NTEgMHgzOTIwYTU3YiAweDkzYTg1MmUxIC8vIG1ldGhvZCAidmVyaWZ5X2dldF9ieXRlcyhieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X3VpbnQ2NChieXRlW10pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X2V4X2J5dGVzKGFwcGxpY2F0aW9uLGJ5dGVbXSkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X2V4X3VpbnQ2NChhcHBsaWNhdGlvbixieXRlW10pKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAidmVyaWZ5X3B1dF91aW50NjQoYnl0ZVtdLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfcHV0X2J5dGVzKGJ5dGVbXSxieXRlW10pdm9pZCIsIG1ldGhvZCAidmVyaWZ5X2RlbGV0ZShieXRlW10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2dldF9ieXRlc19yb3V0ZUAzIG1haW5fdmVyaWZ5X2dldF91aW50NjRfcm91dGVANCBtYWluX3ZlcmlmeV9nZXRfZXhfYnl0ZXNfcm91dGVANSBtYWluX3ZlcmlmeV9nZXRfZXhfdWludDY0X3JvdXRlQDYgbWFpbl92ZXJpZnlfcHV0X3VpbnQ2NF9yb3V0ZUA3IG1haW5fdmVyaWZ5X3B1dF9ieXRlc19yb3V0ZUA4IG1haW5fdmVyaWZ5X2RlbGV0ZV9yb3V0ZUA5CgptYWluX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZGVsZXRlX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9kZWxldGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3B1dF9ieXRlc19yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3B1dF9ieXRlcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfcHV0X3VpbnQ2NF9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcHV0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0X2V4X3VpbnQ2NF9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfZXhfdWludDY0CiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfZXhfYnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcEdsb2JhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZ2V0X2V4X2J5dGVzCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0X3VpbnQ2NF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZ2V0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0X2J5dGVzX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfYnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcEdsb2JhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE2CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfZ2V0X2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2dldF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjktMzcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2dldF9ieXRlcyhhOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgdmFsdWUgPSBvcC5BcHBHbG9iYWwuZ2V0Qnl0ZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9nZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcEdsb2JhbENvbnRyYWN0LnZlcmlmeV9nZXRfdWludDY0KGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9nZXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NS0zNzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZ2V0X3VpbnQ2NChhOiBieXRlcyk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNzcKICAgIC8vIGNvbnN0IHZhbHVlID0gb3AuQXBwR2xvYmFsLmdldFVpbnQ2NChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX2dldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3OAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwR2xvYmFsQ29udHJhY3QudmVyaWZ5X2dldF9leF9ieXRlcyhhOiB1aW50NjQsIGI6IGJ5dGVzKSAtPiBieXRlcywgdWludDY0Ogp2ZXJpZnlfZ2V0X2V4X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4MS0zODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZ2V0X2V4X2J5dGVzKGE6IEFwcGxpY2F0aW9uLCBiOiBieXRlcyk6IHJlYWRvbmx5IFtieXRlcywgYm9vbGVhbl0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzgzCiAgICAvLyByZXR1cm4gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcEdsb2JhbENvbnRyYWN0LnZlcmlmeV9nZXRfZXhfdWludDY0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpIC0+IHVpbnQ2NCwgdWludDY0Ogp2ZXJpZnlfZ2V0X2V4X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozODYtMzg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2dldF9leF91aW50NjQoYTogQXBwbGljYXRpb24sIGI6IGJ5dGVzKTogcmVhZG9ubHkgW3VpbnQ2NCwgYm9vbGVhbl0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg4CiAgICAvLyByZXR1cm4gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfcHV0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KSAtPiB2b2lkOgp2ZXJpZnlfcHV0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozOTEtMzkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkzCiAgICAvLyBvcC5BcHBHbG9iYWwucHV0KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfcHV0X2J5dGVzKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X3B1dF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozOTYtMzk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF9ieXRlcyhhOiBieXRlcywgYjogYnl0ZXMpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5OAogICAgLy8gb3AuQXBwR2xvYmFsLnB1dChhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwR2xvYmFsQ29udHJhY3QudmVyaWZ5X2RlbGV0ZShhOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X2RlbGV0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDEtNDAyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2RlbGV0ZShhOiBieXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBvcC5BcHBHbG9iYWwuZGVsZXRlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfZGVsCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 1, - "num_uints": 1 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "globalBytes": { - "type": "bytes", - "key": "global_bytes" - }, - "globalUint64": { - "type": "uint64", - "key": "global_uint64" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "StateAppGlobalContract", - "methods": [ - { - "name": "verify_get_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_get_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_get_ex_bytes", - "args": [ - { - "type": "application", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "(byte[],bool)" - } - }, - { - "name": "verify_get_ex_uint64", - "args": [ - { - "type": "application", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "(uint64,bool)" - } - }, - { - "name": "verify_put_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "verify_put_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "verify_delete", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppGlobalContract.arc56.json b/tests/artifacts/state-ops/data/StateAppGlobalContract.arc56.json deleted file mode 100644 index 0a2c473..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalContract.arc56.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "name": "StateAppGlobalContract", - "structs": {}, - "methods": [ - { - "name": "verify_get_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_ex_bytes", - "args": [ - { - "type": "application", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "(byte[],bool)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_ex_uint64", - "args": [ - { - "type": "application", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "(uint64,bool)" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_put_uint64", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "uint64", - "name": "b" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_put_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_delete", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 1, - "bytes": 1 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "globalUint64": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "Z2xvYmFsX3VpbnQ2NA==" - }, - "globalBytes": { - "keyType": "AVMString", - "valueType": "AVMBytes", - "key": "Z2xvYmFsX2J5dGVz" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 80, - 98, - 122, - 144, - 180, - 231, - 254 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 289 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 83, - 101, - 125, - 147, - 183, - 234, - 257 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMgogICAgcHVzaGJ5dGVzcyAweGE5OTdhMTg3IDB4NGRiOGFhNDEgMHg2NjkzYWI5MiAweDg1N2ZkOTIzIDB4MzY5OTY0NTEgMHgzOTIwYTU3YiAweDkzYTg1MmUxIC8vIG1ldGhvZCAidmVyaWZ5X2dldF9ieXRlcyhieXRlW10pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X3VpbnQ2NChieXRlW10pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X2V4X2J5dGVzKGFwcGxpY2F0aW9uLGJ5dGVbXSkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJ2ZXJpZnlfZ2V0X2V4X3VpbnQ2NChhcHBsaWNhdGlvbixieXRlW10pKHVpbnQ2NCxib29sKSIsIG1ldGhvZCAidmVyaWZ5X3B1dF91aW50NjQoYnl0ZVtdLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfcHV0X2J5dGVzKGJ5dGVbXSxieXRlW10pdm9pZCIsIG1ldGhvZCAidmVyaWZ5X2RlbGV0ZShieXRlW10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2dldF9ieXRlc19yb3V0ZUAzIG1haW5fdmVyaWZ5X2dldF91aW50NjRfcm91dGVANCBtYWluX3ZlcmlmeV9nZXRfZXhfYnl0ZXNfcm91dGVANSBtYWluX3ZlcmlmeV9nZXRfZXhfdWludDY0X3JvdXRlQDYgbWFpbl92ZXJpZnlfcHV0X3VpbnQ2NF9yb3V0ZUA3IG1haW5fdmVyaWZ5X3B1dF9ieXRlc19yb3V0ZUA4IG1haW5fdmVyaWZ5X2RlbGV0ZV9yb3V0ZUA5CgptYWluX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZGVsZXRlX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9kZWxldGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3B1dF9ieXRlc19yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3B1dF9ieXRlcwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfcHV0X3VpbnQ2NF9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcHV0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0X2V4X3VpbnQ2NF9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfZXhfdWludDY0CiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfZXhfYnl0ZXNfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcEdsb2JhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZ2V0X2V4X2J5dGVzCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0X3VpbnQ2NF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZ2V0X3VpbnQ2NAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZ2V0X2J5dGVzX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfYnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcEdsb2JhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE2CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfZ2V0X2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2dldF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjktMzcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2dldF9ieXRlcyhhOiBieXRlcyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgdmFsdWUgPSBvcC5BcHBHbG9iYWwuZ2V0Qnl0ZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9nZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcEdsb2JhbENvbnRyYWN0LnZlcmlmeV9nZXRfdWludDY0KGE6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9nZXRfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NS0zNzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZ2V0X3VpbnQ2NChhOiBieXRlcyk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNzcKICAgIC8vIGNvbnN0IHZhbHVlID0gb3AuQXBwR2xvYmFsLmdldFVpbnQ2NChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX2dldAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3OAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwR2xvYmFsQ29udHJhY3QudmVyaWZ5X2dldF9leF9ieXRlcyhhOiB1aW50NjQsIGI6IGJ5dGVzKSAtPiBieXRlcywgdWludDY0Ogp2ZXJpZnlfZ2V0X2V4X2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM4MS0zODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZ2V0X2V4X2J5dGVzKGE6IEFwcGxpY2F0aW9uLCBiOiBieXRlcyk6IHJlYWRvbmx5IFtieXRlcywgYm9vbGVhbl0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzgzCiAgICAvLyByZXR1cm4gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcEdsb2JhbENvbnRyYWN0LnZlcmlmeV9nZXRfZXhfdWludDY0KGE6IHVpbnQ2NCwgYjogYnl0ZXMpIC0+IHVpbnQ2NCwgdWludDY0Ogp2ZXJpZnlfZ2V0X2V4X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozODYtMzg3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2dldF9leF91aW50NjQoYTogQXBwbGljYXRpb24sIGI6IGJ5dGVzKTogcmVhZG9ubHkgW3VpbnQ2NCwgYm9vbGVhbl0gewogICAgcHJvdG8gMiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mzg4CiAgICAvLyByZXR1cm4gb3AuQXBwR2xvYmFsLmdldEV4VWludDY0KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfcHV0X3VpbnQ2NChhOiBieXRlcywgYjogdWludDY0KSAtPiB2b2lkOgp2ZXJpZnlfcHV0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozOTEtMzkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF91aW50NjQoYTogYnl0ZXMsIGI6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzkzCiAgICAvLyBvcC5BcHBHbG9iYWwucHV0KGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBHbG9iYWxDb250cmFjdC52ZXJpZnlfcHV0X2J5dGVzKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X3B1dF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozOTYtMzk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF9ieXRlcyhhOiBieXRlcywgYjogYnl0ZXMpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM5OAogICAgLy8gb3AuQXBwR2xvYmFsLnB1dChhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwR2xvYmFsQ29udHJhY3QudmVyaWZ5X2RlbGV0ZShhOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X2RlbGV0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDEtNDAyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2RlbGV0ZShhOiBieXRlcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBvcC5BcHBHbG9iYWwuZGVsZXRlKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfZGVsCiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmAgQVH3x1AQAxG0EBBoIHBKmXoYcETbiqQQRmk6uSBIV/2SMENplkUQQ5IKV7BJOoUuE2GgCOBwCwAJkAZgBCACwAFAACI0MxGRREMRhENhoBVwIAiAD5IkMxGRREMRhENhoBVwIANhoCVwIAiADYIkMxGRREMRhENhoBVwIANhoCF4gAuSJDMRkURDEYRDYaARfAMjYaAlcCAIgAmEwWKSNPA1RQKExQsCJDMRkURDEYRDYaARfAMjYaAlcCAIgAa0sBFRZXBgJPAlApI08DVIACAANMUExQKExQsCJDMRkURDEYRDYaAVcCAIgANxYoTFCwIkMxGRREMRhENhoBVwIAiAAZSRUWVwYCTFAoTFCwIkMxGUD/LTEYFEQiQ4oBAYv/ZImKAQGL/2SJigICi/6L/2WJigICi/6L/2WJigIAi/6L/2eJigIAi/6L/2eJigEAi/9piQ==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppGlobalContract.clear.teal b/tests/artifacts/state-ops/data/StateAppGlobalContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAppGlobalExContract.approval.teal b/tests/artifacts/state-ops/data/StateAppGlobalExContract.approval.teal deleted file mode 100644 index 84614dd..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalExContract.approval.teal +++ /dev/null @@ -1,57 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - bytecblock "dummy_bytes" 0x001064756d6d795f617263345f6279746573 - txn ApplicationID - bnz main_after_if_else@2 - // tests/artifacts/state-ops/contract.algo.ts:357 - // globalUint64 = GlobalState({ key: Bytes('global_uint64'), initialValue: Uint64(2) }) - pushbytes "global_uint64" - pushint 2 // 2 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:358 - // globalBytes = GlobalState({ key: Bytes('global_bytes'), initialValue: Bytes('dummy_bytes') }) - pushbytes "global_bytes" - bytec_0 // "dummy_bytes" - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:359 - // global_uint64_explicit = GlobalState({ initialValue: Uint64(2) }) - pushbytes "global_uint64_explicit" - pushint 2 // 2 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:360 - // global_bytes_explicit = GlobalState({ initialValue: Bytes('dummy_bytes') }) - pushbytes "global_bytes_explicit" - bytec_0 // "dummy_bytes" - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:361 - // globalArc4Bytes = GlobalState({ key: Bytes('global_arc4_bytes'), initialValue: new DynamicBytes('dummy_arc4_bytes') }) - pushbytes "global_arc4_bytes" - bytec_1 // 0x001064756d6d795f617263345f6279746573 - app_global_put - // tests/artifacts/state-ops/contract.algo.ts:362 - // global_arc4_bytes_explicit = GlobalState({ initialValue: new DynamicBytes('dummy_arc4_bytes') }) - pushbytes "global_arc4_bytes_explicit" - bytec_1 // 0x001064756d6d795f617263345f6279746573 - app_global_put - -main_after_if_else@2: - // tests/artifacts/state-ops/contract.algo.ts:356 - // export class StateAppGlobalExContract extends arc4.Contract { - txn NumAppArgs - bnz main_after_if_else@9 - txn OnCompletion - bnz main_after_if_else@9 - txn ApplicationID - ! - assert // can only call when creating - pushint 1 // 1 - return - -main_after_if_else@9: - // tests/artifacts/state-ops/contract.algo.ts:356 - // export class StateAppGlobalExContract extends arc4.Contract { - pushint 0 // 0 - return diff --git a/tests/artifacts/state-ops/data/StateAppGlobalExContract.arc32.json b/tests/artifacts/state-ops/data/StateAppGlobalExContract.arc32.json deleted file mode 100644 index eec414e..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalExContract.arc32.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "hints": {}, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBieXRlY2Jsb2NrICJkdW1teV9ieXRlcyIgMHgwMDEwNjQ3NTZkNmQ3OTVmNjE3MjYzMzQ1ZjYyNzk3NDY1NzMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIGdsb2JhbFVpbnQ2NCA9IEdsb2JhbFN0YXRlKHsga2V5OiBCeXRlcygnZ2xvYmFsX3VpbnQ2NCcpLCBpbml0aWFsVmFsdWU6IFVpbnQ2NCgyKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxfdWludDY0IgogICAgcHVzaGludCAyIC8vIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBnbG9iYWxCeXRlcyA9IEdsb2JhbFN0YXRlKHsga2V5OiBCeXRlcygnZ2xvYmFsX2J5dGVzJyksIGluaXRpYWxWYWx1ZTogQnl0ZXMoJ2R1bW15X2J5dGVzJykgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2J5dGVzIgogICAgYnl0ZWNfMCAvLyAiZHVtbXlfYnl0ZXMiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1OQogICAgLy8gZ2xvYmFsX3VpbnQ2NF9leHBsaWNpdCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMikgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsX3VpbnQ2NF9leHBsaWNpdCIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MAogICAgLy8gZ2xvYmFsX2J5dGVzX2V4cGxpY2l0ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCdkdW1teV9ieXRlcycpIH0pCiAgICBwdXNoYnl0ZXMgImdsb2JhbF9ieXRlc19leHBsaWNpdCIKICAgIGJ5dGVjXzAgLy8gImR1bW15X2J5dGVzIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIGdsb2JhbEFyYzRCeXRlcyA9IEdsb2JhbFN0YXRlKHsga2V5OiBCeXRlcygnZ2xvYmFsX2FyYzRfYnl0ZXMnKSwgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkdW1teV9hcmM0X2J5dGVzJykgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2FyYzRfYnl0ZXMiCiAgICBieXRlY18xIC8vIDB4MDAxMDY0NzU2ZDZkNzk1ZjYxNzI2MzM0NWY2Mjc5NzQ2NTczCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MgogICAgLy8gZ2xvYmFsX2FyYzRfYnl0ZXNfZXhwbGljaXQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IER5bmFtaWNCeXRlcygnZHVtbXlfYXJjNF9ieXRlcycpIH0pCiAgICBwdXNoYnl0ZXMgImdsb2JhbF9hcmM0X2J5dGVzX2V4cGxpY2l0IgogICAgYnl0ZWNfMSAvLyAweDAwMTA2NDc1NmQ2ZDc5NWY2MTcyNjMzNDVmNjI3OTc0NjU3MwogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1NgogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsRXhDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAOQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUA5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU2CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxFeENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 4, - "num_uints": 2 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "globalArc4Bytes": { - "type": "bytes", - "key": "global_arc4_bytes" - }, - "globalBytes": { - "type": "bytes", - "key": "global_bytes" - }, - "globalUint64": { - "type": "uint64", - "key": "global_uint64" - }, - "global_arc4_bytes_explicit": { - "type": "bytes", - "key": "global_arc4_bytes_explicit" - }, - "global_bytes_explicit": { - "type": "bytes", - "key": "global_bytes_explicit" - }, - "global_uint64_explicit": { - "type": "uint64", - "key": "global_uint64_explicit" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "StateAppGlobalExContract", - "methods": [], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppGlobalExContract.arc56.json b/tests/artifacts/state-ops/data/StateAppGlobalExContract.arc56.json deleted file mode 100644 index 3d4c492..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalExContract.arc56.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "name": "StateAppGlobalExContract", - "structs": {}, - "methods": [], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 2, - "bytes": 4 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": { - "globalUint64": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "Z2xvYmFsX3VpbnQ2NA==" - }, - "globalBytes": { - "keyType": "AVMString", - "valueType": "AVMBytes", - "key": "Z2xvYmFsX2J5dGVz" - }, - "global_uint64_explicit": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "Z2xvYmFsX3VpbnQ2NF9leHBsaWNpdA==" - }, - "global_bytes_explicit": { - "keyType": "AVMString", - "valueType": "AVMBytes", - "key": "Z2xvYmFsX2J5dGVzX2V4cGxpY2l0" - }, - "globalArc4Bytes": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "Z2xvYmFsX2FyYzRfYnl0ZXM=" - }, - "global_arc4_bytes_explicit": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "Z2xvYmFsX2FyYzRfYnl0ZXNfZXhwbGljaXQ=" - } - }, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 189 - ], - "errorMessage": "can only call when creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBieXRlY2Jsb2NrICJkdW1teV9ieXRlcyIgMHgwMDEwNjQ3NTZkNmQ3OTVmNjE3MjYzMzQ1ZjYyNzk3NDY1NzMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIGdsb2JhbFVpbnQ2NCA9IEdsb2JhbFN0YXRlKHsga2V5OiBCeXRlcygnZ2xvYmFsX3VpbnQ2NCcpLCBpbml0aWFsVmFsdWU6IFVpbnQ2NCgyKSB9KQogICAgcHVzaGJ5dGVzICJnbG9iYWxfdWludDY0IgogICAgcHVzaGludCAyIC8vIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBnbG9iYWxCeXRlcyA9IEdsb2JhbFN0YXRlKHsga2V5OiBCeXRlcygnZ2xvYmFsX2J5dGVzJyksIGluaXRpYWxWYWx1ZTogQnl0ZXMoJ2R1bW15X2J5dGVzJykgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2J5dGVzIgogICAgYnl0ZWNfMCAvLyAiZHVtbXlfYnl0ZXMiCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1OQogICAgLy8gZ2xvYmFsX3VpbnQ2NF9leHBsaWNpdCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMikgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsX3VpbnQ2NF9leHBsaWNpdCIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MAogICAgLy8gZ2xvYmFsX2J5dGVzX2V4cGxpY2l0ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IEJ5dGVzKCdkdW1teV9ieXRlcycpIH0pCiAgICBwdXNoYnl0ZXMgImdsb2JhbF9ieXRlc19leHBsaWNpdCIKICAgIGJ5dGVjXzAgLy8gImR1bW15X2J5dGVzIgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIGdsb2JhbEFyYzRCeXRlcyA9IEdsb2JhbFN0YXRlKHsga2V5OiBCeXRlcygnZ2xvYmFsX2FyYzRfYnl0ZXMnKSwgaW5pdGlhbFZhbHVlOiBuZXcgRHluYW1pY0J5dGVzKCdkdW1teV9hcmM0X2J5dGVzJykgfSkKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2FyYzRfYnl0ZXMiCiAgICBieXRlY18xIC8vIDB4MDAxMDY0NzU2ZDZkNzk1ZjYxNzI2MzM0NWY2Mjc5NzQ2NTczCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM2MgogICAgLy8gZ2xvYmFsX2FyYzRfYnl0ZXNfZXhwbGljaXQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogbmV3IER5bmFtaWNCeXRlcygnZHVtbXlfYXJjNF9ieXRlcycpIH0pCiAgICBwdXNoYnl0ZXMgImdsb2JhbF9hcmM0X2J5dGVzX2V4cGxpY2l0IgogICAgYnl0ZWNfMSAvLyAweDAwMTA2NDc1NmQ2ZDc5NWY2MTcyNjMzNDVmNjI3OTc0NjU3MwogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1NgogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwR2xvYmFsRXhDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAOQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUA5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzU2CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBHbG9iYWxFeENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiYCC2R1bW15X2J5dGVzEgAQZHVtbXlfYXJjNF9ieXRlczEYQACJgA1nbG9iYWxfdWludDY0gQJngAxnbG9iYWxfYnl0ZXMoZ4AWZ2xvYmFsX3VpbnQ2NF9leHBsaWNpdIECZ4AVZ2xvYmFsX2J5dGVzX2V4cGxpY2l0KGeAEWdsb2JhbF9hcmM0X2J5dGVzKWeAGmdsb2JhbF9hcmM0X2J5dGVzX2V4cGxpY2l0KWcxG0AADDEZQAAHMRgURIEBQ4EAQw==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppGlobalExContract.clear.teal b/tests/artifacts/state-ops/data/StateAppGlobalExContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAppGlobalExContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAppLocalContract.approval.teal b/tests/artifacts/state-ops/data/StateAppLocalContract.approval.teal deleted file mode 100644 index 780c93a..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalContract.approval.teal +++ /dev/null @@ -1,418 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@14 - pushbytess 0x30c6d58a 0x937b5e13 0x8d742b86 0x7a6d0b59 0x594ff1d9 0x95a31727 0xaa1f4792 0x46245287 0x7f0fdfdd // method "opt_in()void", method "verify_get_bytes(account,byte[])byte[]", method "verify_get_uint64(account,byte[])uint64", method "verify_get_ex_bytes(account,application,byte[])byte[]", method "verify_get_ex_uint64(account,application,byte[])uint64", method "verify_delete(account,byte[])void", method "verify_exists(account,byte[])bool", method "verify_put_uint64(account,byte[],uint64)void", method "verify_put_bytes(account,byte[],byte[])void" - txna ApplicationArgs 0 - match main_opt_in_route@3 main_verify_get_bytes_route@4 main_verify_get_uint64_route@5 main_verify_get_ex_bytes_route@6 main_verify_get_ex_uint64_route@7 main_verify_delete_route@8 main_verify_exists_route@9 main_verify_put_uint64_route@10 main_verify_put_bytes_route@11 - -main_after_if_else@18: - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - intc_1 // 0 - return - -main_verify_put_bytes_route@11: - // tests/artifacts/state-ops/contract.algo.ts:470 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:470 - // @arc4.abimethod() - callsub verify_put_bytes - intc_0 // 1 - return - -main_verify_put_uint64_route@10: - // tests/artifacts/state-ops/contract.algo.ts:465 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - extract 2 0 - txna ApplicationArgs 3 - btoi - // tests/artifacts/state-ops/contract.algo.ts:465 - // @arc4.abimethod() - callsub verify_put_uint64 - intc_0 // 1 - return - -main_verify_exists_route@9: - // tests/artifacts/state-ops/contract.algo.ts:459 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:459 - // @arc4.abimethod() - callsub verify_exists - pushbytes 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_delete_route@8: - // tests/artifacts/state-ops/contract.algo.ts:454 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:454 - // @arc4.abimethod() - callsub verify_delete - intc_0 // 1 - return - -main_verify_get_ex_uint64_route@7: - // tests/artifacts/state-ops/contract.algo.ts:448 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - btoi - txnas Applications - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:448 - // @arc4.abimethod() - callsub verify_get_ex_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_get_ex_bytes_route@6: - // tests/artifacts/state-ops/contract.algo.ts:442 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - btoi - txnas Applications - txna ApplicationArgs 3 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:442 - // @arc4.abimethod() - callsub verify_get_ex_bytes - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_get_uint64_route@5: - // tests/artifacts/state-ops/contract.algo.ts:436 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:436 - // @arc4.abimethod() - callsub verify_get_uint64 - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_get_bytes_route@4: - // tests/artifacts/state-ops/contract.algo.ts:430 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/state-ops/contract.algo.ts:430 - // @arc4.abimethod() - callsub verify_get_bytes - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_opt_in_route@3: - // tests/artifacts/state-ops/contract.algo.ts:424 - // @arc4.abimethod({ allowActions: ['OptIn'] }) - txn OnCompletion - intc_0 // OptIn - == - assert // OnCompletion is not OptIn - txn ApplicationID - assert // can only call when not creating - callsub opt_in - intc_0 // 1 - return - -main_bare_routing@14: - // tests/artifacts/state-ops/contract.algo.ts:420 - // export class StateAppLocalContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@18 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.opt_in() -> void: -opt_in: - // tests/artifacts/state-ops/contract.algo.ts:424-425 - // @arc4.abimethod({ allowActions: ['OptIn'] }) - // opt_in() { - proto 0 0 - // tests/artifacts/state-ops/contract.algo.ts:426 - // this.localBytes(Global.creatorAddress).value = Bytes('dummy_bytes') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:422 - // localBytes = LocalState({ key: 'local_bytes' }) - pushbytess "local_bytes" "dummy_bytes" // "local_bytes", "dummy_bytes" - // tests/artifacts/state-ops/contract.algo.ts:426 - // this.localBytes(Global.creatorAddress).value = Bytes('dummy_bytes') - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:427 - // this.localUint64(Global.creatorAddress).value = Uint64(999) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:421 - // localUint64 = LocalState({ key: 'local_uint64' }) - pushbytes "local_uint64" - // tests/artifacts/state-ops/contract.algo.ts:427 - // this.localUint64(Global.creatorAddress).value = Uint64(999) - pushint 999 // 999 - app_local_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_get_bytes(a: bytes, b: bytes) -> bytes: -verify_get_bytes: - // tests/artifacts/state-ops/contract.algo.ts:430-431 - // @arc4.abimethod() - // verify_get_bytes(a: Account, b: bytes): bytes { - proto 2 1 - // tests/artifacts/state-ops/contract.algo.ts:432 - // const value = op.AppLocal.getBytes(a, b) - frame_dig -2 - frame_dig -1 - app_local_get - // tests/artifacts/state-ops/contract.algo.ts:433 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_get_uint64(a: bytes, b: bytes) -> uint64: -verify_get_uint64: - // tests/artifacts/state-ops/contract.algo.ts:436-437 - // @arc4.abimethod() - // verify_get_uint64(a: Account, b: bytes): uint64 { - proto 2 1 - // tests/artifacts/state-ops/contract.algo.ts:438 - // const value = op.AppLocal.getUint64(a, b) - frame_dig -2 - frame_dig -1 - app_local_get - // tests/artifacts/state-ops/contract.algo.ts:439 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_get_ex_bytes(a: bytes, b: uint64, c: bytes) -> bytes: -verify_get_ex_bytes: - // tests/artifacts/state-ops/contract.algo.ts:442-443 - // @arc4.abimethod() - // verify_get_ex_bytes(a: Account, b: Application, c: bytes): bytes { - proto 3 1 - // tests/artifacts/state-ops/contract.algo.ts:444 - // const [value, _val] = op.AppLocal.getExBytes(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - app_local_get_ex - pop - // tests/artifacts/state-ops/contract.algo.ts:445 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_get_ex_uint64(a: bytes, b: uint64, c: bytes) -> uint64: -verify_get_ex_uint64: - // tests/artifacts/state-ops/contract.algo.ts:448-449 - // @arc4.abimethod() - // verify_get_ex_uint64(a: Account, b: Application, c: bytes): uint64 { - proto 3 1 - // tests/artifacts/state-ops/contract.algo.ts:450 - // const [value, _val] = op.AppLocal.getExUint64(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - app_local_get_ex - pop - // tests/artifacts/state-ops/contract.algo.ts:451 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_delete(a: bytes, b: bytes) -> void: -verify_delete: - // tests/artifacts/state-ops/contract.algo.ts:454-455 - // @arc4.abimethod() - // verify_delete(a: Account, b: bytes): void { - proto 2 0 - // tests/artifacts/state-ops/contract.algo.ts:456 - // op.AppLocal.delete(a, b) - frame_dig -2 - frame_dig -1 - app_local_del - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_exists(a: bytes, b: bytes) -> uint64: -verify_exists: - // tests/artifacts/state-ops/contract.algo.ts:459-460 - // @arc4.abimethod() - // verify_exists(a: Account, b: bytes): boolean { - proto 2 1 - // tests/artifacts/state-ops/contract.algo.ts:461 - // const [_value, exists] = op.AppLocal.getExUint64(a, 0, b) - frame_dig -2 - intc_1 // 0 - frame_dig -1 - app_local_get_ex - bury 1 - // tests/artifacts/state-ops/contract.algo.ts:462 - // return exists - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_put_uint64(a: bytes, b: bytes, c: uint64) -> void: -verify_put_uint64: - // tests/artifacts/state-ops/contract.algo.ts:465-466 - // @arc4.abimethod() - // verify_put_uint64(a: Account, b: bytes, c: uint64): void { - proto 3 0 - // tests/artifacts/state-ops/contract.algo.ts:467 - // op.AppLocal.put(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - app_local_put - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalContract.verify_put_bytes(a: bytes, b: bytes, c: bytes) -> void: -verify_put_bytes: - // tests/artifacts/state-ops/contract.algo.ts:470-471 - // @arc4.abimethod() - // verify_put_bytes(a: Account, b: bytes, c: bytes): void { - proto 3 0 - // tests/artifacts/state-ops/contract.algo.ts:472 - // op.AppLocal.put(a, b, c) - frame_dig -3 - frame_dig -2 - frame_dig -1 - app_local_put - retsub diff --git a/tests/artifacts/state-ops/data/StateAppLocalContract.arc32.json b/tests/artifacts/state-ops/data/StateAppLocalContract.arc32.json deleted file mode 100644 index 29d66f4..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalContract.arc32.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "hints": { - "opt_in()void": { - "call_config": { - "opt_in": "CALL" - } - }, - "verify_get_bytes(account,byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_get_uint64(account,byte[])uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_get_ex_bytes(account,application,byte[])byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_get_ex_uint64(account,application,byte[])uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_delete(account,byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_exists(account,byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_put_uint64(account,byte[],uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_put_bytes(account,byte[],byte[])void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNAogICAgcHVzaGJ5dGVzcyAweDMwYzZkNThhIDB4OTM3YjVlMTMgMHg4ZDc0MmI4NiAweDdhNmQwYjU5IDB4NTk0ZmYxZDkgMHg5NWEzMTcyNyAweGFhMWY0NzkyIDB4NDYyNDUyODcgMHg3ZjBmZGZkZCAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIsIG1ldGhvZCAidmVyaWZ5X2dldF9ieXRlcyhhY2NvdW50LGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9nZXRfdWludDY0KGFjY291bnQsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2dldF9leF9ieXRlcyhhY2NvdW50LGFwcGxpY2F0aW9uLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9nZXRfZXhfdWludDY0KGFjY291bnQsYXBwbGljYXRpb24sYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2RlbGV0ZShhY2NvdW50LGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfZXhpc3RzKGFjY291bnQsYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9wdXRfdWludDY0KGFjY291bnQsYnl0ZVtdLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfcHV0X2J5dGVzKGFjY291bnQsYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRfaW5fcm91dGVAMyBtYWluX3ZlcmlmeV9nZXRfYnl0ZXNfcm91dGVANCBtYWluX3ZlcmlmeV9nZXRfdWludDY0X3JvdXRlQDUgbWFpbl92ZXJpZnlfZ2V0X2V4X2J5dGVzX3JvdXRlQDYgbWFpbl92ZXJpZnlfZ2V0X2V4X3VpbnQ2NF9yb3V0ZUA3IG1haW5fdmVyaWZ5X2RlbGV0ZV9yb3V0ZUA4IG1haW5fdmVyaWZ5X2V4aXN0c19yb3V0ZUA5IG1haW5fdmVyaWZ5X3B1dF91aW50NjRfcm91dGVAMTAgbWFpbl92ZXJpZnlfcHV0X2J5dGVzX3JvdXRlQDExCgptYWluX2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9wdXRfYnl0ZXNfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcHV0X2J5dGVzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9wdXRfdWludDY0X3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcHV0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXhpc3RzX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leGlzdHMKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2RlbGV0ZV9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfZXhfdWludDY0X3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldF9leF91aW50NjQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2dldF9leF9ieXRlc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfZXhfYnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfdWludDY0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfdWludDY0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfYnl0ZXNfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldF9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fb3B0X2luX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnT3B0SW4nXSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE9wdEluCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgT3B0SW4KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBvcHRfaW4KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxOAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC5vcHRfaW4oKSAtPiB2b2lkOgpvcHRfaW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI0LTQyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ09wdEluJ10gfSkKICAgIC8vIG9wdF9pbigpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBCeXRlcygnZHVtbXlfYnl0ZXMnKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIyCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdsb2NhbF9ieXRlcycgfSkKICAgIHB1c2hieXRlc3MgImxvY2FsX2J5dGVzIiAiZHVtbXlfYnl0ZXMiIC8vICJsb2NhbF9ieXRlcyIsICJkdW1teV9ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjYKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gQnl0ZXMoJ2R1bW15X2J5dGVzJykKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjcKICAgIC8vIHRoaXMubG9jYWxVaW50NjQoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IFVpbnQ2NCg5OTkpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjEKICAgIC8vIGxvY2FsVWludDY0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbG9jYWxfdWludDY0JyB9KQogICAgcHVzaGJ5dGVzICJsb2NhbF91aW50NjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI3CiAgICAvLyB0aGlzLmxvY2FsVWludDY0KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBVaW50NjQoOTk5KQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZ2V0X2J5dGVzKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9nZXRfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMwLTQzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHZlcmlmeV9nZXRfYnl0ZXMoYTogQWNjb3VudCwgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzIKICAgIC8vIGNvbnN0IHZhbHVlID0gb3AuQXBwTG9jYWwuZ2V0Qnl0ZXMoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMzCiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9nZXRfdWludDY0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfZ2V0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzYtNDM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2dldF91aW50NjQoYTogQWNjb3VudCwgYjogYnl0ZXMpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDM4CiAgICAvLyBjb25zdCB2YWx1ZSA9IG9wLkFwcExvY2FsLmdldFVpbnQ2NChhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9nZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcExvY2FsQ29udHJhY3QudmVyaWZ5X2dldF9leF9ieXRlcyhhOiBieXRlcywgYjogdWludDY0LCBjOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9nZXRfZXhfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQyLTQ0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHZlcmlmeV9nZXRfZXhfYnl0ZXMoYTogQWNjb3VudCwgYjogQXBwbGljYXRpb24sIGM6IGJ5dGVzKTogYnl0ZXMgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQ0CiAgICAvLyBjb25zdCBbdmFsdWUsIF92YWxdID0gb3AuQXBwTG9jYWwuZ2V0RXhCeXRlcyhhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2xvY2FsX2dldF9leAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQ1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9nZXRfZXhfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9nZXRfZXhfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ0OC00NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZ2V0X2V4X3VpbnQ2NChhOiBBY2NvdW50LCBiOiBBcHBsaWNhdGlvbiwgYzogYnl0ZXMpOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDUwCiAgICAvLyBjb25zdCBbdmFsdWUsIF92YWxdID0gb3AuQXBwTG9jYWwuZ2V0RXhVaW50NjQoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZGVsZXRlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X2RlbGV0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NTQtNDU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2RlbGV0ZShhOiBBY2NvdW50LCBiOiBieXRlcyk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDU2CiAgICAvLyBvcC5BcHBMb2NhbC5kZWxldGUoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfZGVsCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZXhpc3RzKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfZXhpc3RzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1OS00NjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZXhpc3RzKGE6IEFjY291bnQsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NjEKICAgIC8vIGNvbnN0IFtfdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhLCAwLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NjIKICAgIC8vIHJldHVybiBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9wdXRfdWludDY0KGE6IGJ5dGVzLCBiOiBieXRlcywgYzogdWludDY0KSAtPiB2b2lkOgp2ZXJpZnlfcHV0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NjUtNDY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF91aW50NjQoYTogQWNjb3VudCwgYjogYnl0ZXMsIGM6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDY3CiAgICAvLyBvcC5BcHBMb2NhbC5wdXQoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9wdXRfYnl0ZXMoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X3B1dF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzAtNDcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF9ieXRlcyhhOiBBY2NvdW50LCBiOiBieXRlcywgYzogYnl0ZXMpOiB2b2lkIHsKICAgIHByb3RvIDMgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gb3AuQXBwTG9jYWwucHV0KGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 1, - "num_uints": 1 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": { - "localBytes": { - "type": "bytes", - "key": "local_bytes" - }, - "localUint64": { - "type": "uint64", - "key": "local_uint64" - } - }, - "reserved": {} - } - }, - "contract": { - "name": "StateAppLocalContract", - "methods": [ - { - "name": "opt_in", - "args": [], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "verify_get_bytes", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_get_uint64", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_get_ex_bytes", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "application", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_get_ex_uint64", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "application", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_delete", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "verify_exists", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_put_uint64", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - }, - { - "name": "verify_put_bytes", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppLocalContract.arc56.json b/tests/artifacts/state-ops/data/StateAppLocalContract.arc56.json deleted file mode 100644 index 1681f81..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalContract.arc56.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "name": "StateAppLocalContract", - "structs": {}, - "methods": [ - { - "name": "opt_in", - "args": [], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "OptIn" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_bytes", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_uint64", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_ex_bytes", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "application", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_get_ex_uint64", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "application", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_delete", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_exists", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_put_uint64", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "uint64", - "name": "c" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_put_bytes", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - }, - { - "type": "byte[]", - "name": "c" - } - ], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 1, - "bytes": 1 - } - }, - "keys": { - "global": {}, - "local": { - "localUint64": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "bG9jYWxfdWludDY0" - }, - "localBytes": { - "keyType": "AVMString", - "valueType": "AVMBytes", - "key": "bG9jYWxfYnl0ZXM=" - } - }, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 92, - 122, - 150, - 185, - 209, - 244, - 286, - 315 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 352 - ], - "errorMessage": "OnCompletion is not OptIn" - }, - { - "pc": [ - 369 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 95, - 125, - 153, - 188, - 212, - 247, - 289, - 318, - 355 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNAogICAgcHVzaGJ5dGVzcyAweDMwYzZkNThhIDB4OTM3YjVlMTMgMHg4ZDc0MmI4NiAweDdhNmQwYjU5IDB4NTk0ZmYxZDkgMHg5NWEzMTcyNyAweGFhMWY0NzkyIDB4NDYyNDUyODcgMHg3ZjBmZGZkZCAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIsIG1ldGhvZCAidmVyaWZ5X2dldF9ieXRlcyhhY2NvdW50LGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9nZXRfdWludDY0KGFjY291bnQsYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2dldF9leF9ieXRlcyhhY2NvdW50LGFwcGxpY2F0aW9uLGJ5dGVbXSlieXRlW10iLCBtZXRob2QgInZlcmlmeV9nZXRfZXhfdWludDY0KGFjY291bnQsYXBwbGljYXRpb24sYnl0ZVtdKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2RlbGV0ZShhY2NvdW50LGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfZXhpc3RzKGFjY291bnQsYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9wdXRfdWludDY0KGFjY291bnQsYnl0ZVtdLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ2ZXJpZnlfcHV0X2J5dGVzKGFjY291bnQsYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRfaW5fcm91dGVAMyBtYWluX3ZlcmlmeV9nZXRfYnl0ZXNfcm91dGVANCBtYWluX3ZlcmlmeV9nZXRfdWludDY0X3JvdXRlQDUgbWFpbl92ZXJpZnlfZ2V0X2V4X2J5dGVzX3JvdXRlQDYgbWFpbl92ZXJpZnlfZ2V0X2V4X3VpbnQ2NF9yb3V0ZUA3IG1haW5fdmVyaWZ5X2RlbGV0ZV9yb3V0ZUA4IG1haW5fdmVyaWZ5X2V4aXN0c19yb3V0ZUA5IG1haW5fdmVyaWZ5X3B1dF91aW50NjRfcm91dGVAMTAgbWFpbl92ZXJpZnlfcHV0X2J5dGVzX3JvdXRlQDExCgptYWluX2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9wdXRfYnl0ZXNfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcHV0X2J5dGVzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9wdXRfdWludDY0X3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfcHV0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZXhpc3RzX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9leGlzdHMKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2RlbGV0ZV9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfZGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfZXhfdWludDY0X3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ0OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldF9leF91aW50NjQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2dldF9leF9ieXRlc19yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfZXhfYnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfdWludDY0X3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbENvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9nZXRfdWludDY0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9nZXRfYnl0ZXNfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2dldF9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fb3B0X2luX3JvdXRlQDM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnT3B0SW4nXSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18wIC8vIE9wdEluCiAgICA9PQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgT3B0SW4KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBvcHRfaW4KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyMAogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwTG9jYWxDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxOAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC5vcHRfaW4oKSAtPiB2b2lkOgpvcHRfaW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI0LTQyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ09wdEluJ10gfSkKICAgIC8vIG9wdF9pbigpIHsKICAgIHByb3RvIDAgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBCeXRlcygnZHVtbXlfYnl0ZXMnKQogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIyCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdsb2NhbF9ieXRlcycgfSkKICAgIHB1c2hieXRlc3MgImxvY2FsX2J5dGVzIiAiZHVtbXlfYnl0ZXMiIC8vICJsb2NhbF9ieXRlcyIsICJkdW1teV9ieXRlcyIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjYKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gQnl0ZXMoJ2R1bW15X2J5dGVzJykKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjcKICAgIC8vIHRoaXMubG9jYWxVaW50NjQoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IFVpbnQ2NCg5OTkpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MjEKICAgIC8vIGxvY2FsVWludDY0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbG9jYWxfdWludDY0JyB9KQogICAgcHVzaGJ5dGVzICJsb2NhbF91aW50NjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDI3CiAgICAvLyB0aGlzLmxvY2FsVWludDY0KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBVaW50NjQoOTk5KQogICAgcHVzaGludCA5OTkgLy8gOTk5CiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZ2V0X2J5dGVzKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9nZXRfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMwLTQzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHZlcmlmeV9nZXRfYnl0ZXMoYTogQWNjb3VudCwgYjogYnl0ZXMpOiBieXRlcyB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzIKICAgIC8vIGNvbnN0IHZhbHVlID0gb3AuQXBwTG9jYWwuZ2V0Qnl0ZXMoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfZ2V0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMzCiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9nZXRfdWludDY0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfZ2V0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzYtNDM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2dldF91aW50NjQoYTogQWNjb3VudCwgYjogYnl0ZXMpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDM4CiAgICAvLyBjb25zdCB2YWx1ZSA9IG9wLkFwcExvY2FsLmdldFVpbnQ2NChhLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9nZXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MzkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcExvY2FsQ29udHJhY3QudmVyaWZ5X2dldF9leF9ieXRlcyhhOiBieXRlcywgYjogdWludDY0LCBjOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9nZXRfZXhfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQyLTQ0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHZlcmlmeV9nZXRfZXhfYnl0ZXMoYTogQWNjb3VudCwgYjogQXBwbGljYXRpb24sIGM6IGJ5dGVzKTogYnl0ZXMgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQ0CiAgICAvLyBjb25zdCBbdmFsdWUsIF92YWxdID0gb3AuQXBwTG9jYWwuZ2V0RXhCeXRlcyhhLCBiLCBjKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2xvY2FsX2dldF9leAogICAgcG9wCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDQ1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9nZXRfZXhfdWludDY0KGE6IGJ5dGVzLCBiOiB1aW50NjQsIGM6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9nZXRfZXhfdWludDY0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ0OC00NDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZ2V0X2V4X3VpbnQ2NChhOiBBY2NvdW50LCBiOiBBcHBsaWNhdGlvbiwgYzogYnl0ZXMpOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDUwCiAgICAvLyBjb25zdCBbdmFsdWUsIF92YWxdID0gb3AuQXBwTG9jYWwuZ2V0RXhVaW50NjQoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZGVsZXRlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X2RlbGV0ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NTQtNDU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X2RlbGV0ZShhOiBBY2NvdW50LCBiOiBieXRlcyk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDU2CiAgICAvLyBvcC5BcHBMb2NhbC5kZWxldGUoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfZGVsCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxDb250cmFjdC52ZXJpZnlfZXhpc3RzKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfZXhpc3RzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1OS00NjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyB2ZXJpZnlfZXhpc3RzKGE6IEFjY291bnQsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NjEKICAgIC8vIGNvbnN0IFtfdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBMb2NhbC5nZXRFeFVpbnQ2NChhLCAwLCBiKQogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NjIKICAgIC8vIHJldHVybiBleGlzdHMKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9wdXRfdWludDY0KGE6IGJ5dGVzLCBiOiBieXRlcywgYzogdWludDY0KSAtPiB2b2lkOgp2ZXJpZnlfcHV0X3VpbnQ2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NjUtNDY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF91aW50NjQoYTogQWNjb3VudCwgYjogYnl0ZXMsIGM6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMyAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDY3CiAgICAvLyBvcC5BcHBMb2NhbC5wdXQoYSwgYiwgYykKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBMb2NhbENvbnRyYWN0LnZlcmlmeV9wdXRfYnl0ZXMoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gdm9pZDoKdmVyaWZ5X3B1dF9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0NzAtNDcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gdmVyaWZ5X3B1dF9ieXRlcyhhOiBBY2NvdW50LCBiOiBieXRlcywgYzogYnl0ZXMpOiB2b2lkIHsKICAgIHByb3RvIDMgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gb3AuQXBwTG9jYWwucHV0KGEsIGIsIGMpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmAQQVH3x1MRtBAViCCQQwxtWKBJN7XhMEjXQrhgR6bQtZBFlP8dkElaMXJwSqH0eSBEYkUocEfw/f3TYaAI4JAQUA4QDEAJoAdwBfADwAIAACI0MxGRREMRhENhoBF8AcNhoCVwIANhoDVwIAiAF+IkMxGRREMRhENhoBF8AcNhoCVwIANhoDF4gBVyJDMRkURDEYRDYaARfAHDYaAlcCAIgBM4ABACNPAlQoTFCwIkMxGRREMRhENhoBF8AcNhoCVwIAiAEHIkMxGRREMRhENhoBF8AcNhoCF8AyNhoDVwIAiADdFihMULAiQzEZFEQxGEQ2GgEXwBw2GgIXwDI2GgNXAgCIAK5JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXwBw2GgJXAgCIAIEWKExQsCJDMRkURDEYRDYaARfAHDYaAlcCAIgAW0kVFlcGAkxQKExQsCJDMRkiEkQxGESIAA0iQzEZQP7pMRgURCJDigAAMgmCAgtsb2NhbF9ieXRlcwtkdW1teV9ieXRlc2YyCYAMbG9jYWxfdWludDY0gecHZomKAgGL/ov/YomKAgGL/ov/YomKAwGL/Yv+i/9jSImKAwGL/Yv+i/9jSImKAgCL/ov/aImKAgGL/iOL/2NFAYmKAwCL/Yv+i/9miYoDAIv9i/6L/2aJ", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppLocalContract.clear.teal b/tests/artifacts/state-ops/data/StateAppLocalContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAppLocalExContract.approval.teal b/tests/artifacts/state-ops/data/StateAppLocalExContract.approval.teal deleted file mode 100644 index f5bb7b3..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalExContract.approval.teal +++ /dev/null @@ -1,79 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - // tests/artifacts/state-ops/contract.algo.ts:407 - // export class StateAppLocalExContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@6 - pushbytes 0x30c6d58a // method "opt_in()void" - txna ApplicationArgs 0 - match main_opt_in_route@3 - -main_after_if_else@10: - // tests/artifacts/state-ops/contract.algo.ts:407 - // export class StateAppLocalExContract extends arc4.Contract { - pushint 0 // 0 - return - -main_opt_in_route@3: - // tests/artifacts/state-ops/contract.algo.ts:412 - // @arc4.abimethod({ allowActions: ['OptIn'] }) - txn OnCompletion - pushint 1 // OptIn - == - assert // OnCompletion is not OptIn - txn ApplicationID - assert // can only call when not creating - callsub opt_in - pushint 1 // 1 - return - -main_bare_routing@6: - // tests/artifacts/state-ops/contract.algo.ts:407 - // export class StateAppLocalExContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@10 - txn ApplicationID - ! - assert // can only call when creating - pushint 1 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppLocalExContract.opt_in() -> void: -opt_in: - // tests/artifacts/state-ops/contract.algo.ts:412-413 - // @arc4.abimethod({ allowActions: ['OptIn'] }) - // opt_in(): void { - proto 0 0 - // tests/artifacts/state-ops/contract.algo.ts:414 - // this.localBytes(Global.creatorAddress).value = Bytes('dummy_bytes_from_external_contract') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:409 - // localBytes = LocalState({ key: 'local_bytes' }) - pushbytess "local_bytes" "dummy_bytes_from_external_contract" // "local_bytes", "dummy_bytes_from_external_contract" - // tests/artifacts/state-ops/contract.algo.ts:414 - // this.localBytes(Global.creatorAddress).value = Bytes('dummy_bytes_from_external_contract') - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:415 - // this.localUint64(Global.creatorAddress).value = Uint64(99) - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:408 - // localUint64 = LocalState({ key: 'local_uint64' }) - pushbytes "local_uint64" - // tests/artifacts/state-ops/contract.algo.ts:415 - // this.localUint64(Global.creatorAddress).value = Uint64(99) - pushint 99 // 99 - app_local_put - // tests/artifacts/state-ops/contract.algo.ts:416 - // this.localArc4Bytes(Global.creatorAddress).value = new DynamicBytes('dummy_arc4_bytes') - global CreatorAddress - // tests/artifacts/state-ops/contract.algo.ts:410 - // localArc4Bytes = LocalState({ key: 'local_arc4_bytes' }) - pushbytess "local_arc4_bytes" 0x001064756d6d795f617263345f6279746573 // "local_arc4_bytes", 0x001064756d6d795f617263345f6279746573 - // tests/artifacts/state-ops/contract.algo.ts:416 - // this.localArc4Bytes(Global.creatorAddress).value = new DynamicBytes('dummy_arc4_bytes') - app_local_put - retsub diff --git a/tests/artifacts/state-ops/data/StateAppLocalExContract.arc32.json b/tests/artifacts/state-ops/data/StateAppLocalExContract.arc32.json deleted file mode 100644 index 10d9fe9..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalExContract.arc32.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "hints": { - "opt_in()void": { - "call_config": { - "opt_in": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDA3CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbEV4Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHgzMGM2ZDU4YSAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDcKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsRXhDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydPcHRJbiddIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdF9pbgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDcKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsRXhDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxFeENvbnRyYWN0Lm9wdF9pbigpIC0+IHZvaWQ6Cm9wdF9pbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MTItNDEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnT3B0SW4nXSB9KQogICAgLy8gb3B0X2luKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE0CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IEJ5dGVzKCdkdW1teV9ieXRlc19mcm9tX2V4dGVybmFsX2NvbnRyYWN0JykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnbG9jYWxfYnl0ZXMnIH0pCiAgICBwdXNoYnl0ZXNzICJsb2NhbF9ieXRlcyIgImR1bW15X2J5dGVzX2Zyb21fZXh0ZXJuYWxfY29udHJhY3QiIC8vICJsb2NhbF9ieXRlcyIsICJkdW1teV9ieXRlc19mcm9tX2V4dGVybmFsX2NvbnRyYWN0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBCeXRlcygnZHVtbXlfYnl0ZXNfZnJvbV9leHRlcm5hbF9jb250cmFjdCcpCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE1CiAgICAvLyB0aGlzLmxvY2FsVWludDY0KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBVaW50NjQoOTkpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIGxvY2FsVWludDY0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbG9jYWxfdWludDY0JyB9KQogICAgcHVzaGJ5dGVzICJsb2NhbF91aW50NjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE1CiAgICAvLyB0aGlzLmxvY2FsVWludDY0KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBVaW50NjQoOTkpCiAgICBwdXNoaW50IDk5IC8vIDk5CiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE2CiAgICAvLyB0aGlzLmxvY2FsQXJjNEJ5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgRHluYW1pY0J5dGVzKCdkdW1teV9hcmM0X2J5dGVzJykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxMAogICAgLy8gbG9jYWxBcmM0Qnl0ZXMgPSBMb2NhbFN0YXRlPER5bmFtaWNCeXRlcz4oeyBrZXk6ICdsb2NhbF9hcmM0X2J5dGVzJyB9KQogICAgcHVzaGJ5dGVzcyAibG9jYWxfYXJjNF9ieXRlcyIgMHgwMDEwNjQ3NTZkNmQ3OTVmNjE3MjYzMzQ1ZjYyNzk3NDY1NzMgLy8gImxvY2FsX2FyYzRfYnl0ZXMiLCAweDAwMTA2NDc1NmQ2ZDc5NWY2MTcyNjMzNDVmNjI3OTc0NjU3MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gdGhpcy5sb2NhbEFyYzRCeXRlcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IER5bmFtaWNCeXRlcygnZHVtbXlfYXJjNF9ieXRlcycpCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 2, - "num_uints": 1 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": { - "localArc4Bytes": { - "type": "bytes", - "key": "local_arc4_bytes" - }, - "localBytes": { - "type": "bytes", - "key": "local_bytes" - }, - "localUint64": { - "type": "uint64", - "key": "local_uint64" - } - }, - "reserved": {} - } - }, - "contract": { - "name": "StateAppLocalExContract", - "methods": [ - { - "name": "opt_in", - "args": [], - "readonly": false, - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppLocalExContract.arc56.json b/tests/artifacts/state-ops/data/StateAppLocalExContract.arc56.json deleted file mode 100644 index 7469aae..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalExContract.arc56.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "name": "StateAppLocalExContract", - "structs": {}, - "methods": [ - { - "name": "opt_in", - "args": [], - "returns": { - "type": "void" - }, - "actions": { - "create": [], - "call": [ - "OptIn" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 1, - "bytes": 2 - } - }, - "keys": { - "global": {}, - "local": { - "localUint64": { - "keyType": "AVMString", - "valueType": "AVMUint64", - "key": "bG9jYWxfdWludDY0" - }, - "localBytes": { - "keyType": "AVMString", - "valueType": "AVMBytes", - "key": "bG9jYWxfYnl0ZXM=" - }, - "localArc4Bytes": { - "keyType": "AVMString", - "valueType": "byte[]", - "key": "bG9jYWxfYXJjNF9ieXRlcw==" - } - }, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 27 - ], - "errorMessage": "OnCompletion is not OptIn" - }, - { - "pc": [ - 45 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 30 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDA3CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBMb2NhbEV4Q29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHgzMGM2ZDU4YSAvLyBtZXRob2QgIm9wdF9pbigpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDcKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsRXhDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydPcHRJbiddIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdF9pbgogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDcKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcExvY2FsRXhDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwTG9jYWxFeENvbnRyYWN0Lm9wdF9pbigpIC0+IHZvaWQ6Cm9wdF9pbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MTItNDEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6IFsnT3B0SW4nXSB9KQogICAgLy8gb3B0X2luKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE0CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoR2xvYmFsLmNyZWF0b3JBZGRyZXNzKS52YWx1ZSA9IEJ5dGVzKCdkdW1teV9ieXRlc19mcm9tX2V4dGVybmFsX2NvbnRyYWN0JykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnbG9jYWxfYnl0ZXMnIH0pCiAgICBwdXNoYnl0ZXNzICJsb2NhbF9ieXRlcyIgImR1bW15X2J5dGVzX2Zyb21fZXh0ZXJuYWxfY29udHJhY3QiIC8vICJsb2NhbF9ieXRlcyIsICJkdW1teV9ieXRlc19mcm9tX2V4dGVybmFsX2NvbnRyYWN0IgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gdGhpcy5sb2NhbEJ5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBCeXRlcygnZHVtbXlfYnl0ZXNfZnJvbV9leHRlcm5hbF9jb250cmFjdCcpCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE1CiAgICAvLyB0aGlzLmxvY2FsVWludDY0KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBVaW50NjQoOTkpCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIGxvY2FsVWludDY0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbG9jYWxfdWludDY0JyB9KQogICAgcHVzaGJ5dGVzICJsb2NhbF91aW50NjQiCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE1CiAgICAvLyB0aGlzLmxvY2FsVWludDY0KEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBVaW50NjQoOTkpCiAgICBwdXNoaW50IDk5IC8vIDk5CiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDE2CiAgICAvLyB0aGlzLmxvY2FsQXJjNEJ5dGVzKEdsb2JhbC5jcmVhdG9yQWRkcmVzcykudmFsdWUgPSBuZXcgRHluYW1pY0J5dGVzKCdkdW1teV9hcmM0X2J5dGVzJykKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxMAogICAgLy8gbG9jYWxBcmM0Qnl0ZXMgPSBMb2NhbFN0YXRlPER5bmFtaWNCeXRlcz4oeyBrZXk6ICdsb2NhbF9hcmM0X2J5dGVzJyB9KQogICAgcHVzaGJ5dGVzcyAibG9jYWxfYXJjNF9ieXRlcyIgMHgwMDEwNjQ3NTZkNmQ3OTVmNjE3MjYzMzQ1ZjYyNzk3NDY1NzMgLy8gImxvY2FsX2FyYzRfYnl0ZXMiLCAweDAwMTA2NDc1NmQ2ZDc5NWY2MTcyNjMzNDVmNjI3OTc0NjU3MwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gdGhpcy5sb2NhbEFyYzRCeXRlcyhHbG9iYWwuY3JlYXRvckFkZHJlc3MpLnZhbHVlID0gbmV3IER5bmFtaWNCeXRlcygnZHVtbXlfYXJjNF9ieXRlcycpCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIK", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CjEbQQAfgAQwxtWKNhoAjgEAA4EAQzEZgQESRDEYRIgAD4EBQzEZQP/pMRgURIEBQ4oAADIJggILbG9jYWxfYnl0ZXMiZHVtbXlfYnl0ZXNfZnJvbV9leHRlcm5hbF9jb250cmFjdGYyCYAMbG9jYWxfdWludDY0gWNmMgmCAhBsb2NhbF9hcmM0X2J5dGVzEgAQZHVtbXlfYXJjNF9ieXRlc2aJ", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppLocalExContract.clear.teal b/tests/artifacts/state-ops/data/StateAppLocalExContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAppLocalExContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAppParamsContract.approval.teal b/tests/artifacts/state-ops/data/StateAppParamsContract.approval.teal deleted file mode 100644 index f46bbbe..0000000 --- a/tests/artifacts/state-ops/data/StateAppParamsContract.approval.teal +++ /dev/null @@ -1,552 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 - bytecblock 0x151f7c75 - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@14 - pushbytess 0x5e7b7d52 0xe29e30ee 0x58819099 0xca77b59b 0x53c0dd9b 0x5f000703 0xd77bd21f 0xa941a746 0xbd3e9eec // method "verify_app_params_get_approval_program(application)byte[]", method "verify_app_params_get_clear_state_program(application)byte[]", method "verify_app_params_get_global_num_uint(application)uint64", method "verify_app_params_get_global_num_byte_slice(application)uint64", method "verify_app_params_get_local_num_uint(application)uint64", method "verify_app_params_get_local_num_byte_slice(application)uint64", method "verify_app_params_get_extra_program_pages(application)uint64", method "verify_app_params_get_creator(application)address", method "verify_app_params_get_address(application)address" - txna ApplicationArgs 0 - match main_verify_app_params_get_approval_program_route@3 main_verify_app_params_get_clear_state_program_route@4 main_verify_app_params_get_global_num_uint_route@5 main_verify_app_params_get_global_num_byte_slice_route@6 main_verify_app_params_get_local_num_uint_route@7 main_verify_app_params_get_local_num_byte_slice_route@8 main_verify_app_params_get_extra_program_pages_route@9 main_verify_app_params_get_creator_route@10 main_verify_app_params_get_address_route@11 - -main_after_if_else@18: - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - pushint 0 // 0 - return - -main_verify_app_params_get_address_route@11: - // tests/artifacts/state-ops/contract.algo.ts:346 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:346 - // @arc4.abimethod() - callsub verify_app_params_get_address - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_creator_route@10: - // tests/artifacts/state-ops/contract.algo.ts:337 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:337 - // @arc4.abimethod() - callsub verify_app_params_get_creator - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_extra_program_pages_route@9: - // tests/artifacts/state-ops/contract.algo.ts:328 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:328 - // @arc4.abimethod() - callsub verify_app_params_get_extra_program_pages - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_local_num_byte_slice_route@8: - // tests/artifacts/state-ops/contract.algo.ts:319 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:319 - // @arc4.abimethod() - callsub verify_app_params_get_local_num_byte_slice - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_local_num_uint_route@7: - // tests/artifacts/state-ops/contract.algo.ts:310 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:310 - // @arc4.abimethod() - callsub verify_app_params_get_local_num_uint - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_global_num_byte_slice_route@6: - // tests/artifacts/state-ops/contract.algo.ts:301 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:301 - // @arc4.abimethod() - callsub verify_app_params_get_global_num_byte_slice - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_global_num_uint_route@5: - // tests/artifacts/state-ops/contract.algo.ts:292 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:292 - // @arc4.abimethod() - callsub verify_app_params_get_global_num_uint - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_clear_state_program_route@4: - // tests/artifacts/state-ops/contract.algo.ts:283 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:283 - // @arc4.abimethod() - callsub verify_app_params_get_clear_state_program - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_app_params_get_approval_program_route@3: - // tests/artifacts/state-ops/contract.algo.ts:274 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Applications - // tests/artifacts/state-ops/contract.algo.ts:274 - // @arc4.abimethod() - callsub verify_app_params_get_approval_program - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@14: - // tests/artifacts/state-ops/contract.algo.ts:273 - // export class StateAppParamsContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@18 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_approval_program(a: uint64) -> bytes: -verify_app_params_get_approval_program: - // tests/artifacts/state-ops/contract.algo.ts:274-275 - // @arc4.abimethod() - // public verify_app_params_get_approval_program(a: Application): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:276 - // const [value, exists] = op.AppParams.appApprovalProgram(a) - frame_dig -1 - app_params_get AppApprovalProgram - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:277 - // const [value_index, exists_index] = op.AppParams.appApprovalProgram(get_1st_ref_index()) - app_params_get AppApprovalProgram - // tests/artifacts/state-ops/contract.algo.ts:278 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:279 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:280 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_clear_state_program(a: uint64) -> bytes: -verify_app_params_get_clear_state_program: - // tests/artifacts/state-ops/contract.algo.ts:283-284 - // @arc4.abimethod() - // public verify_app_params_get_clear_state_program(a: Application): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:285 - // const [value, exists] = op.AppParams.appClearStateProgram(a) - frame_dig -1 - app_params_get AppClearStateProgram - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:286 - // const [value_index, exists_index] = op.AppParams.appClearStateProgram(get_1st_ref_index()) - app_params_get AppClearStateProgram - // tests/artifacts/state-ops/contract.algo.ts:287 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:288 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:289 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_global_num_uint(a: uint64) -> uint64: -verify_app_params_get_global_num_uint: - // tests/artifacts/state-ops/contract.algo.ts:292-293 - // @arc4.abimethod() - // public verify_app_params_get_global_num_uint(a: Application): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:294 - // const [value, exists] = op.AppParams.appGlobalNumUint(a) - frame_dig -1 - app_params_get AppGlobalNumUint - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:295 - // const [value_index, exists_index] = op.AppParams.appGlobalNumUint(get_1st_ref_index()) - app_params_get AppGlobalNumUint - // tests/artifacts/state-ops/contract.algo.ts:296 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:297 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:298 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_global_num_byte_slice(a: uint64) -> uint64: -verify_app_params_get_global_num_byte_slice: - // tests/artifacts/state-ops/contract.algo.ts:301-302 - // @arc4.abimethod() - // public verify_app_params_get_global_num_byte_slice(a: Application): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:303 - // const [value, exists] = op.AppParams.appGlobalNumByteSlice(a) - frame_dig -1 - app_params_get AppGlobalNumByteSlice - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:304 - // const [value_index, exists_index] = op.AppParams.appGlobalNumByteSlice(get_1st_ref_index()) - app_params_get AppGlobalNumByteSlice - // tests/artifacts/state-ops/contract.algo.ts:305 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:306 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:307 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_local_num_uint(a: uint64) -> uint64: -verify_app_params_get_local_num_uint: - // tests/artifacts/state-ops/contract.algo.ts:310-311 - // @arc4.abimethod() - // public verify_app_params_get_local_num_uint(a: Application): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:312 - // const [value, exists] = op.AppParams.appLocalNumUint(a) - frame_dig -1 - app_params_get AppLocalNumUint - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:313 - // const [value_index, exists_index] = op.AppParams.appLocalNumUint(get_1st_ref_index()) - app_params_get AppLocalNumUint - // tests/artifacts/state-ops/contract.algo.ts:314 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:315 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:316 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_local_num_byte_slice(a: uint64) -> uint64: -verify_app_params_get_local_num_byte_slice: - // tests/artifacts/state-ops/contract.algo.ts:319-320 - // @arc4.abimethod() - // public verify_app_params_get_local_num_byte_slice(a: Application): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:321 - // const [value, exists] = op.AppParams.appLocalNumByteSlice(a) - frame_dig -1 - app_params_get AppLocalNumByteSlice - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:322 - // const [value_index, exists_index] = op.AppParams.appLocalNumByteSlice(get_1st_ref_index()) - app_params_get AppLocalNumByteSlice - // tests/artifacts/state-ops/contract.algo.ts:323 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:324 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:325 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_extra_program_pages(a: uint64) -> uint64: -verify_app_params_get_extra_program_pages: - // tests/artifacts/state-ops/contract.algo.ts:328-329 - // @arc4.abimethod() - // public verify_app_params_get_extra_program_pages(a: Application): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:330 - // const [value, exists] = op.AppParams.appExtraProgramPages(a) - frame_dig -1 - app_params_get AppExtraProgramPages - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:331 - // const [value_index, exists_index] = op.AppParams.appExtraProgramPages(get_1st_ref_index()) - app_params_get AppExtraProgramPages - // tests/artifacts/state-ops/contract.algo.ts:332 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:333 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:334 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_creator(a: uint64) -> bytes: -verify_app_params_get_creator: - // tests/artifacts/state-ops/contract.algo.ts:337-338 - // @arc4.abimethod() - // public verify_app_params_get_creator(a: Application): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:339 - // const [value, exists] = op.AppParams.appCreator(a) - frame_dig -1 - app_params_get AppCreator - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:340 - // const [value_index, exists_index] = op.AppParams.appCreator(get_1st_ref_index()) - app_params_get AppCreator - // tests/artifacts/state-ops/contract.algo.ts:341 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:342 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:343 - // return new Address(value) - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAppParamsContract.verify_app_params_get_address(a: uint64) -> bytes: -verify_app_params_get_address: - // tests/artifacts/state-ops/contract.algo.ts:346-347 - // @arc4.abimethod() - // public verify_app_params_get_address(a: Application): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:348 - // const [value, exists] = op.AppParams.appAddress(a) - frame_dig -1 - app_params_get AppAddress - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:349 - // const [value_index, exists_index] = op.AppParams.appAddress(get_1st_ref_index()) - app_params_get AppAddress - // tests/artifacts/state-ops/contract.algo.ts:350 - // assert(value.bytes.toString() === value_index.bytes.toString(), 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:351 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:352 - // return new Address(value) - retsub diff --git a/tests/artifacts/state-ops/data/StateAppParamsContract.arc32.json b/tests/artifacts/state-ops/data/StateAppParamsContract.arc32.json deleted file mode 100644 index 8c9e9b6..0000000 --- a/tests/artifacts/state-ops/data/StateAppParamsContract.arc32.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "hints": { - "verify_app_params_get_approval_program(application)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_clear_state_program(application)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_global_num_uint(application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_global_num_byte_slice(application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_local_num_uint(application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_local_num_byte_slice(application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_extra_program_pages(application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_creator(application)address": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_app_params_get_address(application)address": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE0CiAgICBwdXNoYnl0ZXNzIDB4NWU3YjdkNTIgMHhlMjllMzBlZSAweDU4ODE5MDk5IDB4Y2E3N2I1OWIgMHg1M2MwZGQ5YiAweDVmMDAwNzAzIDB4ZDc3YmQyMWYgMHhhOTQxYTc0NiAweGJkM2U5ZWVjIC8vIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FwcHJvdmFsX3Byb2dyYW0oYXBwbGljYXRpb24pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbShhcHBsaWNhdGlvbilieXRlW10iLCBtZXRob2QgInZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQoYXBwbGljYXRpb24pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlKGFwcGxpY2F0aW9uKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV91aW50KGFwcGxpY2F0aW9uKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV9ieXRlX3NsaWNlKGFwcGxpY2F0aW9uKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2V4dHJhX3Byb2dyYW1fcGFnZXMoYXBwbGljYXRpb24pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvcihhcHBsaWNhdGlvbilhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcyhhcHBsaWNhdGlvbilhZGRyZXNzIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbV9yb3V0ZUAzIG1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NsZWFyX3N0YXRlX3Byb2dyYW1fcm91dGVANCBtYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnRfcm91dGVANSBtYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVANiBtYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fdWludF9yb3V0ZUA3IG1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV9ieXRlX3NsaWNlX3JvdXRlQDggbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlc19yb3V0ZUA5IG1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NyZWF0b3Jfcm91dGVAMTAgbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzc19yb3V0ZUAxMQoKbWFpbl9hZnRlcl9pZl9lbHNlQDE4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwUGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FkZHJlc3Nfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvcl9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9jcmVhdG9yCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9leHRyYV9wcm9ncmFtX3BhZ2VzX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlcwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnRfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fdWludAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnRfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NsZWFyX3N0YXRlX3Byb2dyYW1fcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9jbGVhcl9zdGF0ZV9wcm9ncmFtCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwUGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FwcHJvdmFsX3Byb2dyYW0KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE4CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQtMjc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9hcHByb3ZhbF9wcm9ncmFtKGE6IEFwcGxpY2F0aW9uKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwQXBwcm92YWxQcm9ncmFtKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFwcHJvdmFsUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcEFwcHJvdmFsUHJvZ3JhbShnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQXBwcm92YWxQcm9ncmFtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODMtMjg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9jbGVhcl9zdGF0ZV9wcm9ncmFtKGE6IEFwcGxpY2F0aW9uKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwQ2xlYXJTdGF0ZVByb2dyYW0oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwQ2xlYXJTdGF0ZVByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODYKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBDbGVhclN0YXRlUHJvZ3JhbShnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQ2xlYXJTdGF0ZVByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODcKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkyLTI5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV91aW50KGE6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5NAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXBwUGFyYW1zLmFwcEdsb2JhbE51bVVpbnQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwR2xvYmFsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5NQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcEdsb2JhbE51bVVpbnQoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEdsb2JhbE51bVVpbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk3CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2UoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAxLTMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlKGE6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXBwUGFyYW1zLmFwcEdsb2JhbE51bUJ5dGVTbGljZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMDQKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBHbG9iYWxOdW1CeXRlU2xpY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV91aW50KGE6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEwLTMxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnQoYTogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEyCiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwTG9jYWxOdW1VaW50KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcExvY2FsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcExvY2FsTnVtVWludChnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwTG9jYWxOdW1VaW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX2J5dGVfc2xpY2UoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTktMzIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZShhOiBBcHBsaWNhdGlvbik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMjEKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFwcFBhcmFtcy5hcHBMb2NhbE51bUJ5dGVTbGljZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcExvY2FsTnVtQnl0ZVNsaWNlKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMwogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMjQKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2V4dHJhX3Byb2dyYW1fcGFnZXMoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9leHRyYV9wcm9ncmFtX3BhZ2VzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyOC0zMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2V4dHJhX3Byb2dyYW1fcGFnZXMoYTogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwRXh0cmFQcm9ncmFtUGFnZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBFeHRyYVByb2dyYW1QYWdlcyhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMzCiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hcHBfcGFyYW1zX2dldF9jcmVhdG9yKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9jcmVhdG9yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNy0zMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NyZWF0b3IoYTogQXBwbGljYXRpb24pOiBBZGRyZXNzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXBwUGFyYW1zLmFwcENyZWF0b3IoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0MAogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcENyZWF0b3IoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQyCiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh2YWx1ZSkKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcyhhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDYtMzQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9hZGRyZXNzKGE6IEFwcGxpY2F0aW9uKTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFwcFBhcmFtcy5hcHBBZGRyZXNzKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBBZGRyZXNzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzUwCiAgICAvLyBhc3NlcnQodmFsdWUuYnl0ZXMudG9TdHJpbmcoKSA9PT0gdmFsdWVfaW5kZXguYnl0ZXMudG9TdHJpbmcoKSwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1MgogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "StateAppParamsContract", - "methods": [ - { - "name": "verify_app_params_get_approval_program", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_app_params_get_clear_state_program", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_app_params_get_global_num_uint", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_app_params_get_global_num_byte_slice", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_app_params_get_local_num_uint", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_app_params_get_local_num_byte_slice", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_app_params_get_extra_program_pages", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_app_params_get_creator", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "verify_app_params_get_address", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppParamsContract.arc56.json b/tests/artifacts/state-ops/data/StateAppParamsContract.arc56.json deleted file mode 100644 index eeff28b..0000000 --- a/tests/artifacts/state-ops/data/StateAppParamsContract.arc56.json +++ /dev/null @@ -1,319 +0,0 @@ -{ - "name": "StateAppParamsContract", - "structs": {}, - "methods": [ - { - "name": "verify_app_params_get_approval_program", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_clear_state_program", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_global_num_uint", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_global_num_byte_slice", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_local_num_uint", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_local_num_byte_slice", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_extra_program_pages", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_creator", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_app_params_get_address", - "args": [ - { - "type": "application", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 92, - 114, - 136, - 159, - 182, - 205, - 228, - 251, - 281 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 316 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 95, - 117, - 139, - 162, - 185, - 208, - 231, - 254, - 284 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 339, - 361, - 383, - 405, - 427, - 449, - 471, - 493, - 515 - ], - "errorMessage": "expected exists by index to match" - }, - { - "pc": [ - 337, - 359, - 381, - 403, - 425, - 447, - 469, - 491, - 513 - ], - "errorMessage": "expected value by index to match" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE0CiAgICBwdXNoYnl0ZXNzIDB4NWU3YjdkNTIgMHhlMjllMzBlZSAweDU4ODE5MDk5IDB4Y2E3N2I1OWIgMHg1M2MwZGQ5YiAweDVmMDAwNzAzIDB4ZDc3YmQyMWYgMHhhOTQxYTc0NiAweGJkM2U5ZWVjIC8vIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FwcHJvdmFsX3Byb2dyYW0oYXBwbGljYXRpb24pYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbShhcHBsaWNhdGlvbilieXRlW10iLCBtZXRob2QgInZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQoYXBwbGljYXRpb24pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlKGFwcGxpY2F0aW9uKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV91aW50KGFwcGxpY2F0aW9uKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV9ieXRlX3NsaWNlKGFwcGxpY2F0aW9uKXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2V4dHJhX3Byb2dyYW1fcGFnZXMoYXBwbGljYXRpb24pdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvcihhcHBsaWNhdGlvbilhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcyhhcHBsaWNhdGlvbilhZGRyZXNzIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbV9yb3V0ZUAzIG1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NsZWFyX3N0YXRlX3Byb2dyYW1fcm91dGVANCBtYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnRfcm91dGVANSBtYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVANiBtYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fdWludF9yb3V0ZUA3IG1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV9ieXRlX3NsaWNlX3JvdXRlQDggbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlc19yb3V0ZUA5IG1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NyZWF0b3Jfcm91dGVAMTAgbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzc19yb3V0ZUAxMQoKbWFpbl9hZnRlcl9pZl9lbHNlQDE4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwUGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FkZHJlc3Nfcm91dGVAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfY3JlYXRvcl9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9jcmVhdG9yCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9leHRyYV9wcm9ncmFtX3BhZ2VzX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZXh0cmFfcHJvZ3JhbV9wYWdlcwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX2J5dGVfc2xpY2Vfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnRfcm91dGVANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fdWludAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBcHBQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnRfcm91dGVANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NsZWFyX3N0YXRlX3Byb2dyYW1fcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9jbGVhcl9zdGF0ZV9wcm9ncmFtCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXBwUGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2FwcHJvdmFsX3Byb2dyYW0KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE4CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYXBwcm92YWxfcHJvZ3JhbToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQtMjc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9hcHByb3ZhbF9wcm9ncmFtKGE6IEFwcGxpY2F0aW9uKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwQXBwcm92YWxQcm9ncmFtKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFwcHJvdmFsUHJvZ3JhbQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcEFwcHJvdmFsUHJvZ3JhbShnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQXBwcm92YWxQcm9ncmFtCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfY2xlYXJfc3RhdGVfcHJvZ3JhbToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODMtMjg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9jbGVhcl9zdGF0ZV9wcm9ncmFtKGE6IEFwcGxpY2F0aW9uKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg1CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwQ2xlYXJTdGF0ZVByb2dyYW0oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwQ2xlYXJTdGF0ZVByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODYKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBDbGVhclN0YXRlUHJvZ3JhbShnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQ2xlYXJTdGF0ZVByb2dyYW0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODcKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyODkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkyLTI5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV91aW50KGE6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5NAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXBwUGFyYW1zLmFwcEdsb2JhbE51bVVpbnQoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwR2xvYmFsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5NQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcEdsb2JhbE51bVVpbnQoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEdsb2JhbE51bVVpbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk3CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2UoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9nbG9iYWxfbnVtX2J5dGVfc2xpY2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAxLTMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfZ2xvYmFsX251bV9ieXRlX3NsaWNlKGE6IEFwcGxpY2F0aW9uKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXBwUGFyYW1zLmFwcEdsb2JhbE51bUJ5dGVTbGljZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfcGFyYW1zX2dldCBBcHBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMDQKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBHbG9iYWxOdW1CeXRlU2xpY2UoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEdsb2JhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2xvY2FsX251bV91aW50KGE6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEwLTMxMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX3VpbnQoYTogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEyCiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwTG9jYWxOdW1VaW50KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcExvY2FsTnVtVWludAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcExvY2FsTnVtVWludChnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwTG9jYWxOdW1VaW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfbG9jYWxfbnVtX2J5dGVfc2xpY2UoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMTktMzIwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9sb2NhbF9udW1fYnl0ZV9zbGljZShhOiBBcHBsaWNhdGlvbik6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMjEKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFwcFBhcmFtcy5hcHBMb2NhbE51bUJ5dGVTbGljZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcExvY2FsTnVtQnl0ZVNsaWNlKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBMb2NhbE51bUJ5dGVTbGljZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMwogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMjQKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXBwUGFyYW1zQ29udHJhY3QudmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2V4dHJhX3Byb2dyYW1fcGFnZXMoYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9leHRyYV9wcm9ncmFtX3BhZ2VzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyOC0zMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2V4dHJhX3Byb2dyYW1fcGFnZXMoYTogQXBwbGljYXRpb24pOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5BcHBQYXJhbXMuYXBwRXh0cmFQcm9ncmFtUGFnZXMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBFeHRyYVByb2dyYW1QYWdlcyhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXBwX3BhcmFtc19nZXQgQXBwRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMzCiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFwcFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hcHBfcGFyYW1zX2dldF9jcmVhdG9yKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hcHBfcGFyYW1zX2dldF9jcmVhdG9yOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNy0zMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2FwcF9wYXJhbXNfZ2V0X2NyZWF0b3IoYTogQXBwbGljYXRpb24pOiBBZGRyZXNzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXBwUGFyYW1zLmFwcENyZWF0b3IoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0MAogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXBwUGFyYW1zLmFwcENyZWF0b3IoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQyCiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh2YWx1ZSkKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBcHBQYXJhbXNDb250cmFjdC52ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzcyhhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXBwX3BhcmFtc19nZXRfYWRkcmVzczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDYtMzQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hcHBfcGFyYW1zX2dldF9hZGRyZXNzKGE6IEFwcGxpY2F0aW9uKTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFwcFBhcmFtcy5hcHBBZGRyZXNzKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFwcFBhcmFtcy5hcHBBZGRyZXNzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzUwCiAgICAvLyBhc3NlcnQodmFsdWUuYnl0ZXMudG9TdHJpbmcoKSA9PT0gdmFsdWVfaW5kZXguYnl0ZXMudG9TdHJpbmcoKSwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM1MgogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiABASYBBBUffHUxG0EBJIIJBF57fVIE4p4w7gRYgZCZBMp3tZsEU8DdmwRfAAcDBNd70h8EqUGnRgS9Pp7sNhoAjgkAwACiAIsAdABdAEYALwAZAAOBAEMxGRREMRhENhoBF8AyiAGGKExQsCJDMRkURDEYRDYaARfAMogBWihMULAiQzEZFEQxGEQ2GgEXwDKIAS4WKExQsCJDMRkURDEYRDYaARfAMogBARYoTFCwIkMxGRREMRhENhoBF8AyiADUFihMULAiQzEZFEQxGEQ2GgEXwDKIAKcWKExQsCJDMRkURDEYRDYaARfAMogAehYoTFCwIkMxGRREMRhENhoBF8AyiABNSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBF8AyiAAZSRUWVwYCTFAoTFCwIkMxGUD/HTEYFEQiQ4oBAYv/cgAiwBoXcgBLA08CEkQSRImKAQGL/3IBIsAaF3IBSwNPAhJEEkSJigEBi/9yAiLAGhdyAksDTwISRBJEiYoBAYv/cgMiwBoXcgNLA08CEkQSRImKAQGL/3IEIsAaF3IESwNPAhJEEkSJigEBi/9yBSLAGhdyBUsDTwISRBJEiYoBAYv/cgYiwBoXcgZLA08CEkQSRImKAQGL/3IHIsAaF3IHSwNPAhJEEkSJigEBi/9yCCLAGhdyCEsDTwISRBJEiQ==", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAppParamsContract.clear.teal b/tests/artifacts/state-ops/data/StateAppParamsContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAppParamsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAssetHoldingContract.approval.teal b/tests/artifacts/state-ops/data/StateAssetHoldingContract.approval.teal deleted file mode 100644 index e426e9b..0000000 --- a/tests/artifacts/state-ops/data/StateAssetHoldingContract.approval.teal +++ /dev/null @@ -1,122 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 - // tests/artifacts/state-ops/contract.algo.ts:149 - // export class StateAssetHoldingContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@7 - pushbytess 0x68301476 0x784c64eb // method "verify_asset_holding_get(account,asset)uint64", method "verify_asset_frozen_get(account,asset)bool" - txna ApplicationArgs 0 - match main_verify_asset_holding_get_route@3 main_verify_asset_frozen_get_route@4 - -main_after_if_else@11: - // tests/artifacts/state-ops/contract.algo.ts:149 - // export class StateAssetHoldingContract extends arc4.Contract { - intc_1 // 0 - return - -main_verify_asset_frozen_get_route@4: - // tests/artifacts/state-ops/contract.algo.ts:156 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:149 - // export class StateAssetHoldingContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:156 - // @arc4.abimethod() - callsub verify_asset_frozen_get - pushbytes 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_holding_get_route@3: - // tests/artifacts/state-ops/contract.algo.ts:150 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:149 - // export class StateAssetHoldingContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Accounts - txna ApplicationArgs 2 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:150 - // @arc4.abimethod() - callsub verify_asset_holding_get - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@7: - // tests/artifacts/state-ops/contract.algo.ts:149 - // export class StateAssetHoldingContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@11 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetHoldingContract.verify_asset_holding_get(a: bytes, b: uint64) -> uint64: -verify_asset_holding_get: - // tests/artifacts/state-ops/contract.algo.ts:150-151 - // @arc4.abimethod() - // public verify_asset_holding_get(a: Account, b: Asset): uint64 { - proto 2 1 - // tests/artifacts/state-ops/contract.algo.ts:152 - // const [balance, _val] = op.AssetHolding.assetBalance(a, b) - frame_dig -2 - frame_dig -1 - asset_holding_get AssetBalance - pop - // tests/artifacts/state-ops/contract.algo.ts:153 - // return balance - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetHoldingContract.verify_asset_frozen_get(a: bytes, b: uint64) -> uint64: -verify_asset_frozen_get: - // tests/artifacts/state-ops/contract.algo.ts:156-157 - // @arc4.abimethod() - // public verify_asset_frozen_get(a: Account, b: Asset): boolean { - proto 2 1 - // tests/artifacts/state-ops/contract.algo.ts:158 - // const [frozen, _val] = op.AssetHolding.assetFrozen(a, b) - frame_dig -2 - frame_dig -1 - asset_holding_get AssetFrozen - pop - // tests/artifacts/state-ops/contract.algo.ts:159 - // return frozen - retsub diff --git a/tests/artifacts/state-ops/data/StateAssetHoldingContract.arc32.json b/tests/artifacts/state-ops/data/StateAssetHoldingContract.arc32.json deleted file mode 100644 index 19ef6d9..0000000 --- a/tests/artifacts/state-ops/data/StateAssetHoldingContract.arc32.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "hints": { - "verify_asset_holding_get(account,asset)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_frozen_get(account,asset)bool": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0SG9sZGluZ0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDY4MzAxNDc2IDB4Nzg0YzY0ZWIgLy8gbWV0aG9kICJ2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQoYWNjb3VudCxhc3NldCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0KGFjY291bnQsYXNzZXQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2Fzc2V0X2hvbGRpbmdfZ2V0X3JvdXRlQDMgbWFpbl92ZXJpZnlfYXNzZXRfZnJvemVuX2dldF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBc3NldEhvbGRpbmdDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfZnJvemVuX2dldF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hc3NldF9ob2xkaW5nX2dldF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hc3NldF9ob2xkaW5nX2dldAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0SG9sZGluZ0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldEhvbGRpbmdDb250cmFjdC52ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUwLTE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQoYTogQWNjb3VudCwgYjogQXNzZXQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUyCiAgICAvLyBjb25zdCBbYmFsYW5jZSwgX3ZhbF0gPSBvcC5Bc3NldEhvbGRpbmcuYXNzZXRCYWxhbmNlKGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHJldHVybiBiYWxhbmNlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QudmVyaWZ5X2Fzc2V0X2Zyb3plbl9nZXQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXNzZXRfZnJvemVuX2dldDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTYtMTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0KGE6IEFjY291bnQsIGI6IEFzc2V0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTgKICAgIC8vIGNvbnN0IFtmcm96ZW4sIF92YWxdID0gb3AuQXNzZXRIb2xkaW5nLmFzc2V0RnJvemVuKGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRGcm96ZW4KICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1OQogICAgLy8gcmV0dXJuIGZyb3plbgogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "StateAssetHoldingContract", - "methods": [ - { - "name": "verify_asset_holding_get", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "asset", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_asset_frozen_get", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "asset", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAssetHoldingContract.arc56.json b/tests/artifacts/state-ops/data/StateAssetHoldingContract.arc56.json deleted file mode 100644 index 125aff2..0000000 --- a/tests/artifacts/state-ops/data/StateAssetHoldingContract.arc56.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "name": "StateAssetHoldingContract", - "structs": {}, - "methods": [ - { - "name": "verify_asset_holding_get", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "asset", - "name": "b" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_frozen_get", - "args": [ - { - "type": "account", - "name": "a" - }, - { - "type": "asset", - "name": "b" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 43, - 78 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 112 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 46, - 81 - ], - "errorMessage": "can only call when not creating" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0SG9sZGluZ0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDY4MzAxNDc2IDB4Nzg0YzY0ZWIgLy8gbWV0aG9kICJ2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQoYWNjb3VudCxhc3NldCl1aW50NjQiLCBtZXRob2QgInZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0KGFjY291bnQsYXNzZXQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdmVyaWZ5X2Fzc2V0X2hvbGRpbmdfZ2V0X3JvdXRlQDMgbWFpbl92ZXJpZnlfYXNzZXRfZnJvemVuX2dldF9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBc3NldEhvbGRpbmdDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfZnJvemVuX2dldF9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hc3NldF9ob2xkaW5nX2dldF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hc3NldF9ob2xkaW5nX2dldAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0SG9sZGluZ0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldEhvbGRpbmdDb250cmFjdC52ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUwLTE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfaG9sZGluZ19nZXQoYTogQWNjb3VudCwgYjogQXNzZXQpOiB1aW50NjQgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUyCiAgICAvLyBjb25zdCBbYmFsYW5jZSwgX3ZhbF0gPSBvcC5Bc3NldEhvbGRpbmcuYXNzZXRCYWxhbmNlKGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBwb3AKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHJldHVybiBiYWxhbmNlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRIb2xkaW5nQ29udHJhY3QudmVyaWZ5X2Fzc2V0X2Zyb3plbl9nZXQoYTogYnl0ZXMsIGI6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXNzZXRfZnJvemVuX2dldDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTYtMTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9mcm96ZW5fZ2V0KGE6IEFjY291bnQsIGI6IEFzc2V0KTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTgKICAgIC8vIGNvbnN0IFtmcm96ZW4sIF92YWxdID0gb3AuQXNzZXRIb2xkaW5nLmFzc2V0RnJvemVuKGEsIGIpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRGcm96ZW4KICAgIHBvcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1OQogICAgLy8gcmV0dXJuIGZyb3plbgogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmAQQVH3x1MRtBAFeCAgRoMBR2BHhMZOs2GgCOAgAlAAIjQzEZFEQxGEQ2GgEXwBw2GgIXwDCIAECAAQAjTwJUKExQsCJDMRkURDEYRDYaARfAHDYaAhfAMIgAEhYoTFCwIkMxGUD/uTEYFEQiQ4oCAYv+i/9wAEiJigIBi/6L/3ABSIk=", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAssetHoldingContract.clear.teal b/tests/artifacts/state-ops/data/StateAssetHoldingContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAssetHoldingContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/artifacts/state-ops/data/StateAssetParamsContract.approval.teal b/tests/artifacts/state-ops/data/StateAssetParamsContract.approval.teal deleted file mode 100644 index 3b26283..0000000 --- a/tests/artifacts/state-ops/data/StateAssetParamsContract.approval.teal +++ /dev/null @@ -1,733 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: -main: - intcblock 1 0 - bytecblock 0x151f7c75 - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txn NumAppArgs - bz main_bare_routing@17 - pushbytess 0xad719a6f 0x1d603013 0x9fb731cd 0x0f5a4911 0xf5b370c6 0xc7d6af74 0x6b71a263 0x3040ebc8 0x1d07e844 0x3e40cb50 0x340c786b 0xe38a9815 // method "verify_asset_params_get_total(asset)uint64", method "verify_asset_params_get_decimals(asset)uint64", method "verify_asset_params_get_default_frozen(asset)bool", method "verify_asset_params_get_unit_name(asset)byte[]", method "verify_asset_params_get_name(asset)byte[]", method "verify_asset_params_get_url(asset)byte[]", method "verify_asset_params_get_metadata_hash(asset)byte[]", method "verify_asset_params_get_manager(asset)address", method "verify_asset_params_get_reserve(asset)address", method "verify_asset_params_get_freeze(asset)address", method "verify_asset_params_get_clawback(asset)address", method "verify_asset_params_get_creator(asset)address" - txna ApplicationArgs 0 - match main_verify_asset_params_get_total_route@3 main_verify_asset_params_get_decimals_route@4 main_verify_asset_params_get_default_frozen_route@5 main_verify_asset_params_get_unit_name_route@6 main_verify_asset_params_get_name_route@7 main_verify_asset_params_get_url_route@8 main_verify_asset_params_get_metadata_hash_route@9 main_verify_asset_params_get_manager_route@10 main_verify_asset_params_get_reserve_route@11 main_verify_asset_params_get_freeze_route@12 main_verify_asset_params_get_clawback_route@13 main_verify_asset_params_get_creator_route@14 - -main_after_if_else@21: - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - intc_1 // 0 - return - -main_verify_asset_params_get_creator_route@14: - // tests/artifacts/state-ops/contract.algo.ts:263 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:263 - // @arc4.abimethod() - callsub verify_asset_params_get_creator - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_clawback_route@13: - // tests/artifacts/state-ops/contract.algo.ts:254 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:254 - // @arc4.abimethod() - callsub verify_asset_params_get_clawback - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_freeze_route@12: - // tests/artifacts/state-ops/contract.algo.ts:245 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:245 - // @arc4.abimethod() - callsub verify_asset_params_get_freeze - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_reserve_route@11: - // tests/artifacts/state-ops/contract.algo.ts:236 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:236 - // @arc4.abimethod() - callsub verify_asset_params_get_reserve - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_manager_route@10: - // tests/artifacts/state-ops/contract.algo.ts:227 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:227 - // @arc4.abimethod() - callsub verify_asset_params_get_manager - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_metadata_hash_route@9: - // tests/artifacts/state-ops/contract.algo.ts:218 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:218 - // @arc4.abimethod() - callsub verify_asset_params_get_metadata_hash - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_url_route@8: - // tests/artifacts/state-ops/contract.algo.ts:209 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:209 - // @arc4.abimethod() - callsub verify_asset_params_get_url - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_name_route@7: - // tests/artifacts/state-ops/contract.algo.ts:200 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:200 - // @arc4.abimethod() - callsub verify_asset_params_get_name - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_unit_name_route@6: - // tests/artifacts/state-ops/contract.algo.ts:191 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:191 - // @arc4.abimethod() - callsub verify_asset_params_get_unit_name - dup - len - itob - extract 6 2 - swap - concat - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_default_frozen_route@5: - // tests/artifacts/state-ops/contract.algo.ts:182 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:182 - // @arc4.abimethod() - callsub verify_asset_params_get_default_frozen - pushbytes 0x00 - intc_1 // 0 - uncover 2 - setbit - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_decimals_route@4: - // tests/artifacts/state-ops/contract.algo.ts:173 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:173 - // @arc4.abimethod() - callsub verify_asset_params_get_decimals - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_verify_asset_params_get_total_route@3: - // tests/artifacts/state-ops/contract.algo.ts:164 - // @arc4.abimethod() - txn OnCompletion - ! - assert // OnCompletion is not NoOp - txn ApplicationID - assert // can only call when not creating - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txna ApplicationArgs 1 - btoi - txnas Assets - // tests/artifacts/state-ops/contract.algo.ts:164 - // @arc4.abimethod() - callsub verify_asset_params_get_total - itob - bytec_0 // 0x151f7c75 - swap - concat - log - intc_0 // 1 - return - -main_bare_routing@17: - // tests/artifacts/state-ops/contract.algo.ts:163 - // export class StateAssetParamsContract extends arc4.Contract { - txn OnCompletion - bnz main_after_if_else@21 - txn ApplicationID - ! - assert // can only call when creating - intc_0 // 1 - return - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_total(a: uint64) -> uint64: -verify_asset_params_get_total: - // tests/artifacts/state-ops/contract.algo.ts:164-165 - // @arc4.abimethod() - // public verify_asset_params_get_total(a: Asset): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:166 - // const [value, exists] = op.AssetParams.assetTotal(a) - frame_dig -1 - asset_params_get AssetTotal - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:167 - // const [value_index, exists_index] = op.AssetParams.assetTotal(get_1st_ref_index()) - asset_params_get AssetTotal - // tests/artifacts/state-ops/contract.algo.ts:168 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:169 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:170 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_decimals(a: uint64) -> uint64: -verify_asset_params_get_decimals: - // tests/artifacts/state-ops/contract.algo.ts:173-174 - // @arc4.abimethod() - // public verify_asset_params_get_decimals(a: Asset): uint64 { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:175 - // const [value, exists] = op.AssetParams.assetDecimals(a) - frame_dig -1 - asset_params_get AssetDecimals - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:176 - // const [value_index, exists_index] = op.AssetParams.assetDecimals(get_1st_ref_index()) - asset_params_get AssetDecimals - // tests/artifacts/state-ops/contract.algo.ts:177 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:178 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:179 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_default_frozen(a: uint64) -> uint64: -verify_asset_params_get_default_frozen: - // tests/artifacts/state-ops/contract.algo.ts:182-183 - // @arc4.abimethod() - // public verify_asset_params_get_default_frozen(a: Asset): boolean { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:184 - // const [value, exists] = op.AssetParams.assetDefaultFrozen(a) - frame_dig -1 - asset_params_get AssetDefaultFrozen - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:185 - // const [value_index, exists_index] = op.AssetParams.assetDefaultFrozen(get_1st_ref_index()) - asset_params_get AssetDefaultFrozen - // tests/artifacts/state-ops/contract.algo.ts:186 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:187 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:188 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_unit_name(a: uint64) -> bytes: -verify_asset_params_get_unit_name: - // tests/artifacts/state-ops/contract.algo.ts:191-192 - // @arc4.abimethod() - // public verify_asset_params_get_unit_name(a: Asset): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:193 - // const [value, exists] = op.AssetParams.assetUnitName(a) - frame_dig -1 - asset_params_get AssetUnitName - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:194 - // const [value_index, exists_index] = op.AssetParams.assetUnitName(get_1st_ref_index()) - asset_params_get AssetUnitName - // tests/artifacts/state-ops/contract.algo.ts:195 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:196 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:197 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_name(a: uint64) -> bytes: -verify_asset_params_get_name: - // tests/artifacts/state-ops/contract.algo.ts:200-201 - // @arc4.abimethod() - // public verify_asset_params_get_name(a: Asset): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:202 - // const [value, exists] = op.AssetParams.assetName(a) - frame_dig -1 - asset_params_get AssetName - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:203 - // const [value_index, exists_index] = op.AssetParams.assetName(get_1st_ref_index()) - asset_params_get AssetName - // tests/artifacts/state-ops/contract.algo.ts:204 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:205 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:206 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_url(a: uint64) -> bytes: -verify_asset_params_get_url: - // tests/artifacts/state-ops/contract.algo.ts:209-210 - // @arc4.abimethod() - // public verify_asset_params_get_url(a: Asset): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:211 - // const [value, exists] = op.AssetParams.assetUrl(a) - frame_dig -1 - asset_params_get AssetURL - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:212 - // const [value_index, exists_index] = op.AssetParams.assetUrl(get_1st_ref_index()) - asset_params_get AssetURL - // tests/artifacts/state-ops/contract.algo.ts:213 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:214 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:215 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_metadata_hash(a: uint64) -> bytes: -verify_asset_params_get_metadata_hash: - // tests/artifacts/state-ops/contract.algo.ts:218-219 - // @arc4.abimethod() - // public verify_asset_params_get_metadata_hash(a: Asset): bytes { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:220 - // const [value, exists] = op.AssetParams.assetMetadataHash(a) - frame_dig -1 - asset_params_get AssetMetadataHash - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:221 - // const [value_index, exists_index] = op.AssetParams.assetMetadataHash(get_1st_ref_index()) - asset_params_get AssetMetadataHash - // tests/artifacts/state-ops/contract.algo.ts:222 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:223 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:224 - // return value - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_manager(a: uint64) -> bytes: -verify_asset_params_get_manager: - // tests/artifacts/state-ops/contract.algo.ts:227-228 - // @arc4.abimethod() - // public verify_asset_params_get_manager(a: Asset): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:229 - // const [value, exists] = op.AssetParams.assetManager(a) - frame_dig -1 - asset_params_get AssetManager - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:230 - // const [value_index, exists_index] = op.AssetParams.assetManager(get_1st_ref_index()) - asset_params_get AssetManager - // tests/artifacts/state-ops/contract.algo.ts:231 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:232 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:233 - // return new Address(value) - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_reserve(a: uint64) -> bytes: -verify_asset_params_get_reserve: - // tests/artifacts/state-ops/contract.algo.ts:236-237 - // @arc4.abimethod() - // public verify_asset_params_get_reserve(a: Asset): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:238 - // const [value, exists] = op.AssetParams.assetReserve(a) - frame_dig -1 - asset_params_get AssetReserve - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:239 - // const [value_index, exists_index] = op.AssetParams.assetReserve(get_1st_ref_index()) - asset_params_get AssetReserve - // tests/artifacts/state-ops/contract.algo.ts:240 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:241 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:242 - // return new Address(value) - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_freeze(a: uint64) -> bytes: -verify_asset_params_get_freeze: - // tests/artifacts/state-ops/contract.algo.ts:245-246 - // @arc4.abimethod() - // public verify_asset_params_get_freeze(a: Asset): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:247 - // const [value, exists] = op.AssetParams.assetFreeze(a) - frame_dig -1 - asset_params_get AssetFreeze - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:248 - // const [value_index, exists_index] = op.AssetParams.assetFreeze(get_1st_ref_index()) - asset_params_get AssetFreeze - // tests/artifacts/state-ops/contract.algo.ts:249 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:250 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:251 - // return new Address(value) - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_clawback(a: uint64) -> bytes: -verify_asset_params_get_clawback: - // tests/artifacts/state-ops/contract.algo.ts:254-255 - // @arc4.abimethod() - // public verify_asset_params_get_clawback(a: Asset): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:256 - // const [value, exists] = op.AssetParams.assetClawback(a) - frame_dig -1 - asset_params_get AssetClawback - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:257 - // const [value_index, exists_index] = op.AssetParams.assetClawback(get_1st_ref_index()) - asset_params_get AssetClawback - // tests/artifacts/state-ops/contract.algo.ts:258 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:259 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:260 - // return new Address(value) - retsub - - -// tests/artifacts/state-ops/contract.algo.ts::StateAssetParamsContract.verify_asset_params_get_creator(a: uint64) -> bytes: -verify_asset_params_get_creator: - // tests/artifacts/state-ops/contract.algo.ts:263-264 - // @arc4.abimethod() - // public verify_asset_params_get_creator(a: Asset): Address { - proto 1 1 - // tests/artifacts/state-ops/contract.algo.ts:265 - // const [value, exists] = op.AssetParams.assetCreator(a) - frame_dig -1 - asset_params_get AssetCreator - // tests/artifacts/state-ops/contract.algo.ts:20 - // return op.btoi(Txn.applicationArgs(1)) - intc_0 // 1 - txnas ApplicationArgs - btoi - // tests/artifacts/state-ops/contract.algo.ts:266 - // const [value_index, exists_index] = op.AssetParams.assetCreator(get_1st_ref_index()) - asset_params_get AssetCreator - // tests/artifacts/state-ops/contract.algo.ts:267 - // assert(value === value_index, 'expected value by index to match') - dig 3 - uncover 2 - == - assert // expected value by index to match - // tests/artifacts/state-ops/contract.algo.ts:268 - // assert(exists === exists_index, 'expected exists by index to match') - == - assert // expected exists by index to match - // tests/artifacts/state-ops/contract.algo.ts:269 - // return new Address(value) - retsub diff --git a/tests/artifacts/state-ops/data/StateAssetParamsContract.arc32.json b/tests/artifacts/state-ops/data/StateAssetParamsContract.arc32.json deleted file mode 100644 index 1f9cae3..0000000 --- a/tests/artifacts/state-ops/data/StateAssetParamsContract.arc32.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "hints": { - "verify_asset_params_get_total(asset)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_decimals(asset)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_default_frozen(asset)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_unit_name(asset)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_name(asset)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_url(asset)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_metadata_hash(asset)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_manager(asset)address": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_reserve(asset)address": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_freeze(asset)address": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_clawback(asset)address": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_asset_params_get_creator(asset)address": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNwogICAgcHVzaGJ5dGVzcyAweGFkNzE5YTZmIDB4MWQ2MDMwMTMgMHg5ZmI3MzFjZCAweDBmNWE0OTExIDB4ZjViMzcwYzYgMHhjN2Q2YWY3NCAweDZiNzFhMjYzIDB4MzA0MGViYzggMHgxZDA3ZTg0NCAweDNlNDBjYjUwIDB4MzQwYzc4NmIgMHhlMzhhOTgxNSAvLyBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKGFzc2V0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHMoYXNzZXQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbihhc3NldClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWUoYXNzZXQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lKGFzc2V0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdXJsKGFzc2V0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaChhc3NldClieXRlW10iLCBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21hbmFnZXIoYXNzZXQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZShhc3NldClhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemUoYXNzZXQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2soYXNzZXQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcihhc3NldClhZGRyZXNzIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbF9yb3V0ZUAzIG1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHNfcm91dGVANCBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2RlZmF1bHRfZnJvemVuX3JvdXRlQDUgbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWVfcm91dGVANiBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X25hbWVfcm91dGVANyBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VybF9yb3V0ZUA4IG1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaF9yb3V0ZUA5IG1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWFuYWdlcl9yb3V0ZUAxMCBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3Jlc2VydmVfcm91dGVAMTEgbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemVfcm91dGVAMTIgbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFja19yb3V0ZUAxMyBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2NyZWF0b3Jfcm91dGVAMTQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcl9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFja19yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2sKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZnJlZXplX3JvdXRlQDEyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9tYW5hZ2VyX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9tYW5hZ2VyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2hfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdXJsX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYzCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VybAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdW5pdF9uYW1lCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbl9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbgogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFsc19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFscwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYzCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKGE6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjQtMTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKGE6IEFzc2V0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRUb3RhbChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VG90YWwoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFscyhhOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTczLTE3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFscyhhOiBBc3NldCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0RGVjaW1hbHMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldERlY2ltYWxzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVmYXVsdF9mcm96ZW4oYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2RlZmF1bHRfZnJvemVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4Mi0xODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVmYXVsdF9mcm96ZW4oYTogQXNzZXQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXREZWZhdWx0RnJvemVuKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg1CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldERlZmF1bHRGcm96ZW4oZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VuaXRfbmFtZShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkxLTE5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWUoYTogQXNzZXQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VW5pdE5hbWUoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldFVuaXROYW1lKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMC0yMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZShhOiBBc3NldCk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXROYW1lKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAzCiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldE5hbWUoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA0CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VybChhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmw6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA5LTIxMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmwoYTogQXNzZXQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VXJsKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRVUkwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VXJsKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2goYTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgtMjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2goYTogQXNzZXQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0TWV0YWRhdGFIYXNoKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNZXRhZGF0YUhhc2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjEKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0TWV0YWRhdGFIYXNoKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TWV0YWRhdGFIYXNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21hbmFnZXIoYTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWFuYWdlcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjctMjI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21hbmFnZXIoYTogQXNzZXQpOiBBZGRyZXNzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyOQogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRNYW5hZ2VyKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMwCiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldE1hbmFnZXIoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyByZXR1cm4gbmV3IEFkZHJlc3ModmFsdWUpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3Jlc2VydmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM2LTIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlKGE6IEFzc2V0KTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzgKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0UmVzZXJ2ZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRSZXNlcnZlKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDEKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZnJlZXplKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2ZyZWV6ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUtMjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2ZyZWV6ZShhOiBBc3NldCk6IEFkZHJlc3MgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5Bc3NldFBhcmFtcy5hc3NldEZyZWV6ZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ4CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldEZyZWV6ZShnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2soYTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2s6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU0LTI1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFjayhhOiBBc3NldCk6IEFkZHJlc3MgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5Bc3NldFBhcmFtcy5hc3NldENsYXdiYWNrKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDbGF3YmFjawogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1NwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRDbGF3YmFjayhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1OQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyByZXR1cm4gbmV3IEFkZHJlc3ModmFsdWUpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2NyZWF0b3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjYzLTI2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yKGE6IEFzc2V0KTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjUKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0Q3JlYXRvcihhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRDcmVhdG9yKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OQogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "StateAssetParamsContract", - "methods": [ - { - "name": "verify_asset_params_get_total", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_asset_params_get_decimals", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint64" - } - }, - { - "name": "verify_asset_params_get_default_frozen", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_asset_params_get_unit_name", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_asset_params_get_name", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_asset_params_get_url", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_asset_params_get_metadata_hash", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_asset_params_get_manager", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "verify_asset_params_get_reserve", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "verify_asset_params_get_freeze", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "verify_asset_params_get_clawback", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - }, - { - "name": "verify_asset_params_get_creator", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "address" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE" - } -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAssetParamsContract.arc56.json b/tests/artifacts/state-ops/data/StateAssetParamsContract.arc56.json deleted file mode 100644 index ac21ee1..0000000 --- a/tests/artifacts/state-ops/data/StateAssetParamsContract.arc56.json +++ /dev/null @@ -1,394 +0,0 @@ -{ - "name": "StateAssetParamsContract", - "structs": {}, - "methods": [ - { - "name": "verify_asset_params_get_total", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_decimals", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "uint64" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_default_frozen", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "bool" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_unit_name", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_name", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_url", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_metadata_hash", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "byte[]" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_manager", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_reserve", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_freeze", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_clawback", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - }, - { - "name": "verify_asset_params_get_creator", - "args": [ - { - "type": "asset", - "name": "a" - } - ], - "returns": { - "type": "address" - }, - "actions": { - "create": [], - "call": [ - "NoOp" - ] - }, - "readonly": false, - "events": [], - "recommendations": {} - } - ], - "arcs": [ - 22, - 28 - ], - "networks": {}, - "state": { - "schema": { - "global": { - "ints": 0, - "bytes": 0 - }, - "local": { - "ints": 0, - "bytes": 0 - } - }, - "keys": { - "global": {}, - "local": {}, - "box": {} - }, - "maps": { - "global": {}, - "local": {}, - "box": {} - } - }, - "bareActions": { - "create": [ - "NoOp" - ], - "call": [] - }, - "sourceInfo": { - "approval": { - "sourceInfo": [ - { - "pc": [ - 113, - 135, - 157, - 179, - 201, - 223, - 253, - 283, - 313, - 343, - 372, - 395 - ], - "errorMessage": "OnCompletion is not NoOp" - }, - { - "pc": [ - 423 - ], - "errorMessage": "can only call when creating" - }, - { - "pc": [ - 116, - 138, - 160, - 182, - 204, - 226, - 256, - 286, - 316, - 346, - 375, - 398 - ], - "errorMessage": "can only call when not creating" - }, - { - "pc": [ - 446, - 468, - 490, - 512, - 534, - 556, - 578, - 600, - 622, - 644, - 666, - 688 - ], - "errorMessage": "expected exists by index to match" - }, - { - "pc": [ - 444, - 466, - 488, - 510, - 532, - 554, - 576, - 598, - 620, - 642, - 664, - 686 - ], - "errorMessage": "expected value by index to match" - } - ], - "pcOffsetMethod": "none" - }, - "clear": { - "sourceInfo": [], - "pcOffsetMethod": "none" - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNwogICAgcHVzaGJ5dGVzcyAweGFkNzE5YTZmIDB4MWQ2MDMwMTMgMHg5ZmI3MzFjZCAweDBmNWE0OTExIDB4ZjViMzcwYzYgMHhjN2Q2YWY3NCAweDZiNzFhMjYzIDB4MzA0MGViYzggMHgxZDA3ZTg0NCAweDNlNDBjYjUwIDB4MzQwYzc4NmIgMHhlMzhhOTgxNSAvLyBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKGFzc2V0KXVpbnQ2NCIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHMoYXNzZXQpdWludDY0IiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbihhc3NldClib29sIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWUoYXNzZXQpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lKGFzc2V0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdXJsKGFzc2V0KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaChhc3NldClieXRlW10iLCBtZXRob2QgInZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21hbmFnZXIoYXNzZXQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZShhc3NldClhZGRyZXNzIiwgbWV0aG9kICJ2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemUoYXNzZXQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2soYXNzZXQpYWRkcmVzcyIsIG1ldGhvZCAidmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcihhc3NldClhZGRyZXNzIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbF9yb3V0ZUAzIG1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHNfcm91dGVANCBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2RlZmF1bHRfZnJvemVuX3JvdXRlQDUgbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWVfcm91dGVANiBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X25hbWVfcm91dGVANyBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VybF9yb3V0ZUA4IG1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaF9yb3V0ZUA5IG1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWFuYWdlcl9yb3V0ZUAxMCBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3Jlc2VydmVfcm91dGVAMTEgbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemVfcm91dGVAMTIgbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFja19yb3V0ZUAxMyBtYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2NyZWF0b3Jfcm91dGVAMTQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcl9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY3JlYXRvcgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFja19yb3V0ZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2sKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZnJlZXplX3JvdXRlQDEyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9mcmVlemUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfcmVzZXJ2ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9tYW5hZ2VyX3JvdXRlQDEwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9tYW5hZ2VyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2hfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdXJsX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYzCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VybAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWVfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGV4cG9ydCBjbGFzcyBTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QgZXh0ZW5kcyBhcmM0LkNvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfdW5pdF9uYW1lCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbl9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWZhdWx0X2Zyb3plbgogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFsc19yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFscwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbF9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gZXhwb3J0IGNsYXNzIFN0YXRlQXNzZXRQYXJhbXNDb250cmFjdCBleHRlbmRzIGFyYzQuQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYzCiAgICAvLyBleHBvcnQgY2xhc3MgU3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0IGV4dGVuZHMgYXJjNC5Db250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKGE6IHVpbnQ2NCkgLT4gdWludDY0Ogp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF90b3RhbDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjQtMTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3RvdGFsKGE6IEFzc2V0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRUb3RhbChhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VG90YWwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjcKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VG90YWwoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gcmV0dXJuIHZhbHVlCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFscyhhOiB1aW50NjQpIC0+IHVpbnQ2NDoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVjaW1hbHM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTczLTE3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9kZWNpbWFscyhhOiBBc3NldCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzUKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0RGVjaW1hbHMoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldERlY2ltYWxzKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVmYXVsdF9mcm96ZW4oYTogdWludDY0KSAtPiB1aW50NjQ6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2RlZmF1bHRfZnJvemVuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4Mi0xODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZGVmYXVsdF9mcm96ZW4oYTogQXNzZXQpOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXREZWZhdWx0RnJvemVuKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg1CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldERlZmF1bHRGcm96ZW4oZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWZhdWx0RnJvemVuCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VuaXRfbmFtZShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkxLTE5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91bml0X25hbWUoYTogQXNzZXQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTMKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VW5pdE5hbWUoYSkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldFVuaXROYW1lKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIGFzc2VydCh2YWx1ZSA9PT0gdmFsdWVfaW5kZXgsICdleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaCcpCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk2CiAgICAvLyBhc3NlcnQoZXhpc3RzID09PSBleGlzdHNfaW5kZXgsICdleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBleGlzdHMgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZShhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9uYW1lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMC0yMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbmFtZShhOiBBc3NldCk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXROYW1lKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAzCiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldE5hbWUoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA0CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA2CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3VybChhOiB1aW50NjQpIC0+IGJ5dGVzOgp2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmw6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA5LTIxMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF91cmwoYTogQXNzZXQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VXJsKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRVUkwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0VXJsKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2goYTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWV0YWRhdGFfaGFzaDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgtMjE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21ldGFkYXRhX2hhc2goYTogQXNzZXQpOiBieXRlcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0TWV0YWRhdGFIYXNoKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNZXRhZGF0YUhhc2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gcmV0dXJuIG9wLmJ0b2koVHhuLmFwcGxpY2F0aW9uQXJncygxKSkKICAgIGludGNfMCAvLyAxCiAgICB0eG5hcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjEKICAgIC8vIGNvbnN0IFt2YWx1ZV9pbmRleCwgZXhpc3RzX2luZGV4XSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0TWV0YWRhdGFIYXNoKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TWV0YWRhdGFIYXNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czo6U3RhdGVBc3NldFBhcmFtc0NvbnRyYWN0LnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21hbmFnZXIoYTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfbWFuYWdlcjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjctMjI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X21hbmFnZXIoYTogQXNzZXQpOiBBZGRyZXNzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyOQogICAgLy8gY29uc3QgW3ZhbHVlLCBleGlzdHNdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRNYW5hZ2VyKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMwCiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldE1hbmFnZXIoZ2V0XzFzdF9yZWZfaW5kZXgoKSkKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyByZXR1cm4gbmV3IEFkZHJlc3ModmFsdWUpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X3Jlc2VydmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM2LTIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9yZXNlcnZlKGE6IEFzc2V0KTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzgKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0UmVzZXJ2ZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRSZXNlcnZlKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDEKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfZnJlZXplKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2ZyZWV6ZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUtMjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2ZyZWV6ZShhOiBBc3NldCk6IEFkZHJlc3MgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ3CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5Bc3NldFBhcmFtcy5hc3NldEZyZWV6ZShhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBvcC5idG9pKFR4bi5hcHBsaWNhdGlvbkFyZ3MoMSkpCiAgICBpbnRjXzAgLy8gMQogICAgdHhuYXMgQXBwbGljYXRpb25BcmdzCiAgICBidG9pCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ4CiAgICAvLyBjb25zdCBbdmFsdWVfaW5kZXgsIGV4aXN0c19pbmRleF0gPSBvcC5Bc3NldFBhcmFtcy5hc3NldEZyZWV6ZShnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTAKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpTdGF0ZUFzc2V0UGFyYW1zQ29udHJhY3QudmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2soYTogdWludDY0KSAtPiBieXRlczoKdmVyaWZ5X2Fzc2V0X3BhcmFtc19nZXRfY2xhd2JhY2s6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU0LTI1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jbGF3YmFjayhhOiBBc3NldCk6IEFkZHJlc3MgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBjb25zdCBbdmFsdWUsIGV4aXN0c10gPSBvcC5Bc3NldFBhcmFtcy5hc3NldENsYXdiYWNrKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDbGF3YmFjawogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1NwogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRDbGF3YmFjayhnZXRfMXN0X3JlZl9pbmRleCgpKQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBhc3NlcnQodmFsdWUgPT09IHZhbHVlX2luZGV4LCAnZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gnKQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCB2YWx1ZSBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1OQogICAgLy8gYXNzZXJ0KGV4aXN0cyA9PT0gZXhpc3RzX2luZGV4LCAnZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZXhpc3RzIGJ5IGluZGV4IHRvIG1hdGNoCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyByZXR1cm4gbmV3IEFkZHJlc3ModmFsdWUpCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OlN0YXRlQXNzZXRQYXJhbXNDb250cmFjdC52ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yKGE6IHVpbnQ2NCkgLT4gYnl0ZXM6CnZlcmlmeV9hc3NldF9wYXJhbXNfZ2V0X2NyZWF0b3I6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvc3RhdGUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjYzLTI2NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYXNzZXRfcGFyYW1zX2dldF9jcmVhdG9yKGE6IEFzc2V0KTogQWRkcmVzcyB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjUKICAgIC8vIGNvbnN0IFt2YWx1ZSwgZXhpc3RzXSA9IG9wLkFzc2V0UGFyYW1zLmFzc2V0Q3JlYXRvcihhKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShUeG4uYXBwbGljYXRpb25BcmdzKDEpKQogICAgaW50Y18wIC8vIDEKICAgIHR4bmFzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgW3ZhbHVlX2luZGV4LCBleGlzdHNfaW5kZXhdID0gb3AuQXNzZXRQYXJhbXMuYXNzZXRDcmVhdG9yKGdldF8xc3RfcmVmX2luZGV4KCkpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gYXNzZXJ0KHZhbHVlID09PSB2YWx1ZV9pbmRleCwgJ2V4cGVjdGVkIHZhbHVlIGJ5IGluZGV4IHRvIG1hdGNoJykKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgdmFsdWUgYnkgaW5kZXggdG8gbWF0Y2gKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9zdGF0ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIGFzc2VydChleGlzdHMgPT09IGV4aXN0c19pbmRleCwgJ2V4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaCcpCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGV4aXN0cyBieSBpbmRleCB0byBtYXRjaAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL3N0YXRlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OQogICAgLy8gcmV0dXJuIG5ldyBBZGRyZXNzKHZhbHVlKQogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" - }, - "byteCode": { - "approval": "CiACAQAmAQQVH3x1MRtBAY6CDAStcZpvBB1gMBMEn7cxzQQPWkkRBPWzcMYEx9avdARrcaJjBDBA68gEHQfoRAQ+QMtQBDQMeGsE44qYFTYaAI4MARwBBQDoAMoArACOAHAAWgBEAC4AGAACI0MxGRREMRhENhoBF8AwiAIeKExQsCJDMRkURDEYRDYaARfAMIgB8ihMULAiQzEZFEQxGEQ2GgEXwDCIAcYoTFCwIkMxGRREMRhENhoBF8AwiAGaKExQsCJDMRkURDEYRDYaARfAMIgBbihMULAiQzEZFEQxGEQ2GgEXwDCIAUJJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXwDCIAQ5JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXwDCIANpJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXwDCIAKZJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgEXwDCIAHKAAQAjTwJUKExQsCJDMRkURDEYRDYaARfAMIgAPxYoTFCwIkMxGRREMRhENhoBF8AwiAASFihMULAiQzEZQP7IMRgURCJDigEBi/9xACLAGhdxAEsDTwISRBJEiYoBAYv/cQEiwBoXcQFLA08CEkQSRImKAQGL/3ECIsAaF3ECSwNPAhJEEkSJigEBi/9xAyLAGhdxA0sDTwISRBJEiYoBAYv/cQQiwBoXcQRLA08CEkQSRImKAQGL/3EFIsAaF3EFSwNPAhJEEkSJigEBi/9xBiLAGhdxBksDTwISRBJEiYoBAYv/cQciwBoXcQdLA08CEkQSRImKAQGL/3EIIsAaF3EISwNPAhJEEkSJigEBi/9xCSLAGhdxCUsDTwISRBJEiYoBAYv/cQoiwBoXcQpLA08CEkQSRImKAQGL/3ELIsAaF3ELSwNPAhJEEkSJ", - "clear": "CoEBQw==" - }, - "compilerInfo": { - "compiler": "puya", - "compilerVersion": { - "major": 4, - "minor": 2, - "patch": 1 - } - }, - "events": [], - "templateVariables": {} -} \ No newline at end of file diff --git a/tests/artifacts/state-ops/data/StateAssetParamsContract.clear.teal b/tests/artifacts/state-ops/data/StateAssetParamsContract.clear.teal deleted file mode 100644 index a4d5804..0000000 --- a/tests/artifacts/state-ops/data/StateAssetParamsContract.clear.teal +++ /dev/null @@ -1,7 +0,0 @@ -#pragma version 10 -#pragma typetrack false - -// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: -main: - pushint 1 // 1 - return diff --git a/tests/crypto-op-codes.spec.ts b/tests/crypto-op-codes.spec.ts index a07bc1b..45ac3e7 100644 --- a/tests/crypto-op-codes.spec.ts +++ b/tests/crypto-op-codes.spec.ts @@ -33,7 +33,7 @@ vi.mock('../src/impl/crypto', async (importOriginal) => { }) describe('crypto op codes', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/crypto-ops/data', { CryptoOpsContract: {} }) + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/crypto-ops/contract.algo.ts', { CryptoOpsContract: {} }) const ctx = new TestExecutionContext() beforeAll(async () => { diff --git a/tests/global-state-arc4-values.spec.ts b/tests/global-state-arc4-values.spec.ts index 5d6bb70..74fd9d9 100644 --- a/tests/global-state-arc4-values.spec.ts +++ b/tests/global-state-arc4-values.spec.ts @@ -18,7 +18,7 @@ import { getAvmResult } from './avm-invoker' import { createArc4TestFixture } from './test-fixture' describe('ARC4 AppGlobal values', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/state-ops/data/GlobalStateContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/state-ops/contract.algo.ts', { GlobalStateContract: {}, }) const ctx = new TestExecutionContext() diff --git a/tests/local-state-arc4-values.spec.ts b/tests/local-state-arc4-values.spec.ts index 6ada9fa..02a2331 100644 --- a/tests/local-state-arc4-values.spec.ts +++ b/tests/local-state-arc4-values.spec.ts @@ -19,7 +19,7 @@ import { getAvmResult } from './avm-invoker' import { createArc4TestFixture } from './test-fixture' describe('ARC4 AppLocal values', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/state-ops/data/LocalStateContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/state-ops/contract.algo.ts', { LocalStateContract: {}, }) const ctx = new TestExecutionContext() diff --git a/tests/log.spec.ts b/tests/log.spec.ts index 069628e..7284313 100644 --- a/tests/log.spec.ts +++ b/tests/log.spec.ts @@ -22,7 +22,7 @@ import { getAvmResultLog } from './avm-invoker' import { createArc4TestFixture } from './test-fixture' describe('log', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/contract.algo.ts', { PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) const ctx = new TestExecutionContext() diff --git a/tests/multi-inheritance.spec.ts b/tests/multi-inheritance.spec.ts index fcead98..186d485 100644 --- a/tests/multi-inheritance.spec.ts +++ b/tests/multi-inheritance.spec.ts @@ -6,7 +6,7 @@ import { getAvmResult } from './avm-invoker' import { createArc4TestFixture } from './test-fixture' describe('multi-inheritance', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/multi-inheritance/data/MultiBases.arc56.json', { MultiBases: {} }) + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/multi-inheritance/contract.algo.ts', { MultiBases: {} }) const ctx = new TestExecutionContext() beforeAll(async () => { diff --git a/tests/primitives/biguint.spec.ts b/tests/primitives/biguint.spec.ts index a2195f2..c0e5129 100644 --- a/tests/primitives/biguint.spec.ts +++ b/tests/primitives/biguint.spec.ts @@ -9,7 +9,7 @@ import { getAvmResult, getAvmResultRaw } from '../avm-invoker' import { createArc4TestFixture } from '../test-fixture' describe('BigUint', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/contract.algo.ts', { PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) beforeAll(async () => { diff --git a/tests/primitives/bytes.spec.ts b/tests/primitives/bytes.spec.ts index ed888dc..f43ad4f 100644 --- a/tests/primitives/bytes.spec.ts +++ b/tests/primitives/bytes.spec.ts @@ -9,7 +9,7 @@ import { createArc4TestFixture } from '../test-fixture' import { getSha256Hash, padUint8Array } from '../util' describe('Bytes', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/contract.algo.ts', { PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) diff --git a/tests/primitives/uint64.spec.ts b/tests/primitives/uint64.spec.ts index 1bac0c6..5287314 100644 --- a/tests/primitives/uint64.spec.ts +++ b/tests/primitives/uint64.spec.ts @@ -7,7 +7,7 @@ import { getAvmResult } from '../avm-invoker' import { createArc4TestFixture } from '../test-fixture' describe('Unit64', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/data/PrimitiveOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/primitive-ops/contract.algo.ts', { PrimitiveOpsContract: { deployParams: { createParams: { extraProgramPages: undefined } } }, }) diff --git a/tests/pure-op-codes.spec.ts b/tests/pure-op-codes.spec.ts index 0b23c11..a4b4707 100644 --- a/tests/pure-op-codes.spec.ts +++ b/tests/pure-op-codes.spec.ts @@ -20,7 +20,7 @@ const extractOutOfBoundError = /extraction (start|end) \d+ is beyond length/ const sqrtMaxUint64 = 4294967295n describe('Pure op codes', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/miscellaneous-ops/data/MiscellaneousOpsContract.arc56.json', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/miscellaneous-ops/contract.algo.ts', { MiscellaneousOpsContract: {}, }) const ctx = new TestExecutionContext() diff --git a/tests/state-op-codes.spec.ts b/tests/state-op-codes.spec.ts index e019c90..f61b95d 100644 --- a/tests/state-op-codes.spec.ts +++ b/tests/state-op-codes.spec.ts @@ -31,7 +31,7 @@ import { generateTestAsset, getAvmResult, INITIAL_BALANCE_MICRO_ALGOS } from './ import { createArc4TestFixture } from './test-fixture' describe('State op codes', async () => { - const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/state-ops/data', { + const [test, localnetFixture] = createArc4TestFixture('tests/artifacts/state-ops/contract.algo.ts', { ItxnDemoContract: {}, ITxnOpsContract: {}, StateAcctParamsGetContract: {}, diff --git a/tests/test-fixture.ts b/tests/test-fixture.ts index 5621000..35c3d72 100644 --- a/tests/test-fixture.ts +++ b/tests/test-fixture.ts @@ -8,15 +8,14 @@ import type { AppFactory, AppFactoryDeployParams } from '@algorandfoundation/alg import type { AssetCreateParams } from '@algorandfoundation/algokit-utils/types/composer' import { nullLogger } from '@algorandfoundation/algokit-utils/types/logging' import type { AlgorandFixture } from '@algorandfoundation/algokit-utils/types/testing' -import { encodingUtil } from '@algorandfoundation/puya-ts' +import { compile, LoggingContext } from '@algorandfoundation/puya-ts' import type { Use } from '@vitest/runner/types' import { OnApplicationComplete } from 'algosdk' import fs from 'fs' -import path from 'path' import type { ExpectStatic } from 'vitest' import { test } from 'vitest' import type { DeliberateAny } from '../src/typescript-helpers' -import { invariant } from './util' +import { generateTempDir, invariant } from './util' const algorandTestFixture = (localnetFixture: AlgorandFixture) => test.extend<{ @@ -42,15 +41,6 @@ const algorandTestFixture = (localnetFixture: AlgorandFixture) => }, }) -function createLazyLoader(path: string) { - let result: Arc56Contract[] | undefined = undefined - return { - getResult() { - if (!result) result = loadFromPath(path) - return result - }, - } -} type AlgoClientAppCallParams = Parameters[0] type ProgramInvokeOptions = { @@ -86,7 +76,7 @@ type BaseFixtureContextFor = { [key in T as `${key}Invoker`]: ProgramInvoker } export function createBaseTestFixture(path: string, contracts: TContracts[]) { - const lazyLoad = createLazyLoader(path) + const lazyCompile = createLazyCompiler(path, { outputArc56: false, outputBytecode: true }) const localnet = algorandFixture({ testAccountFunding: microAlgos(100_000_000_000), }) @@ -95,25 +85,16 @@ export function createBaseTestFixture(path: stri logger: nullLogger, }) - function getAppSpec(expect: ExpectStatic, contractName: string) { - const appSpec = lazyLoad.getResult().find((s) => s.name === contractName) - if (appSpec === undefined) { - expect.fail(`${path} does not contain an ARC4 contract "${contractName}"`) - } else { - return appSpec - } - } - const ctx: DeliberateAny = {} for (const contractName of contracts) { ctx[`${contractName}Invoker`] = async ( { expect, localnet }: { expect: ExpectStatic; localnet: AlgorandFixture }, use: Use, ) => { - const appSpec = getAppSpec(expect, contractName) + const compiled = await lazyCompile.getCompileResult(expect) - const approvalProgram = encodingUtil.base64ToUint8Array(appSpec.source!.approval) - const clearStateProgram = encodingUtil.base64ToUint8Array(appSpec.source!.clear) + const approvalProgram = compiled.approvalBinaries[contractName] + const clearStateProgram = compiled.clearStateBinaries[contractName] invariant(approvalProgram, `No approval program found for ${contractName}`) invariant(clearStateProgram, `No clear state program found for ${contractName}`) @@ -164,8 +145,7 @@ export function createArc4TestFixture( path: string, contracts: Record | TContracts[], ) { - const lazyLoad = createLazyLoader(path) - + const lazyCompile = createLazyCompiler(path, { outputArc56: true, outputBytecode: false }) const localnet = algorandFixture({ testAccountFunding: microAlgos(100_000_000_000), }) @@ -174,8 +154,8 @@ export function createArc4TestFixture( logger: nullLogger, }) - function getAppSpec(expect: ExpectStatic, contractName: string) { - const appSpec = lazyLoad.getResult().find((s) => s.name === contractName) + async function getAppSpec(expect: ExpectStatic, contractName: string) { + const appSpec = (await lazyCompile.getCompileResult(expect)).appSpecs.find((s) => s.name === contractName) if (appSpec === undefined) { expect.fail(`${path} does not contain an ARC4 contract "${contractName}"`) } else { @@ -198,14 +178,14 @@ export function createArc4TestFixture( const ctx: DeliberateAny = { localnet } for (const [contractName, config] of getContracts()) { ctx[`appSpec${contractName}`] = async ({ expect }: { expect: ExpectStatic }, use: Use) => { - await use(getAppSpec(expect, contractName)) + await use(await getAppSpec(expect, contractName)) } ctx[`appFactory${contractName}`] = async ( { expect, localnet }: { expect: ExpectStatic; localnet: AlgorandFixture }, use: Use, ) => { - const appSpec = getAppSpec(expect, contractName) + const appSpec = await getAppSpec(expect, contractName) await use( localnet.algorand.client.getAppFactory({ defaultSender: localnet.context.testAccount.addr, @@ -217,7 +197,7 @@ export function createArc4TestFixture( { expect, localnet }: { expect: ExpectStatic; localnet: AlgorandFixture }, use: Use, ) => { - const appSpec = getAppSpec(expect, contractName) + const appSpec = await getAppSpec(expect, contractName) const appFactory = localnet.algorand.client.getAppFactory({ defaultSender: localnet.context.testAccount.addr, appSpec: appSpec!, @@ -231,30 +211,89 @@ export function createArc4TestFixture( return [extendedTest, localnet] as readonly [typeof extendedTest, AlgorandFixture] } -function loadFromPath(pathToLoad: string): Arc56Contract[] { - const appSpecs = new Array() - const isDir = fs.lstatSync(pathToLoad).isDirectory() - if (!isDir && pathToLoad.endsWith('.arc56.json')) { - const fileContent = fs.readFileSync(pathToLoad, 'utf-8') - appSpecs.push(JSON.parse(fileContent)) - } else if (isDir) { - using dirHandle = getDirHandle(pathToLoad) - let dirent - while ((dirent = dirHandle.dir.readSync()) !== null) { - if (dirent.isFile() && dirent.name.endsWith('.arc56.json')) { - const fullFilePath = path.join(pathToLoad, dirent.name) - const fileContent = fs.readFileSync(fullFilePath, 'utf-8') - appSpecs.push(JSON.parse(fileContent)) - } - } - } - return appSpecs +type CompilationArtifacts = { + appSpecs: Arc56Contract[] + approvalBinaries: Record + clearStateBinaries: Record } - -const getDirHandle = (path: string) => { - const dir = fs.opendirSync(path) +function createLazyCompiler(path: string, options: { outputBytecode: boolean; outputArc56: boolean }) { + let result: CompilationArtifacts | undefined = undefined return { - dir, - [Symbol.dispose]: () => dir.closeSync(), + async getCompileResult(expect: ExpectStatic) { + if (!result) result = await compilePath(path, expect, options) + return result + }, } } +async function compilePath( + path: string, + expect: ExpectStatic, + options: { outputBytecode: boolean; outputArc56: boolean }, +): Promise { + using tempDir = generateTempDir() + const logCtx = LoggingContext.create() + + return await logCtx.run(async () => { + await compile({ + outputAwstJson: false, + outputAwst: false, + paths: [path], + outDir: tempDir.dirPath, + dryRun: false, + logLevel: 'error' as Parameters[0]['logLevel'], + skipVersionCheck: true, + + outputSsaIr: false, + outputOptimizationIr: false, + outputDestructuredIr: false, + outputMemoryIr: false, + + matchAlgodBytecode: false, + debugLevel: 1, + targetAvmVersion: 10, + cliTemplateDefinitions: [], + templateVarsPrefix: 'TMPL_', + localsCoalescingStrategy: 'root_operand' as Parameters[0]['localsCoalescingStrategy'], + + outputArc32: false, + outputTeal: false, + outputSourceMap: true, + optimizationLevel: 0, + ...options, + }) + for (const log of logCtx.logEvents) { + switch (log.level) { + case 'error': + case 'critical': + expect.fail(`Compilation error ${log.sourceLocation} [${log.level}]: ${log.message}`) + } + } + + const matchBinary = /(?[^\\/]+)\.(?(approval)|(clear))\.bin$/ + const appSpecs = new Array() + const approvalBinaries: Record = {} + const clearStateBinaries: Record = {} + for (const filePath of tempDir.files()) { + if (filePath.endsWith('.arc56.json')) { + appSpecs.push(JSON.parse(fs.readFileSync(filePath, 'utf-8'))) + } else { + const m = matchBinary.exec(filePath) + if (m?.groups) { + const { appName, programName } = m.groups + const binary = new Uint8Array(fs.readFileSync(filePath)) + if (programName === 'approval') { + approvalBinaries[appName] = binary + } else { + clearStateBinaries[appName] = binary + } + } + } + } + + return { + appSpecs, + approvalBinaries, + clearStateBinaries, + } + }) +} diff --git a/tests/util.ts b/tests/util.ts index 054f94e..56d5567 100644 --- a/tests/util.ts +++ b/tests/util.ts @@ -1,6 +1,10 @@ import type { bytes } from '@algorandfoundation/algorand-typescript' import { Bytes, internal } from '@algorandfoundation/algorand-typescript' -import { createHash } from 'crypto' +import { createHash, randomUUID } from 'crypto' +import fs from 'fs' +import { globIterateSync } from 'glob' +import os from 'os' +import upath from 'upath' import { asUint8Array } from '../src/util' class InvariantError extends Error {} @@ -32,3 +36,39 @@ export const getPaddedBytes = (padSize: number, value: internal.primitives.StubB export const intToBytes = (value: internal.primitives.StubBigUintCompat): internal.primitives.BytesCls => internal.primitives.BigUintCls.fromCompat(value).toBytes() + +export type TempDir = { + readonly dirPath: string + files(): IterableIterator +} & Disposable +function mkDirIfNotExists(dir: string) { + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } +} +function ensureTempDir(): string { + const tempDir = upath.join(os.tmpdir(), 'puya-ts') + mkDirIfNotExists(tempDir) + return tempDir +} + +export function generateTempDir(): TempDir { + const dirPath = upath.join(ensureTempDir(), `${randomUUID()}`) + mkDirIfNotExists(dirPath) + + return { + get dirPath() { + return dirPath + }, + *files(): IterableIterator { + for (const p of globIterateSync(upath.join(dirPath, '**'), { + nodir: true, + })) { + yield p + } + }, + [Symbol.dispose]() { + fs.rmSync(dirPath, { recursive: true, force: true }) + }, + } +} diff --git a/vitest.config.mts b/vitest.config.mts index 401a8fb..9ef5262 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -6,6 +6,7 @@ export default defineConfig({ esbuild: {}, test: { setupFiles: 'vitest.setup.ts', + testTimeout: 20_000, }, plugins: [ typescript({ From 0a7d1330508cf5219586d122f746bbb545e435cc Mon Sep 17 00:00:00 2001 From: Bobby Lat Date: Wed, 29 Jan 2025 13:43:51 +0800 Subject: [PATCH 2/2] chore: install puya before running tests in CI for compiling on demand --- .github/workflows/pr.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c2e6eb1..28a0d2c 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -9,7 +9,6 @@ on: - 'docs/**' - 'scripts/**' - permissions: contents: read @@ -19,8 +18,9 @@ jobs: uses: ./.github/workflows/node-ci.yml with: pre-test-script: | - pipx install algokit - algokit localnet start + pipx install algokit --python 3.12.6 + algokit localnet reset --update + pipx install puyapy --python 3.12.6 node-version: 20.x run-build: true run-commit-lint: true