@akta/sdk 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/auction/index.js +5 -5
  2. package/dist/auction/index.mjs +4 -4
  3. package/dist/{chunk-2AR3LS5J.mjs → chunk-2IK5OE34.mjs} +46 -46
  4. package/dist/{chunk-2AR3LS5J.mjs.map → chunk-2IK5OE34.mjs.map} +1 -1
  5. package/dist/{chunk-JMZYQMSW.mjs → chunk-3HDKN6SU.mjs} +3 -3
  6. package/dist/{chunk-MDSBD67B.js → chunk-5DOZLI4E.js} +6 -6
  7. package/dist/{chunk-MDSBD67B.js.map → chunk-5DOZLI4E.js.map} +1 -1
  8. package/dist/{chunk-GRR6MUNV.mjs → chunk-7B56R4BA.mjs} +3 -3
  9. package/dist/{chunk-JPV3DVL6.js → chunk-7WAUQIOJ.js} +10 -10
  10. package/dist/{chunk-JPV3DVL6.js.map → chunk-7WAUQIOJ.js.map} +1 -1
  11. package/dist/{chunk-IERRX2GS.mjs → chunk-BHROMBMA.mjs} +3 -3
  12. package/dist/{chunk-NANBUL67.mjs → chunk-CQJ6LHOR.mjs} +2 -2
  13. package/dist/{chunk-AXS7YUII.js → chunk-CXAUWVM5.js} +10 -10
  14. package/dist/{chunk-AXS7YUII.js.map → chunk-CXAUWVM5.js.map} +1 -1
  15. package/dist/{chunk-CPU7YHCB.mjs → chunk-CYOHVDRG.mjs} +2 -2
  16. package/dist/{chunk-HIDVSX3C.js → chunk-D4XTMODR.js} +7 -7
  17. package/dist/{chunk-HIDVSX3C.js.map → chunk-D4XTMODR.js.map} +1 -1
  18. package/dist/{chunk-76JFN4TN.js → chunk-DHVNQVI2.js} +6 -6
  19. package/dist/{chunk-76JFN4TN.js.map → chunk-DHVNQVI2.js.map} +1 -1
  20. package/dist/{chunk-YHMGRIY5.js → chunk-DQDDJ4ZC.js} +8 -8
  21. package/dist/{chunk-YHMGRIY5.js.map → chunk-DQDDJ4ZC.js.map} +1 -1
  22. package/dist/{chunk-FZXOT7SC.mjs → chunk-DZ2XEIUD.mjs} +3 -3
  23. package/dist/{chunk-VL2UI54Z.js → chunk-EKVXWEKM.js} +5 -5
  24. package/dist/{chunk-VL2UI54Z.js.map → chunk-EKVXWEKM.js.map} +1 -1
  25. package/dist/{chunk-HT2LVEDG.js → chunk-EN3NMZTZ.js} +5 -5
  26. package/dist/{chunk-HT2LVEDG.js.map → chunk-EN3NMZTZ.js.map} +1 -1
  27. package/dist/{chunk-KPXE4SEJ.mjs → chunk-FN4KP7BF.mjs} +2 -2
  28. package/dist/{chunk-5M6DY6Q7.js → chunk-HL5RPBTV.js} +7 -7
  29. package/dist/{chunk-5M6DY6Q7.js.map → chunk-HL5RPBTV.js.map} +1 -1
  30. package/dist/{chunk-GVPFBZMF.js → chunk-IQNHMEBU.js} +5 -5
  31. package/dist/{chunk-GVPFBZMF.js.map → chunk-IQNHMEBU.js.map} +1 -1
  32. package/dist/{chunk-2WOYNNPV.js → chunk-JVDYFC2I.js} +10 -10
  33. package/dist/chunk-JVDYFC2I.js.map +1 -0
  34. package/dist/{chunk-FQEKBA3B.js → chunk-KOIJBMJ4.js} +5 -5
  35. package/dist/{chunk-FQEKBA3B.js.map → chunk-KOIJBMJ4.js.map} +1 -1
  36. package/dist/{chunk-SQH64QTI.js → chunk-KYS36RDW.js} +4 -4
  37. package/dist/{chunk-SQH64QTI.js.map → chunk-KYS36RDW.js.map} +1 -1
  38. package/dist/{chunk-4ANINCSI.mjs → chunk-MUB6HBXP.mjs} +3 -3
  39. package/dist/{chunk-LYG4MDFV.js → chunk-N6N2BC4G.js} +6 -6
  40. package/dist/{chunk-LYG4MDFV.js.map → chunk-N6N2BC4G.js.map} +1 -1
  41. package/dist/{chunk-SGXO2K4C.mjs → chunk-NAP3G7WD.mjs} +3 -3
  42. package/dist/{chunk-VVRQI5IY.mjs → chunk-NCQEI6CL.mjs} +4 -4
  43. package/dist/{chunk-6MGMITC7.mjs → chunk-OUMHZXXI.mjs} +3 -3
  44. package/dist/{chunk-6PHYDWAI.mjs → chunk-PG2Z5IIV.mjs} +3 -3
  45. package/dist/{chunk-IWPVSICN.mjs → chunk-QUYFRKB4.mjs} +3 -3
  46. package/dist/{chunk-OYSHMZRR.mjs → chunk-QYWJHQ4Z.mjs} +4 -4
  47. package/dist/{chunk-MOHS2K45.mjs → chunk-TTL5K6WT.mjs} +3 -3
  48. package/dist/{chunk-V2TNS6B5.js → chunk-UPERFS3H.js} +8 -8
  49. package/dist/{chunk-V2TNS6B5.js.map → chunk-UPERFS3H.js.map} +1 -1
  50. package/dist/{chunk-UWAIIBII.js → chunk-UQLL4RRM.js} +46 -46
  51. package/dist/{chunk-UWAIIBII.js.map → chunk-UQLL4RRM.js.map} +1 -1
  52. package/dist/{chunk-TQADXRCE.mjs → chunk-V42UWD75.mjs} +4 -4
  53. package/dist/{chunk-B3ANVNAW.js → chunk-XUS7H5EP.js} +31 -31
  54. package/dist/{chunk-B3ANVNAW.js.map → chunk-XUS7H5EP.js.map} +1 -1
  55. package/dist/{chunk-HHXP4XDJ.js → chunk-ZNI6TQWD.js} +5 -5
  56. package/dist/{chunk-HHXP4XDJ.js.map → chunk-ZNI6TQWD.js.map} +1 -1
  57. package/dist/{chunk-XNWIPDFE.mjs → chunk-ZRQA3AH7.mjs} +6 -6
  58. package/dist/chunk-ZRQA3AH7.mjs.map +1 -0
  59. package/dist/dao/index.js +5 -5
  60. package/dist/dao/index.mjs +4 -4
  61. package/dist/dao-deployable/index.js +7 -7
  62. package/dist/dao-deployable/index.mjs +4 -4
  63. package/dist/escrow/index.js +4 -4
  64. package/dist/escrow/index.mjs +3 -3
  65. package/dist/gates/index.js +4 -4
  66. package/dist/gates/index.mjs +3 -3
  67. package/dist/hyper-swap/index.js +4 -4
  68. package/dist/hyper-swap/index.mjs +3 -3
  69. package/dist/index.js +19 -19
  70. package/dist/index.mjs +18 -18
  71. package/dist/marketplace/index.js +5 -5
  72. package/dist/marketplace/index.mjs +4 -4
  73. package/dist/meta-merkles/index.js +4 -4
  74. package/dist/meta-merkles/index.mjs +3 -3
  75. package/dist/networks.d.ts +1 -1
  76. package/dist/poll/index.js +4 -4
  77. package/dist/poll/index.mjs +3 -3
  78. package/dist/prize-box/index.js +4 -4
  79. package/dist/prize-box/index.mjs +3 -3
  80. package/dist/raffle/index.js +5 -5
  81. package/dist/raffle/index.mjs +4 -4
  82. package/dist/rewards/index.js +4 -4
  83. package/dist/rewards/index.mjs +3 -3
  84. package/dist/social/index.js +3 -3
  85. package/dist/social/index.mjs +2 -2
  86. package/dist/staking/index.js +4 -4
  87. package/dist/staking/index.mjs +3 -3
  88. package/dist/staking-pool/index.js +4 -4
  89. package/dist/staking-pool/index.mjs +3 -3
  90. package/dist/subscriptions/index.js +4 -4
  91. package/dist/subscriptions/index.mjs +3 -3
  92. package/dist/wallet/index.js +4 -4
  93. package/dist/wallet/index.mjs +3 -3
  94. package/package.json +1 -1
  95. package/dist/chunk-2WOYNNPV.js.map +0 -1
  96. package/dist/chunk-XNWIPDFE.mjs.map +0 -1
  97. /package/dist/{chunk-JMZYQMSW.mjs.map → chunk-3HDKN6SU.mjs.map} +0 -0
  98. /package/dist/{chunk-GRR6MUNV.mjs.map → chunk-7B56R4BA.mjs.map} +0 -0
  99. /package/dist/{chunk-IERRX2GS.mjs.map → chunk-BHROMBMA.mjs.map} +0 -0
  100. /package/dist/{chunk-NANBUL67.mjs.map → chunk-CQJ6LHOR.mjs.map} +0 -0
  101. /package/dist/{chunk-CPU7YHCB.mjs.map → chunk-CYOHVDRG.mjs.map} +0 -0
  102. /package/dist/{chunk-FZXOT7SC.mjs.map → chunk-DZ2XEIUD.mjs.map} +0 -0
  103. /package/dist/{chunk-KPXE4SEJ.mjs.map → chunk-FN4KP7BF.mjs.map} +0 -0
  104. /package/dist/{chunk-4ANINCSI.mjs.map → chunk-MUB6HBXP.mjs.map} +0 -0
  105. /package/dist/{chunk-SGXO2K4C.mjs.map → chunk-NAP3G7WD.mjs.map} +0 -0
  106. /package/dist/{chunk-VVRQI5IY.mjs.map → chunk-NCQEI6CL.mjs.map} +0 -0
  107. /package/dist/{chunk-6MGMITC7.mjs.map → chunk-OUMHZXXI.mjs.map} +0 -0
  108. /package/dist/{chunk-6PHYDWAI.mjs.map → chunk-PG2Z5IIV.mjs.map} +0 -0
  109. /package/dist/{chunk-IWPVSICN.mjs.map → chunk-QUYFRKB4.mjs.map} +0 -0
  110. /package/dist/{chunk-OYSHMZRR.mjs.map → chunk-QYWJHQ4Z.mjs.map} +0 -0
  111. /package/dist/{chunk-MOHS2K45.mjs.map → chunk-TTL5K6WT.mjs.map} +0 -0
  112. /package/dist/{chunk-TQADXRCE.mjs.map → chunk-V42UWD75.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-HT2LVEDG.js","../src/rewards/index.ts","../src/generated/RewardsClient.ts"],"names":[],"mappings":"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","file":"/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-HT2LVEDG.js","sourcesContent":[null,"import { microAlgo } from \"@algorandfoundation/algokit-utils\";\nimport { BaseSDK } from \"../base\";\nimport { ENV_VAR_NAMES } from \"../config\";\nimport {\n RewardsClient,\n RewardsFactory,\n RewardsComposer,\n DisbursementDetails,\n RewardsMbrData,\n} from '../generated/RewardsClient';\nimport { MaybeSigner, NewContractSDKParams } from \"../types\";\nimport {\n GetMbrParams,\n GetDisbursementParams,\n GetUserAllocationParams,\n RewardsGlobalState,\n OptInAssetParams,\n CreateDisbursementParams,\n EditDisbursementParams,\n CreateUserAllocationsParams,\n CreateAsaUserAllocationsParams,\n FinalizeDisbursementParams,\n CreateInstantDisbursementParams,\n CreateInstantAsaDisbursementParams,\n ClaimRewardsParams,\n ReclaimRewardsParams,\n UpdateAkitaDaoParams,\n UserAllocation,\n} from \"./types\";\n\nexport * from \"./types\";\n\n/** Base references available per transaction */\nconst BASE_REFERENCES = 8;\n/** References added by each opUp call */\nconst REFERENCES_PER_OPUP = 8;\n\n/**\n * SDK for interacting with the Rewards contract.\n * Use this to create disbursements, manage allocations, and claim/reclaim rewards.\n */\nexport class RewardsSDK extends BaseSDK<RewardsClient> {\n\n constructor(params: NewContractSDKParams) {\n super({ factory: RewardsFactory, ...params }, ENV_VAR_NAMES.REWARDS_APP_ID);\n }\n\n // ========== OpUp Helpers ==========\n\n /**\n * Calculates the number of opUp calls needed for a given reference count.\n * @param referencesNeeded - Number of references needed for the operation\n * @param baseReferences - Base references available (default 8)\n * @returns Number of opUp calls needed (0 if none needed)\n */\n private calculateOpUpsNeeded(referencesNeeded: number, baseReferences = BASE_REFERENCES): number {\n if (referencesNeeded <= baseReferences) {\n return 0;\n }\n return Math.ceil((referencesNeeded - baseReferences) / REFERENCES_PER_OPUP);\n }\n\n /**\n * Adds the required number of opUp calls to a transaction group.\n * Each opUp call adds 8 more reference slots to the group.\n */\n private addOpUps<T extends unknown[]>(\n group: RewardsComposer<T>,\n count: number,\n sendParams: { sender?: string | import('algosdk').Address; signer?: import('algosdk').TransactionSigner }\n ): void {\n for (let i = 0; i < count; i++) {\n group.opUp({\n ...sendParams,\n args: {},\n // Add unique note to avoid duplicate transaction issues\n note: i > 0 ? `opUp-${i}` : undefined,\n });\n }\n }\n\n // ========== Read Methods ==========\n\n /**\n * Gets the current global state of the rewards contract.\n */\n async getState(): Promise<RewardsGlobalState> {\n const state = await this.client.state.global.getAll();\n\n return {\n disbursementId: state.disbursementId ?? 1n,\n version: state.version ?? '',\n akitaDao: state.akitaDao ?? 0n,\n };\n }\n\n /**\n * Gets the MBR (Minimum Balance Requirement) data for creating disbursements.\n * @param title - The disbursement title\n * @param note - The disbursement note\n */\n async mbr({ title, note }: GetMbrParams): Promise<RewardsMbrData> {\n return await this.client.mbr({ args: { title, note } });\n }\n\n /**\n * Gets a specific disbursement by ID.\n */\n async getDisbursement({ id }: GetDisbursementParams): Promise<DisbursementDetails> {\n const disbursement = await this.client.state.box.disbursements.value(id);\n\n if (disbursement === undefined) {\n throw new Error(`Disbursement ${id} not found`);\n }\n\n return disbursement;\n }\n\n /**\n * Gets all disbursements as a map.\n */\n async getDisbursements(): Promise<Map<bigint, DisbursementDetails>> {\n const disbursements = await this.client.state.box.disbursements.getMap();\n return new Map(Array.from(disbursements.entries()).map(([key, value]) => [BigInt(key), value]));\n }\n\n /**\n * Gets a user's allocation for a specific disbursement and asset.\n */\n async getUserAllocation({ address, disbursementId, asset }: GetUserAllocationParams): Promise<bigint> {\n const allocation = await this.client.state.box.userAllocations.value({\n address,\n disbursementId: BigInt(disbursementId),\n asset: BigInt(asset),\n });\n\n if (allocation === undefined) {\n throw new Error(`Allocation not found for address ${address}, disbursement ${disbursementId}`);\n }\n\n return allocation;\n }\n\n /**\n * Checks if a user has an allocation for a specific disbursement and asset.\n */\n async hasAllocation({ address, disbursementId, asset }: GetUserAllocationParams): Promise<boolean> {\n try {\n const allocation = await this.client.state.box.userAllocations.value({\n address,\n disbursementId: BigInt(disbursementId),\n asset: BigInt(asset),\n });\n return allocation !== undefined;\n } catch {\n return false;\n }\n }\n\n // ========== Write Methods ==========\n\n /**\n * Opts the rewards contract into an asset.\n */\n async optIn({ sender, signer, asset }: OptInAssetParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Asset opt-in costs 100,000 microAlgo\n const payment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(100_000),\n receiver: this.client.appAddress,\n });\n\n await this.client.send.optIn({\n ...sendParams,\n args: {\n payment,\n asset,\n },\n });\n }\n\n /**\n * Creates a new disbursement.\n * Returns the disbursement ID.\n */\n async createDisbursement({\n sender,\n signer,\n title,\n timeToUnlock,\n expiration,\n note,\n }: CreateDisbursementParams): Promise<bigint> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get MBR for this disbursement\n const mbrData = await this.mbr({ title, note });\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrData.disbursements),\n receiver: this.client.appAddress,\n });\n\n const { return: disbursementId } = await this.client.send.createDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n title,\n timeToUnlock,\n expiration,\n note,\n },\n });\n\n if (disbursementId === undefined) {\n throw new Error('Failed to create disbursement');\n }\n\n return disbursementId;\n }\n\n /**\n * Edits an existing disbursement (only before finalization).\n */\n async editDisbursement({\n sender,\n signer,\n id,\n title,\n timeToUnlock,\n expiration,\n note,\n }: EditDisbursementParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.editDisbursement({\n ...sendParams,\n args: {\n id,\n title,\n timeToUnlock,\n expiration,\n note,\n },\n });\n }\n\n /**\n * Helper to format allocations for the contract.\n */\n private formatAllocations(allocations: UserAllocation[]): [string, bigint | number][] {\n return allocations.map(a => [a.address, a.amount]);\n }\n\n /**\n * Calculates the total amount from allocations.\n */\n private sumAllocations(allocations: UserAllocation[]): bigint {\n return allocations.reduce((sum, a) => sum + BigInt(a.amount), 0n);\n }\n\n /**\n * Creates ALGO allocations for a disbursement.\n * The payment includes both MBR for the boxes and the actual ALGO to distribute.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createUserAllocations({\n sender,\n signer,\n id,\n allocations,\n }: CreateUserAllocationsParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get disbursement to calculate MBR\n const disbursement = await this.getDisbursement({ id });\n const mbrData = await this.mbr({ title: disbursement.title, note: disbursement.note });\n\n // MBR per allocation + total ALGO to distribute\n const mbrAmount = mbrData.userAllocations * BigInt(allocations.length);\n const totalAmount = this.sumAllocations(allocations);\n\n const payment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount + totalAmount),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box\n const referencesNeeded = allocations.length + 1;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n // No opUps needed, send directly\n await this.client.send.createUserAllocations({\n ...sendParams,\n args: {\n payment,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n } else {\n // Use transaction group with opUps\n const group = this.client.newGroup();\n\n group.createUserAllocations({\n ...sendParams,\n args: {\n payment,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Creates ASA allocations for a disbursement.\n * Requires both an MBR payment and an asset transfer.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createAsaUserAllocations({\n sender,\n signer,\n id,\n asset,\n allocations,\n }: CreateAsaUserAllocationsParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get disbursement to calculate MBR\n const disbursement = await this.getDisbursement({ id });\n const mbrData = await this.mbr({ title: disbursement.title, note: disbursement.note });\n\n const mbrAmount = mbrData.userAllocations * BigInt(allocations.length);\n const totalAmount = this.sumAllocations(allocations);\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount),\n receiver: this.client.appAddress,\n });\n\n const assetXfer = await this.client.algorand.createTransaction.assetTransfer({\n ...sendParams,\n amount: totalAmount,\n assetId: BigInt(asset),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box, plus 1 for asset\n const referencesNeeded = allocations.length + 2;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n await this.client.send.createAsaUserAllocations({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n } else {\n const group = this.client.newGroup();\n\n group.createAsaUserAllocations({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Finalizes a disbursement, locking it for distribution.\n */\n async finalizeDisbursement({ sender, signer, id }: FinalizeDisbursementParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.finalizeDisbursement({\n ...sendParams,\n args: { id },\n });\n }\n\n /**\n * Creates and finalizes an ALGO disbursement in a single call.\n * Returns the disbursement ID.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createInstantDisbursement({\n sender,\n signer,\n timeToUnlock,\n expiration,\n allocations,\n }: CreateInstantDisbursementParams): Promise<bigint> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // MinDisbursementsMBR (35,300) + UserAllocationMBR (25,300) per allocation\n const MIN_DISBURSEMENTS_MBR = 35_300n;\n const USER_ALLOCATION_MBR = 25_300n;\n\n const mbrAmount = MIN_DISBURSEMENTS_MBR + (USER_ALLOCATION_MBR * BigInt(allocations.length));\n const totalAmount = this.sumAllocations(allocations);\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount + totalAmount),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box\n const referencesNeeded = allocations.length + 1;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n let disbursementId: bigint | undefined;\n\n if (opUpsNeeded === 0) {\n const result = await this.client.send.createInstantDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n disbursementId = result.return;\n } else {\n const group = this.client.newGroup();\n\n group.createInstantDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n const result = await group.send(sendParams);\n disbursementId = result.returns?.[0];\n }\n\n if (disbursementId === undefined) {\n throw new Error('Failed to create instant disbursement');\n }\n\n return disbursementId;\n }\n\n /**\n * Creates and finalizes an ASA disbursement in a single call.\n * Returns the disbursement ID.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createInstantAsaDisbursement({\n sender,\n signer,\n timeToUnlock,\n expiration,\n asset,\n allocations,\n }: CreateInstantAsaDisbursementParams): Promise<bigint> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // MinDisbursementsMBR (35,300) + UserAllocationMBR (25,300) per allocation\n const MIN_DISBURSEMENTS_MBR = 35_300n;\n const USER_ALLOCATION_MBR = 25_300n;\n\n const mbrAmount = MIN_DISBURSEMENTS_MBR + (USER_ALLOCATION_MBR * BigInt(allocations.length));\n const totalAmount = this.sumAllocations(allocations);\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount),\n receiver: this.client.appAddress,\n });\n\n const assetXfer = await this.client.algorand.createTransaction.assetTransfer({\n ...sendParams,\n amount: totalAmount,\n assetId: BigInt(asset),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box, plus 1 for asset\n const referencesNeeded = allocations.length + 2;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n let disbursementId: bigint | undefined;\n\n if (opUpsNeeded === 0) {\n const result = await this.client.send.createInstantAsaDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n disbursementId = result.return;\n } else {\n const group = this.client.newGroup();\n\n group.createInstantAsaDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n const result = await group.send(sendParams);\n disbursementId = result.returns?.[0];\n }\n\n if (disbursementId === undefined) {\n throw new Error('Failed to create instant ASA disbursement');\n }\n\n return disbursementId;\n }\n\n /**\n * Claims rewards from one or more disbursements.\n * The caller claims their allocated rewards.\n * Automatically adds opUp calls for claiming from many disbursements.\n */\n async claimRewards({ sender, signer, rewards }: ClaimRewardsParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n // Format rewards as [id, asset] tuples\n const formattedRewards: [bigint | number, bigint | number][] = rewards.map(r => [r.id, r.asset]);\n\n // Each claim needs references for: disbursement box, allocation box, possibly asset\n // Plus inner transactions use references\n const referencesNeeded = rewards.length * 3;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n await this.client.send.claimRewards({\n ...sendParams,\n // Extra fee for inner transactions (2 per claim: MBR refund + reward transfer)\n extraFee: microAlgo(2000 * rewards.length),\n args: {\n rewards: formattedRewards,\n },\n });\n } else {\n const group = this.client.newGroup();\n\n group.claimRewards({\n ...sendParams,\n extraFee: microAlgo(2000 * rewards.length),\n args: {\n rewards: formattedRewards,\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Reclaims unclaimed rewards after a disbursement has expired.\n * Only the disbursement creator can reclaim.\n * Automatically adds opUp calls for reclaiming many allocations.\n */\n async reclaimRewards({ sender, signer, id, reclaims }: ReclaimRewardsParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n // Format reclaims as [address, asset] tuples\n const formattedReclaims: [string, bigint | number][] = reclaims.map(r => [r.address, r.asset]);\n\n // Each reclaim needs references for: allocation box, possibly asset, receiver account\n const referencesNeeded = reclaims.length * 2 + 1; // +1 for disbursement box\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n await this.client.send.reclaimRewards({\n ...sendParams,\n // Extra fee for inner transactions (2 per reclaim: asset transfer + MBR refund)\n extraFee: microAlgo(2000 * reclaims.length),\n args: {\n id,\n reclaims: formattedReclaims,\n },\n });\n } else {\n const group = this.client.newGroup();\n\n group.reclaimRewards({\n ...sendParams,\n extraFee: microAlgo(2000 * reclaims.length),\n args: {\n id,\n reclaims: formattedReclaims,\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Updates the Akita DAO reference.\n */\n async updateAkitaDao({ sender, signer, akitaDao }: UpdateAkitaDaoParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.updateAkitaDao({\n ...sendParams,\n args: { akitaDao },\n });\n }\n}\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"Rewards\",\"structs\":{\"DisbursementDetails\":[{\"name\":\"creator\",\"type\":\"address\"},{\"name\":\"finalized\",\"type\":\"bool\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"uint64\"},{\"name\":\"timeToUnlock\",\"type\":\"uint64\"},{\"name\":\"expiration\",\"type\":\"uint64\"},{\"name\":\"allocations\",\"type\":\"uint64\"},{\"name\":\"distributed\",\"type\":\"uint64\"},{\"name\":\"note\",\"type\":\"string\"}],\"RewardsMBRData\":[{\"name\":\"disbursements\",\"type\":\"uint64\"},{\"name\":\"userAllocations\",\"type\":\"uint64\"}],\"UserAllocationsKey\":[{\"name\":\"address\",\"type\":\"address\"},{\"name\":\"asset\",\"type\":\"uint64\"},{\"name\":\"disbursementId\",\"type\":\"uint64\"}]},\"methods\":[{\"name\":\"create\",\"args\":[{\"type\":\"string\",\"name\":\"version\"},{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[\"NoOp\"],\"call\":[]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createDisbursement\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"string\",\"name\":\"title\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"string\",\"name\":\"note\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"editDisbursement\",\"args\":[{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"string\",\"name\":\"title\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"string\",\"name\":\"note\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createUserAllocations\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\"},{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createAsaUserAllocations\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"axfer\",\"name\":\"assetXfer\"},{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"finalizeDisbursement\",\"args\":[{\"type\":\"uint64\",\"name\":\"id\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createInstantDisbursement\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createInstantAsaDisbursement\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"axfer\",\"name\":\"assetXfer\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"claimRewards\",\"args\":[{\"type\":\"(uint64,uint64)[]\",\"name\":\"rewards\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"reclaimRewards\",\"args\":[{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"(address,uint64)[]\",\"name\":\"reclaims\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAO\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"opUp\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"mbr\",\"args\":[{\"type\":\"string\",\"name\":\"title\"},{\"type\":\"string\",\"name\":\"note\"}],\"returns\":{\"type\":\"(uint64,uint64)\",\"struct\":\"RewardsMBRData\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"optIn\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\",\"desc\":\"The payment transaction\"},{\"type\":\"uint64\",\"name\":\"asset\",\"desc\":\"The asset to be opted into\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"optin tells the contract to opt into an asa\",\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":2,\"bytes\":1},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"disbursementID\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"ZGlzYnVyc2VtZW50X2lk\",\"desc\":\"the disbursement id cursor\"},\"version\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"dmVyc2lvbg==\",\"desc\":\"the current version of the contract\"},\"akitaDAO\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZGFv\",\"desc\":\"the app ID of the Akita DAO\"}},\"local\":{},\"box\":{}},\"maps\":{\"global\":{},\"local\":{},\"box\":{\"disbursements\":{\"keyType\":\"uint64\",\"valueType\":\"DisbursementDetails\",\"desc\":\"the disbursement map of tokens\\n\\nthe key is the uint64 id of the disbursement\\nthe value is the details of the disbursement\",\"prefix\":\"ZA==\"},\"userAllocations\":{\"keyType\":\"UserAllocationsKey\",\"valueType\":\"uint64\",\"desc\":\"the user allocations of disbursements\\n\\nthe key is the address of the qualified account with the uint64 id of the disbursement\\nthe value is the amount they are owed\",\"prefix\":\"dQ==\"}}}},\"bareActions\":{\"create\":[],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[734,974],\"errorMessage\":\"Allocation already exists\"},{\"pc\":[1766,2018],\"errorMessage\":\"Allocation does not exist\"},{\"pc\":[500,690,927,1148,1966],\"errorMessage\":\"Disbursement already final\"},{\"pc\":[481,645,882,1090,1670,1939],\"errorMessage\":\"Disbursement does not exist\"},{\"pc\":[1970],\"errorMessage\":\"Disbursement has not expired\"},{\"pc\":[1740],\"errorMessage\":\"Disbursement is fully distributed\"},{\"pc\":[1732,1738],\"errorMessage\":\"Disbursement is locked\"},{\"pc\":[1182],\"errorMessage\":\"Disbursements cannot be empty\"},{\"pc\":[1184],\"errorMessage\":\"Disbursements must have allocations\"},{\"pc\":[1179],\"errorMessage\":\"Invalid disbursement expiration time\"},{\"pc\":[1161],\"errorMessage\":\"Invalid disbursement unlock time\"},{\"pc\":[326,818,1055,1347,1545,2240],\"errorMessage\":\"Invalid payment\"},{\"pc\":[1071,1564],\"errorMessage\":\"Invalid transfer\"},{\"pc\":[72],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[2156],\"errorMessage\":\"Only the Akita DAO can call this function\"},{\"pc\":[498,1146,1964],\"errorMessage\":\"You are not the creator of this disbursement\"},{\"pc\":[2154],\"errorMessage\":\"application exists\"},{\"pc\":[2141,2265],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[715,952,1291,1492,1657,1991],\"errorMessage\":\"index access is out of bounds\"},{\"pc\":[1636],\"errorMessage\":\"invalid number of bytes for (len+(uint64,uint64)[])\"},{\"pc\":[634,871,1256,1457,1928],\"errorMessage\":\"invalid number of bytes for (len+(uint8[32],uint64)[])\"},{\"pc\":[206,260,295,440,470,2176,2193],\"errorMessage\":\"invalid number of bytes for (len+utf8[])\"},{\"pc\":[217,271,280,422,448,456,611,848,1079,1224,1233,1425,1434,1905,2133,2223],\"errorMessage\":\"invalid number of bytes for uint64\"},{\"pc\":[840,1417],\"errorMessage\":\"transaction type is axfer\"},{\"pc\":[246,603,829,1216,1406,2215],\"errorMessage\":\"transaction type is pay\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMjUzMDAgMzUzMDAKICAgIGJ5dGVjYmxvY2sgImQiICJ1IiAweDE1MWY3Yzc1ICJkaXNidXJzZW1lbnRfaWQiICJha2l0YV9kYW8iIDB4ODAwMDRkIDB4MDA0ZjAwMDAwMDAwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBkaXNidXJzZW1lbnRJRCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEsIGtleTogUmV3YXJkc0dsb2JhbFN0YXRlS2V5RGlzYnVyc2VtZW50SUQgfSkKICAgIGJ5dGVjXzMgLy8gImRpc2J1cnNlbWVudF9pZCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgUmV3YXJkcyBleHRlbmRzIGNsYXNzZXMoQmFzZVJld2FyZHMsIEFraXRhQmFzZUNvbnRyYWN0LCBDb250cmFjdFdpdGhPcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDE5CiAgICBwdXNoYnl0ZXNzIDB4MWM5ZWJiZGIgMHg4ZjQ5MjYyZCAweDU2NTZhY2Y5IDB4M2M2MGRmYTAgMHg1NDI0YTU5MSAweDdiN2RjNWZjIDB4YWYxYTE0ZjIgMHgzZWM0MGFhNCAweGJkM2NkMDkwIDB4MzNlOTJjOTQgMHg4NTRkZWRlMCAweGQ1NGJiYWQ5IDB4Mzk0ZWFlYjIgLy8gbWV0aG9kICJjcmVhdGVEaXNidXJzZW1lbnQocGF5LHN0cmluZyx1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQiLCBtZXRob2QgImVkaXREaXNidXJzZW1lbnQodWludDY0LHN0cmluZyx1aW50NjQsdWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJjcmVhdGVVc2VyQWxsb2NhdGlvbnMocGF5LHVpbnQ2NCwoYWRkcmVzcyx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAiY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zKHBheSxheGZlcix1aW50NjQsKGFkZHJlc3MsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImZpbmFsaXplRGlzYnVyc2VtZW50KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50KHBheSx1aW50NjQsdWludDY0LChhZGRyZXNzLHVpbnQ2NClbXSl1aW50NjQiLCBtZXRob2QgImNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQocGF5LGF4ZmVyLHVpbnQ2NCx1aW50NjQsKGFkZHJlc3MsdWludDY0KVtdKXVpbnQ2NCIsIG1ldGhvZCAiY2xhaW1SZXdhcmRzKCh1aW50NjQsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgInJlY2xhaW1SZXdhcmRzKHVpbnQ2NCwoYWRkcmVzcyx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAidXBkYXRlQWtpdGFEQU8odWludDY0KXZvaWQiLCBtZXRob2QgIm9wVXAoKXZvaWQiLCBtZXRob2QgIm1icihzdHJpbmcsc3RyaW5nKSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAib3B0SW4ocGF5LHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlRGlzYnVyc2VtZW50IGVkaXREaXNidXJzZW1lbnQgY3JlYXRlVXNlckFsbG9jYXRpb25zIGNyZWF0ZUFzYVVzZXJBbGxvY2F0aW9ucyBmaW5hbGl6ZURpc2J1cnNlbWVudCBjcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50IGNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQgY2xhaW1SZXdhcmRzIHJlY2xhaW1SZXdhcmRzIHVwZGF0ZUFraXRhREFPIG1haW5fb3BVcF9yb3V0ZUAxNSBtYnIgb3B0SW4KICAgIGVycgoKbWFpbl9vcFVwX3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDMKICAgIC8vIG9wVXAoKTogdm9pZCB7IH0KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMTk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgUmV3YXJkcyBleHRlbmRzIGNsYXNzZXMoQmFzZVJld2FyZHMsIEFraXRhQmFzZUNvbnRyYWN0LCBDb250cmFjdFdpdGhPcHRJbikgewogICAgcHVzaGJ5dGVzIDB4Y2Q5YWQ2N2UgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyNwogICAgLy8gdmVyc2lvbiA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5VmVyc2lvbiB9KQogICAgcHVzaGJ5dGVzICJ2ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gdGhpcy52ZXJzaW9uLnZhbHVlID0gdmVyc2lvbgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlYyA0IC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlID0gQXBwbGljYXRpb24oYWtpdGFEQU8pCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLmNyZWF0ZURpc2J1cnNlbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZURpc2J1cnNlbWVudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OTYtMTAyCiAgICAvLyBjcmVhdGVEaXNidXJzZW1lbnQoCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICAgdGl0bGU6IHN0cmluZywKICAgIC8vICAgdGltZVRvVW5sb2NrOiB1aW50NjQsCiAgICAvLyAgIGV4cGlyYXRpb246IHVpbnQ2NCwKICAgIC8vICAgbm90ZTogc3RyaW5nCiAgICAvLyApOiB1aW50NjQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gY29uc3QgaWQgPSB0aGlzLm5ld0Rpc2J1cnNlbWVudElEKCkKICAgIGNhbGxzdWIgbmV3RGlzYnVyc2VtZW50SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBjb3N0cyA9IHRoaXMubWJyKHRpdGxlLCBub3RlKQogICAgZGlnIDQKICAgIGRpZyAyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2Jhc2UudHM6OkJhc2VSZXdhcmRzLm1icgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNvbnN0IG1ickFtb3VudCA9IGNvc3RzLmRpc2J1cnNlbWVudHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMDgtMTE1CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDYKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTA4LTExNQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICB1bmNvdmVyIDcKICAgIGd0eG5zIEFtb3VudAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMTctMTI3CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IGZhbHNlLAogICAgLy8gICB0aXRsZSwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiAwLAogICAgLy8gICBkaXN0cmlidXRlZDogMCwKICAgIC8vICAgbm90ZSwKICAgIC8vIH0KICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwMDRkCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgNzcgLy8gNzcKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBhbW91bnQ6IDAsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMTctMTI3CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IGZhbHNlLAogICAgLy8gICB0aXRsZSwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiAwLAogICAgLy8gICBkaXN0cmlidXRlZDogMCwKICAgIC8vICAgbm90ZSwKICAgIC8vIH0KICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciA3CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTE3LTEyNwogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIC8vICAgY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIC8vICAgZmluYWxpemVkOiBmYWxzZSwKICAgIC8vICAgdGl0bGUsCiAgICAvLyAgIGFtb3VudDogMCwKICAgIC8vICAgdGltZVRvVW5sb2NrLAogICAgLy8gICBleHBpcmF0aW9uLAogICAgLy8gICBhbGxvY2F0aW9uczogMCwKICAgIC8vICAgZGlzdHJpYnV0ZWQ6IDAsCiAgICAvLyAgIG5vdGUsCiAgICAvLyB9CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgdW5jb3ZlciAyCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjk2LTEwMgogICAgLy8gY3JlYXRlRGlzYnVyc2VtZW50KAogICAgLy8gICBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHRpdGxlOiBzdHJpbmcsCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIG5vdGU6IHN0cmluZwogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLmVkaXREaXNidXJzZW1lbnRbcm91dGluZ10oKSAtPiB2b2lkOgplZGl0RGlzYnVyc2VtZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMzItMTM4CiAgICAvLyBlZGl0RGlzYnVyc2VtZW50KAogICAgLy8gICBpZDogdWludDY0LAogICAgLy8gICB0aXRsZTogc3RyaW5nLAogICAgLy8gICB0aW1lVG9VbmxvY2s6IHVpbnQ2NCwKICAgIC8vICAgZXhwaXJhdGlvbjogdWludDY0LAogICAgLy8gICBub3RlOiBzdHJpbmcKICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY29uc3QgeyBjcmVhdG9yLCBmaW5hbGl6ZWQgfSA9IHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMyAvLyAzMgogICAgYm94X2V4dHJhY3QKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMzIKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNDIKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBjcmVhdG9yLCBFUlJfWU9VX0FSRV9OT1RfVEhFX0NSRUFUT1IpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gWW91IGFyZSBub3QgdGhlIGNyZWF0b3Igb2YgdGhpcyBkaXNidXJzZW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQoZmluYWxpemVkID09PSBmYWxzZSwgRVJSX0RJU0JVUlNFTUVOVF9BTFJFQURZX0ZJTkFMKQogICAgIQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBhbHJlYWR5IGZpbmFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS50aXRsZSA9IHRpdGxlCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBwdXNoaW50IDMzIC8vIDMzCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMgogICAgZXh0cmFjdDMKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICBkaWcgMgogICAgcHVzaGludCA3NSAvLyA3NQogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgNAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICB1bmNvdmVyIDMKICAgIC0KICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA3CiAgICArCiAgICBzd2FwCiAgICAtCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgNzUKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGRpZyAxCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS50aW1lVG9VbmxvY2sgPSB0aW1lVG9VbmxvY2sKICAgIGR1cAogICAgcHVzaGludCA0MyAvLyA0MwogICAgdW5jb3ZlciA1CiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUuZXhwaXJhdGlvbiA9IGV4cGlyYXRpb24KICAgIGR1cAogICAgcHVzaGludCA1MSAvLyA1MQogICAgdW5jb3ZlciA0CiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUubm90ZSA9IG5vdGUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBkdXAKICAgIHB1c2hpbnQgNzUgLy8gNzUKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgZXh0cmFjdDMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjEzMi0xMzgKICAgIC8vIGVkaXREaXNidXJzZW1lbnQoCiAgICAvLyAgIGlkOiB1aW50NjQsCiAgICAvLyAgIHRpdGxlOiBzdHJpbmcsCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIG5vdGU6IHN0cmluZwogICAgLy8gKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5jcmVhdGVVc2VyQWxsb2NhdGlvbnNbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVVc2VyQWxsb2NhdGlvbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIGNyZWF0ZVVzZXJBbGxvY2F0aW9ucygKICAgIC8vICAgcGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBpZDogdWludDY0LAogICAgLy8gICBhbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25bXQogICAgLy8gKTogdm9pZCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ4WzMyXSx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gYXNzZXJ0KHRoaXMuZGlzYnVyc2VtZW50cyhpZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgaXRvYgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBkaXNidXJzZW1lbnRzID0gQm94TWFwPHVpbnQ2NCwgRGlzYnVyc2VtZW50RGV0YWlscz4oeyBrZXlQcmVmaXg6IFJld2FyZHNCb3hQcmVmaXhEaXNidXJzZW1lbnRzIH0pCiAgICBieXRlY18wIC8vICJkIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBhc3NlcnQodGhpcy5kaXNidXJzZW1lbnRzKGlkKS5leGlzdHMsIEVSUl9ESVNCVVJTRU1FTlRfRE9FU19OT1RfRVhJU1QpCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyBjb25zdCB7IGZpbmFsaXplZCwgdGl0bGUsIG5vdGUgfSA9IHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMzIKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgZGlnIDEKICAgIHB1c2hpbnQgMzMgLy8gMzMKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgcHVzaGludCA3NSAvLyA3NQogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgY292ZXIgMwogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIGFzc2VydCghZmluYWxpemVkLCBFUlJfRElTQlVSU0VNRU5UX0FMUkVBRFlfRklOQUwpCiAgICAhCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGFscmVhZHkgZmluYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCgpjcmVhdGVVc2VyQWxsb2NhdGlvbnNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGRpZyA3CiAgICA8CiAgICBieiBjcmVhdGVVc2VyQWxsb2NhdGlvbnNfYWZ0ZXJfd2hpbGVANAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNjUKICAgIC8vIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NldDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2My0xNjcKICAgIC8vIGNvbnN0IHVzZXJBbGxvY2F0aW9uc0tleTogVXNlckFsbG9jYXRpb25zS2V5ID0gewogICAgLy8gICBkaXNidXJzZW1lbnRJRDogaWQsCiAgICAvLyAgIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICAvLyAgIGFzc2V0OiAwLAogICAgLy8gfQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgOAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyB1c2VyQWxsb2NhdGlvbnMgPSBCb3hNYXA8VXNlckFsbG9jYXRpb25zS2V5LCB1aW50NjQ+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4VXNlckFsbG9jYXRpb25zIH0pCiAgICBieXRlY18xIC8vICJ1IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gYXNzZXJ0KCF0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmV4aXN0cywgRVJSX0FMTE9DQVRJT05fQUxSRUFEWV9FWElTVFMpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEFsbG9jYXRpb24gYWxyZWFkeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLnZhbHVlID0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNzIKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUuYWxsb2NhdGlvbnMgKz0gMQogICAgZGlnIDYKICAgIGR1cAogICAgcHVzaGludCA1OSAvLyA1OQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZGlnIDEKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmFtb3VudCArPSBhbGxvY2F0aW9uc1tpXS5hbW91bnQKICAgIGR1cAogICAgcHVzaGludCAzNSAvLyAzNQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgMgogICAgKwogICAgaXRvYgogICAgcHVzaGludCAzNSAvLyAzNQogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBzdW0gKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMwogICAgKwogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZVVzZXJBbGxvY2F0aW9uc193aGlsZV90b3BAMgoKY3JlYXRlVXNlckFsbG9jYXRpb25zX2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gY29uc3QgY29zdHMgPSB0aGlzLm1icih0aXRsZSwgbm90ZSkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBjb25zdCBtYnJBbW91bnQ6IHVpbnQ2NCA9IGNvc3RzLnVzZXJBbGxvY2F0aW9ucyAqIGFsbG9jYXRpb25zLmxlbmd0aAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDkKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIGFtb3VudDogbWJyQW1vdW50ICsgc3VtLAogICAgdW5jb3ZlciAyCiAgICBkaWcgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIGNyZWF0ZVVzZXJBbGxvY2F0aW9ucygKICAgIC8vICAgcGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBpZDogdWludDY0LAogICAgLy8gICBhbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25bXQogICAgLy8gKTogdm9pZCB7CiAgICByZXR1cm4gLy8gb24gZXJyb3I6IEludmFsaWQgcGF5bWVudAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OlJld2FyZHMuY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxOTEtMTk2CiAgICAvLyBjcmVhdGVBc2FVc2VyQWxsb2NhdGlvbnMoCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICAgYXNzZXRYZmVyOiBndHhuLkFzc2V0VHJhbnNmZXJUeG4sCiAgICAvLyAgIGlkOiB1aW50NjQsCiAgICAvLyAgIGFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbltdCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIgLy8gMgogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbisodWludDhbMzJdLHVpbnQ2NClbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyBhc3NlcnQodGhpcy5kaXNidXJzZW1lbnRzKGlkKS5leGlzdHMsIEVSUl9ESVNCVVJTRU1FTlRfRE9FU19OT1RfRVhJU1QpCiAgICBpdG9iCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGRpc2J1cnNlbWVudHMgPSBCb3hNYXA8dWludDY0LCBEaXNidXJzZW1lbnREZXRhaWxzPih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeERpc2J1cnNlbWVudHMgfSkKICAgIGJ5dGVjXzAgLy8gImQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIGNvbnN0IHsgZmluYWxpemVkLCB0aXRsZSwgbm90ZSB9ID0gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHN3YXAKICAgIGludGNfMyAvLyAzMgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBkaWcgMQogICAgcHVzaGludCAzMyAvLyAzMwogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBwdXNoaW50IDc1IC8vIDc1CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBjb3ZlciAzCiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gYXNzZXJ0KCFmaW5hbGl6ZWQsIEVSUl9ESVNCVVJTRU1FTlRfQUxSRUFEWV9GSU5BTCkKICAgICEKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgYWxyZWFkeSBmaW5hbAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDIKICAgIC8vIGxldCBtYXRjaFN1bTogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjAzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAoKY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgNwogICAgPAogICAgYnogY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zX2FmdGVyX3doaWxlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjA2CiAgICAvLyBhZGRyZXNzOiBhbGxvY2F0aW9uc1tpXS5hZGRyZXNzLAogICAgZGlnIDcKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICAqCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXQ6IGFzc2V0WGZlci54ZmVyQXNzZXQuaWQsCiAgICBkaWcgMTEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDQtMjA4CiAgICAvLyBjb25zdCB1c2VyQWxsb2NhdGlvbnNLZXk6IFVzZXJBbGxvY2F0aW9uc0tleSA9IHsKICAgIC8vICAgZGlzYnVyc2VtZW50SUQ6IGlkLAogICAgLy8gICBhZGRyZXNzOiBhbGxvY2F0aW9uc1tpXS5hZGRyZXNzLAogICAgLy8gICBhc3NldDogYXNzZXRYZmVyLnhmZXJBc3NldC5pZCwKICAgIC8vIH0KICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDgKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGFzc2VydCghdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS5leGlzdHMsIEVSUl9BTExPQ0FUSU9OX0FMUkVBRFlfRVhJU1RTKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBBbGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS52YWx1ZSA9IGFsbG9jYXRpb25zW2ldLmFtb3VudAogICAgc3dhcAogICAgaW50Y18zIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmFsbG9jYXRpb25zICs9IDEKICAgIGRpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGRpZyAxCiAgICBwdXNoaW50IDU5IC8vIDU5CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS5hbW91bnQgKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkdXAKICAgIHB1c2hpbnQgMzUgLy8gMzUKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZGlnIDIKICAgICsKICAgIGl0b2IKICAgIHB1c2hpbnQgMzUgLy8gMzUKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gbWF0Y2hTdW0gKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMwogICAgKwogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZUFzYVVzZXJBbGxvY2F0aW9uc193aGlsZV90b3BAMgoKY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zX2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIyMAogICAgLy8gY29uc3QgY29zdHMgPSB0aGlzLm1icih0aXRsZSwgbm90ZSkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBjb25zdCBtYnJBbW91bnQ6IHVpbnQ2NCA9IGNvc3RzLnVzZXJBbGxvY2F0aW9ucyAqIGFsbG9jYXRpb25zLmxlbmd0aAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMjMtMjMwCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDEwCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjIzLTIzMAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIHVuY292ZXIgMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIzMi0yMzkKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBhc3NldFhmZXIsCiAgICAvLyAgIHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogbWF0Y2hTdW0sCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1RSQU5TRkVSCiAgICAvLyApCiAgICBkaWcgOAogICAgZHVwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMzItMjM5CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgYXNzZXRYZmVyLAogICAgLy8gICB7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IG1hdGNoU3VtLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9UUkFOU0ZFUgogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBkaWcgMwogICAgPT0KICAgICYmCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE5MS0xOTYKICAgIC8vIGNyZWF0ZUFzYVVzZXJBbGxvY2F0aW9ucygKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBhc3NldFhmZXI6IGd0eG4uQXNzZXRUcmFuc2ZlclR4biwKICAgIC8vICAgaWQ6IHVpbnQ2NCwKICAgIC8vICAgYWxsb2NhdGlvbnM6IFVzZXJBbGxvY2F0aW9uW10KICAgIC8vICk6IHZvaWQgewogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBJbnZhbGlkIHRyYW5zZmVyCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5maW5hbGl6ZURpc2J1cnNlbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmZpbmFsaXplRGlzYnVyc2VtZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGZpbmFsaXplRGlzYnVyc2VtZW50KGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0MwogICAgLy8gYXNzZXJ0KHRoaXMuZGlzYnVyc2VtZW50cyhpZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0MwogICAgLy8gYXNzZXJ0KHRoaXMuZGlzYnVyc2VtZW50cyhpZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gY29uc3QgeyBjcmVhdG9yLCBmaW5hbGl6ZWQsIHRpbWVUb1VubG9jaywgZXhwaXJhdGlvbiwgYW1vdW50LCBhbGxvY2F0aW9ucyB9ID0gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18zIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDEKICAgIGludGNfMyAvLyAzMgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBkaWcgMgogICAgcHVzaGludCA0MyAvLyA0MwogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDQKICAgIGRpZyAzCiAgICBwdXNoaW50IDUxIC8vIDUxCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGNvdmVyIDQKICAgIGRpZyAzCiAgICBwdXNoaW50IDM1IC8vIDM1CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGNvdmVyIDQKICAgIHVuY292ZXIgMwogICAgcHVzaGludCA1OSAvLyA1OQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IGNyZWF0b3IsIEVSUl9ZT1VfQVJFX05PVF9USEVfQ1JFQVRPUikKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgPT0KICAgIGFzc2VydCAvLyBZb3UgYXJlIG5vdCB0aGUgY3JlYXRvciBvZiB0aGlzIGRpc2J1cnNlbWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIGFzc2VydCghZmluYWxpemVkLCBFUlJfRElTQlVSU0VNRU5UX0FMUkVBRFlfRklOQUwpCiAgICAhCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGFscmVhZHkgZmluYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB0aW1lVG9VbmxvY2sgPj0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCB8fCB0aW1lVG9VbmxvY2sgPT09IDAsCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICA+PQogICAgYm56IGZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfdHJ1ZUAzCiAgICBkaWcgMwogICAgYm56IGZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfZmFsc2VANAoKZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDgtMjUxCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRpbWVUb1VubG9jayA+PSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wIHx8IHRpbWVUb1VubG9jayA9PT0gMCwKICAgIC8vICAgRVJSX0lOVkFMSURfRElTQlVSU0VNRU5UX1VOTE9DS19USU1FCiAgICAvLyApCiAgICBhc3NlcnQgLy8gSW52YWxpZCBkaXNidXJzZW1lbnQgdW5sb2NrIHRpbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBleHBpcmF0aW9uID49IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgKyA2MCB8fCBleHBpcmF0aW9uID09PSAwLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgcHVzaGludCA2MCAvLyA2MAogICAgKwogICAgZGlnIDMKICAgIDw9CiAgICBibnogZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF90cnVlQDcKICAgIGRpZyAyCiAgICBibnogZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9mYWxzZUA4CgpmaW5hbGl6ZURpc2J1cnNlbWVudF9ib29sX3RydWVANzoKICAgIGludGNfMSAvLyAxCgpmaW5hbGl6ZURpc2J1cnNlbWVudF9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI1Mi0yNTUKICAgIC8vIGFzc2VydCgKICAgIC8vICAgZXhwaXJhdGlvbiA+PSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wICsgNjAgfHwgZXhwaXJhdGlvbiA9PT0gMCwKICAgIC8vICAgRVJSX0lOVkFMSURfRElTQlVSU0VNRU5UX0VYUElSQVRJT05fVElNRQogICAgLy8gKQogICAgYXNzZXJ0IC8vIEludmFsaWQgZGlzYnVyc2VtZW50IGV4cGlyYXRpb24gdGltZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGFzc2VydChhbW91bnQgPiAwLCBFUlJfRElTQlVSU0VNRU5UU19DQU5OT1RfQkVfRU1QVFkpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudHMgY2Fubm90IGJlIGVtcHR5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI1NwogICAgLy8gYXNzZXJ0KGFsbG9jYXRpb25zID4gMCwgRVJSX0RJU0JVUlNFTUVOVFNfTVVTVF9IQVZFX0FMTE9DQVRJT05TKQogICAgZHVwCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50cyBtdXN0IGhhdmUgYWxsb2NhdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjU5CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmZpbmFsaXplZCA9IHRydWUKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMyAvLyAzMgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18xIC8vIDEKICAgIHNldGJpdAogICAgaW50Y18zIC8vIDMyCiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGZpbmFsaXplRGlzYnVyc2VtZW50KGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfbWVyZ2VAOQoKZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5jcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlSW5zdGFudERpc2J1cnNlbWVudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjYyLTI2NwogICAgLy8gY3JlYXRlSW5zdGFudERpc2J1cnNlbWVudCgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICB0aW1lVG9VbmxvY2s6IHVpbnQ2NCwKICAgIC8vICAgZXhwaXJhdGlvbjogdWludDY0LAogICAgLy8gICBhbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25bXQogICAgLy8gKTogdWludDY0IHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbisodWludDhbMzJdLHVpbnQ2NClbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyBjb25zdCBpZCA9IHRoaXMubmV3RGlzYnVyc2VtZW50SUQoKQogICAgY2FsbHN1YiBuZXdEaXNidXJzZW1lbnRJRAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGNvbnN0IG1ickFtb3VudDogdWludDY0ID0gTWluRGlzYnVyc2VtZW50c01CUiArIChVc2VyQWxsb2NhdGlvbk1CUiAqIGFsbG9jYXRpb25zLmxlbmd0aCkKICAgIGludGMgNCAvLyAyNTMwMAogICAgKgogICAgaW50YyA1IC8vIDM1MzAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gbGV0IHN1bTogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAoKY3JlYXRlSW5zdGFudERpc2J1cnNlbWVudF93aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IGNyZWF0ZUluc3RhbnREaXNidXJzZW1lbnRfYWZ0ZXJfd2hpbGVANAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICBkaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjc3CiAgICAvLyBhc3NldDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI3NC0yNzgKICAgIC8vIGNvbnN0IHVzZXJBbGxvY2F0aW9uc0tleTogVXNlckFsbG9jYXRpb25zS2V5ID0gewogICAgLy8gICBkaXNidXJzZW1lbnRJRDogaWQsCiAgICAvLyAgIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICAvLyAgIGFzc2V0OiAwLAogICAgLy8gfQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS52YWx1ZSA9IGFsbG9jYXRpb25zW2ldLmFtb3VudAogICAgc3dhcAogICAgaW50Y18zIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS52YWx1ZSA9IGFsbG9jYXRpb25zW2ldLmFtb3VudAogICAgZGlnIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjgxCiAgICAvLyBzdW0gKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMwogICAgKwogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZUluc3RhbnREaXNidXJzZW1lbnRfd2hpbGVfdG9wQDIKCmNyZWF0ZUluc3RhbnREaXNidXJzZW1lbnRfYWZ0ZXJfd2hpbGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjg0LTI5MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQgKyBzdW0sCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyA4CiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4NwogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjg0LTI5MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQgKyBzdW0sCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIGRpZyA0CiAgICBkaWcgNAogICAgZHVwCiAgICBjb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4NC0yOTEKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogbWJyQW1vdW50ICsgc3VtLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjk0CiAgICAvLyBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyOTMtMzAzCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IHRydWUsCiAgICAvLyAgIHRpdGxlOiAnJywKICAgIC8vICAgYW1vdW50OiBzdW0sCiAgICAvLyAgIHRpbWVUb1VubG9jaywKICAgIC8vICAgZXhwaXJhdGlvbiwKICAgIC8vICAgYWxsb2NhdGlvbnM6IGFsbG9jYXRpb25zLmxlbmd0aCwKICAgIC8vICAgZGlzdHJpYnV0ZWQ6IDAsCiAgICAvLyAgIG5vdGU6ICcnLAogICAgLy8gfQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjIDUgLy8gMHg4MDAwNGQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA5CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNiAvLyAweDAwNGYwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI5MwogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIGRpZyA0CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBkaXNidXJzZW1lbnRzID0gQm94TWFwPHVpbnQ2NCwgRGlzYnVyc2VtZW50RGV0YWlscz4oeyBrZXlQcmVmaXg6IFJld2FyZHNCb3hQcmVmaXhEaXNidXJzZW1lbnRzIH0pCiAgICBieXRlY18wIC8vICJkIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyOTMtMzAzCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IHRydWUsCiAgICAvLyAgIHRpdGxlOiAnJywKICAgIC8vICAgYW1vdW50OiBzdW0sCiAgICAvLyAgIHRpbWVUb1VubG9jaywKICAgIC8vICAgZXhwaXJhdGlvbiwKICAgIC8vICAgYWxsb2NhdGlvbnM6IGFsbG9jYXRpb25zLmxlbmd0aCwKICAgIC8vICAgZGlzdHJpYnV0ZWQ6IDAsCiAgICAvLyAgIG5vdGU6ICcnLAogICAgLy8gfQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHVuY292ZXIgMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNjItMjY3CiAgICAvLyBjcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50KAogICAgLy8gICBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIGFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbltdCiAgICAvLyApOiB1aW50NjQgewogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OlJld2FyZHMuY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjMwOC0zMTQKICAgIC8vIGNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQoCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICAgYXNzZXRYZmVyOiBndHhuLkFzc2V0VHJhbnNmZXJUeG4sCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIGFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbltdCiAgICAvLyApOiB1aW50NjQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50OFszMl0sdWludDY0KVtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMTUKICAgIC8vIGNvbnN0IGlkID0gdGhpcy5uZXdEaXNidXJzZW1lbnRJRCgpCiAgICBjYWxsc3ViIG5ld0Rpc2J1cnNlbWVudElECiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjMxNwogICAgLy8gY29uc3QgbWJyQW1vdW50OiB1aW50NjQgPSBNaW5EaXNidXJzZW1lbnRzTUJSICsgKFVzZXJBbGxvY2F0aW9uTUJSICogYWxsb2NhdGlvbnMubGVuZ3RoKQogICAgaW50YyA0IC8vIDI1MzAwCiAgICAqCiAgICBpbnRjIDUgLy8gMzUzMDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzE5CiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCgpjcmVhdGVJbnN0YW50QXNhRGlzYnVyc2VtZW50X3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgNQogICAgPAogICAgYnogY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudF9hZnRlcl93aGlsZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjMyMwogICAgLy8gYWRkcmVzczogYWxsb2NhdGlvbnNbaV0uYWRkcmVzcywKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGV4dHJhY3QgMCAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjQKICAgIC8vIGFzc2V0OiBhc3NldFhmZXIueGZlckFzc2V0LmlkLAogICAgZGlnIDExCiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzIxLTMyNQogICAgLy8gY29uc3QgdXNlckFsbG9jYXRpb25zS2V5OiBVc2VyQWxsb2NhdGlvbnNLZXkgPSB7CiAgICAvLyAgIGRpc2J1cnNlbWVudElEOiBpZCwKICAgIC8vICAgYWRkcmVzczogYWxsb2NhdGlvbnNbaV0uYWRkcmVzcywKICAgIC8vICAgYXNzZXQ6IGFzc2V0WGZlci54ZmVyQXNzZXQuaWQsCiAgICAvLyB9CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLnZhbHVlID0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyB1c2VyQWxsb2NhdGlvbnMgPSBCb3hNYXA8VXNlckFsbG9jYXRpb25zS2V5LCB1aW50NjQ+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4VXNlckFsbG9jYXRpb25zIH0pCiAgICBieXRlY18xIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLnZhbHVlID0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHN1bSArPSBhbGxvY2F0aW9uc1tpXS5hbW91bnQKICAgIGRpZyAzCiAgICArCiAgICBidXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudF93aGlsZV90b3BAMgoKY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudF9hZnRlcl93aGlsZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMzEtMzM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDkKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMzEtMzM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDQKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIEludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNDAtMzQ3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgYXNzZXRYZmVyLAogICAgLy8gICB7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfVFJBTlNGRVIKICAgIC8vICkKICAgIGRpZyA4CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM0MC0zNDcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBhc3NldFhmZXIsCiAgICAvLyAgIHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogc3VtLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9UUkFOU0ZFUgogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM1MAogICAgLy8gY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzQ5LTM1OQogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIC8vICAgY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIC8vICAgZmluYWxpemVkOiB0cnVlLAogICAgLy8gICB0aXRsZTogJycsCiAgICAvLyAgIGFtb3VudDogc3VtLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiBhbGxvY2F0aW9ucy5sZW5ndGgsCiAgICAvLyAgIGRpc3RyaWJ1dGVkOiAwLAogICAgLy8gICBub3RlOiAnJywKICAgIC8vIH0KICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlYyA1IC8vIDB4ODAwMDRkCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgOQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgOAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDRmMDAwMDAwMDAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUgPSB7CiAgICBkaWcgNAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzQ5LTM1OQogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIC8vICAgY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIC8vICAgZmluYWxpemVkOiB0cnVlLAogICAgLy8gICB0aXRsZTogJycsCiAgICAvLyAgIGFtb3VudDogc3VtLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiBhbGxvY2F0aW9ucy5sZW5ndGgsCiAgICAvLyAgIGRpc3RyaWJ1dGVkOiAwLAogICAgLy8gICBub3RlOiAnJywKICAgIC8vIH0KICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICB1bmNvdmVyIDIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzA4LTMxNAogICAgLy8gY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudCgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBhc3NldFhmZXI6IGd0eG4uQXNzZXRUcmFuc2ZlclR4biwKICAgIC8vICAgdGltZVRvVW5sb2NrOiB1aW50NjQsCiAgICAvLyAgIGV4cGlyYXRpb246IHVpbnQ2NCwKICAgIC8vICAgYWxsb2NhdGlvbnM6IFVzZXJBbGxvY2F0aW9uW10KICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBjbGFpbVJld2FyZHMocmV3YXJkczogQ2xhaW1EZXRhaWxzW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgICoKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHJld2FyZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgpjbGFpbVJld2FyZHNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHJld2FyZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl93aGlsZUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjYKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMocmV3YXJkc1tpXS5pZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBkaXNidXJzZW1lbnRzID0gQm94TWFwPHVpbnQ2NCwgRGlzYnVyc2VtZW50RGV0YWlscz4oeyBrZXlQcmVmaXg6IFJld2FyZHNCb3hQcmVmaXhEaXNidXJzZW1lbnRzIH0pCiAgICBieXRlY18wIC8vICJkIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjYKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMocmV3YXJkc1tpXS5pZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzY4CiAgICAvLyBjb25zdCB7IHRpbWVUb1VubG9jaywgZXhwaXJhdGlvbiwgYW1vdW50LCBkaXN0cmlidXRlZCwgY3JlYXRvciwgbm90ZSB9ID0gdGhpcy5kaXNidXJzZW1lbnRzKHJld2FyZHNbaV0uaWQpLnZhbHVlCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgc3dhcAogICAgZHVwCiAgICBwdXNoaW50IDQzIC8vIDQzCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAxCiAgICBwdXNoaW50IDUxIC8vIDUxCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAyCiAgICBwdXNoaW50IDM1IC8vIDM1CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAzCiAgICBwdXNoaW50IDY3IC8vIDY3CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA0CiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18zIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgYnVyeSAxNAogICAgZGlnIDUKICAgIHB1c2hpbnQgNzUgLy8gNzUKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgNgogICAgbGVuCiAgICB1bmNvdmVyIDcKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBidXJ5IDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gYXNzZXJ0KHRpbWVUb1VubG9jayA8PSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wLCBFUlJfRElTQlVSU0VNRU5UX0xPQ0tFRCkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIHVuY292ZXIgNAogICAgPj0KICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM3MAogICAgLy8gYXNzZXJ0KGV4cGlyYXRpb24gPj0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCwgRVJSX0RJU0JVUlNFTUVOVF9MT0NLRUQpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICB1bmNvdmVyIDMKICAgIDw9CiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGlzIGxvY2tlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIGFzc2VydChhbW91bnQgPiBkaXN0cmlidXRlZCwgRVJSX0RJU0JVUlNFTUVOVF9GVUxMWV9ESVNUUklCVVRFRCkKICAgID4KICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgaXMgZnVsbHkgZGlzdHJpYnV0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzc1CiAgICAvLyBhZGRyZXNzOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIGFzc2V0OiByZXdhcmRzW2ldLmFzc2V0LAogICAgdW5jb3ZlciAzCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgYnVyeSA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM3My0zNzcKICAgIC8vIGNvbnN0IHVzZXJBbGxvY2F0aW9uc0tleTogVXNlckFsbG9jYXRpb25zS2V5ID0gewogICAgLy8gICBkaXNidXJzZW1lbnRJRDogcmV3YXJkc1tpXS5pZCwKICAgIC8vICAgYWRkcmVzczogVHhuLnNlbmRlciwKICAgIC8vICAgYXNzZXQ6IHJld2FyZHNbaV0uYXNzZXQsCiAgICAvLyB9CiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNzgKICAgIC8vIGFzc2VydCh0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmV4aXN0cywgRVJSX0FMTE9DQVRJT05fRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFsbG9jYXRpb24gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyBjb25zdCB1c2VyQWxsb2NhdGlvbiA9IHRoaXMudXNlckFsbG9jYXRpb25zKHVzZXJBbGxvY2F0aW9uc0tleSkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMocmV3YXJkc1tpXS5pZCkudmFsdWUuYWxsb2NhdGlvbnMgLT0gMQogICAgZGlnIDMKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIGRpZyA0CiAgICBwdXNoaW50IDU5IC8vIDU5CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM4MgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKHJld2FyZHNbaV0uaWQpLnZhbHVlLmRpc3RyaWJ1dGVkICs9IHVzZXJBbGxvY2F0aW9uCiAgICBkaWcgMwogICAgcHVzaGludCA2NyAvLyA2NwogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHB1c2hpbnQgNjcgLy8gNjcKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzgzCiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzkyCiAgICAvLyBpZiAoIWlzQWxnbykgewogICAgYnogY2xhaW1SZXdhcmRzX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM5NAogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGNyZWF0b3JNQlJSZWZ1bmQsIGFzc2V0WGZlcikKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzg3CiAgICAvLyBhbW91bnQ6IFVzZXJBbGxvY2F0aW9uTUJSLAogICAgaW50YyA0IC8vIDI1MzAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZGlnIDcKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzg1LTM4OAogICAgLy8gY29uc3QgY3JlYXRvck1CUlJlZnVuZCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHJlY2VpdmVyOiBjcmVhdG9yLAogICAgLy8gICBhbW91bnQ6IFVzZXJBbGxvY2F0aW9uTUJSLAogICAgLy8gfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGNyZWF0b3JNQlJSZWZ1bmQsIGFzc2V0WGZlcikKICAgIGl0eG5fbmV4dAogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgTm90ZQogICAgZGlnIDUKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzkzLTM5OAogICAgLy8gY29uc3QgYXNzZXRYZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHVzZXJBbGxvY2F0aW9uLAogICAgLy8gICB4ZmVyQXNzZXQ6IHJld2FyZHNbaV0uYXNzZXQsCiAgICAvLyAgIG5vdGUsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MDAKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAoY3JlYXRvck1CUlJlZnVuZCwgYXNzZXRYZmVyKQogICAgaXR4bl9zdWJtaXQKCmNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZXdhcmRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgY2xhaW1SZXdhcmRzX3doaWxlX3RvcEAyCgpjbGFpbVJld2FyZHNfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQwMwogICAgLy8gcmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQwOAogICAgLy8gaXR4bi5zdWJtaXRHcm91cChjcmVhdG9yTUJSUmVmdW5kLCBwYXltZW50KQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozODcKICAgIC8vIGFtb3VudDogVXNlckFsbG9jYXRpb25NQlIsCiAgICBpbnRjIDQgLy8gMjUzMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgNwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozODUtMzg4CiAgICAvLyBjb25zdCBjcmVhdG9yTUJSUmVmdW5kID0gaXR4bi5wYXltZW50KHsKICAgIC8vICAgcmVjZWl2ZXI6IGNyZWF0b3IsCiAgICAvLyAgIGFtb3VudDogVXNlckFsbG9jYXRpb25NQlIsCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAoY3JlYXRvck1CUlJlZnVuZCwgcGF5bWVudCkKICAgIGl0eG5fbmV4dAogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgTm90ZQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDAyLTQwNgogICAgLy8gY29uc3QgcGF5bWVudCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICBhbW91bnQ6IHVzZXJBbGxvY2F0aW9uLAogICAgLy8gICBub3RlLAogICAgLy8gfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGNyZWF0b3JNQlJSZWZ1bmQsIHBheW1lbnQpCiAgICBpdHhuX3N1Ym1pdAogICAgYiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUAxMAoKY2xhaW1SZXdhcmRzX2FmdGVyX3doaWxlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjQKICAgIC8vIGNsYWltUmV3YXJkcyhyZXdhcmRzOiBDbGFpbURldGFpbHNbXSk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OlJld2FyZHMucmVjbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpyZWNsYWltUmV3YXJkczoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTMKICAgIC8vIHJlY2xhaW1SZXdhcmRzKGlkOiB1aW50NjQsIHJlY2xhaW1zOiBBbGxvY2F0aW9uUmVjbGFpbURldGFpbHNbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbisodWludDhbMzJdLHVpbnQ2NClbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDE0CiAgICAvLyBhc3NlcnQodGhpcy5kaXNidXJzZW1lbnRzKGlkKS5leGlzdHMsIEVSUl9ESVNCVVJTRU1FTlRfRE9FU19OT1RfRVhJU1QpCiAgICBpdG9iCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGRpc2J1cnNlbWVudHMgPSBCb3hNYXA8dWludDY0LCBEaXNidXJzZW1lbnREZXRhaWxzPih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeERpc2J1cnNlbWVudHMgfSkKICAgIGJ5dGVjXzAgLy8gImQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTQKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTUKICAgIC8vIGNvbnN0IHsgY3JlYXRvciwgZmluYWxpemVkLCBleHBpcmF0aW9uIH0gPSB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzMgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzMgLy8gMzIKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgcHVzaGludCA1MSAvLyA1MQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQxNwogICAgLy8gYXNzZXJ0KGNyZWF0b3IgPT09IFR4bi5zZW5kZXIsIEVSUl9ZT1VfQVJFX05PVF9USEVfQ1JFQVRPUikKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgPT0KICAgIGFzc2VydCAvLyBZb3UgYXJlIG5vdCB0aGUgY3JlYXRvciBvZiB0aGlzIGRpc2J1cnNlbWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTgKICAgIC8vIGFzc2VydChmaW5hbGl6ZWQsIEVSUl9ESVNCVVJTRU1FTlRfQUxSRUFEWV9GSU5BTCkKICAgIHN3YXAKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgYWxyZWFkeSBmaW5hbAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTkKICAgIC8vIGFzc2VydChleHBpcmF0aW9uIDw9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAsIEVSUl9ESVNCVVJTRU1FTlRfTk9UX0VYUElSRUQpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICA8PQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBoYXMgbm90IGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgpyZWNsYWltUmV3YXJkc193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IHJlY2xhaW1SZXdhcmRzX2FmdGVyX3doaWxlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQyNAogICAgLy8gYWRkcmVzczogcmVjbGFpbXNbaV0uYWRkcmVzcywKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDI1CiAgICAvLyBhc3NldDogcmVjbGFpbXNbaV0uYXNzZXQsCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQyNC00MjUKICAgIC8vIGFkZHJlc3M6IHJlY2xhaW1zW2ldLmFkZHJlc3MsCiAgICAvLyBhc3NldDogcmVjbGFpbXNbaV0uYXNzZXQsCiAgICBpbnRjXzMgLy8gMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDI1CiAgICAvLyBhc3NldDogcmVjbGFpbXNbaV0uYXNzZXQsCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDIyLTQyNgogICAgLy8gY29uc3QgdXNlckFsbG9jYXRpb25zS2V5OiBVc2VyQWxsb2NhdGlvbnNLZXkgPSB7CiAgICAvLyAgIGRpc2J1cnNlbWVudElEOiBpZCwKICAgIC8vICAgYWRkcmVzczogcmVjbGFpbXNbaV0uYWRkcmVzcywKICAgIC8vICAgYXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0LAogICAgLy8gfQogICAgZHVwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDUKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MjcKICAgIC8vIGFzc2VydCh0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmV4aXN0cywgRVJSX0FMTE9DQVRJT05fRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFsbG9jYXRpb24gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDI5CiAgICAvLyBjb25zdCB1c2VyQWxsb2NhdGlvbiA9IHRoaXMudXNlckFsbG9jYXRpb25zKHVzZXJBbGxvY2F0aW9uc0tleSkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDMxCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmFsbG9jYXRpb25zIC09IDEKICAgIGRpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIGRpZyAxCiAgICBwdXNoaW50IDU5IC8vIDU5CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQzMgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS5hbW91bnQgLT0gdXNlckFsbG9jYXRpb24KICAgIGR1cAogICAgcHVzaGludCAzNSAvLyAzNQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIGl0b2IKICAgIHB1c2hpbnQgMzUgLy8gMzUKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQzMwogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQzNwogICAgLy8gaWYgKCFpc0FsZ28pIHsKICAgIGJ6IHJlY2xhaW1SZXdhcmRzX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gaXR4bi5zdWJtaXRHcm91cCh4ZmVyLCBtYnJSZWZ1bmQpCiAgICBpdHhuX2JlZ2luCiAgICBkaWcgNwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyAxCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MzgtNDQyCiAgICAvLyBjb25zdCB4ZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogY3JlYXRvciwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHVzZXJBbGxvY2F0aW9uLAogICAgLy8gICB4ZmVyQXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0LAogICAgLy8gfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDQ5CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHhmZXIsIG1iclJlZnVuZCkKICAgIGl0eG5fbmV4dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0NDYKICAgIC8vIGFtb3VudDogVXNlckFsbG9jYXRpb25NQlIsCiAgICBpbnRjIDQgLy8gMjUzMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQ0NC00NDcKICAgIC8vIGNvbnN0IG1iclJlZnVuZCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHJlY2VpdmVyOiBjcmVhdG9yLAogICAgLy8gICBhbW91bnQ6IFVzZXJBbGxvY2F0aW9uTUJSLAogICAgLy8gfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDQ5CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHhmZXIsIG1iclJlZnVuZCkKICAgIGl0eG5fc3VibWl0CgpyZWNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHJlY2xhaW1zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgcmVjbGFpbVJld2FyZHNfd2hpbGVfdG9wQDIKCnJlY2xhaW1SZXdhcmRzX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0NTEtNDU2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvciwKICAgIC8vICAgICBhbW91bnQ6IHVzZXJBbGxvY2F0aW9uICsgVXNlckFsbG9jYXRpb25NQlIsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGFtb3VudDogdXNlckFsbG9jYXRpb24gKyBVc2VyQWxsb2NhdGlvbk1CUiwKICAgIGludGMgNCAvLyAyNTMwMAogICAgKwogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQ1MS00NTUKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBjcmVhdG9yLAogICAgLy8gICAgIGFtb3VudDogdXNlckFsbG9jYXRpb24gKyBVc2VyQWxsb2NhdGlvbk1CUiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDUxLTQ1NgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IGNyZWF0b3IsCiAgICAvLyAgICAgYW1vdW50OiB1c2VyQWxsb2NhdGlvbiArIFVzZXJBbGxvY2F0aW9uTUJSLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBiIHJlY2xhaW1SZXdhcmRzX2FmdGVyX2lmX2Vsc2VAOQoKcmVjbGFpbVJld2FyZHNfYWZ0ZXJfd2hpbGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQxMwogICAgLy8gcmVjbGFpbVJld2FyZHMoaWQ6IHVpbnQ2NCwgcmVjbGFpbXM6IEFsbG9jYXRpb25SZWNsYWltRGV0YWlsc1tdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6OkFraXRhQmFzZUNvbnRyYWN0LnVwZGF0ZUFraXRhREFPW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlQWtpdGFEQU86CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozOAogICAgLy8gdXBkYXRlQWtpdGFEQU8oYWtpdGFEQU86IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmdldEFraXRhREFPV2FsbGV0KCkuYWRkcmVzcywgRVJSX05PVF9BS0lUQV9EQU8pCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozMgogICAgLy8gY29uc3QgW3dhbGxldElEXSA9IG9wLkFwcEdsb2JhbC5nZXRFeFVpbnQ2NCh0aGlzLmFraXRhREFPLnZhbHVlLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c1dhbGxldCkpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlYyA0IC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozMgogICAgLy8gY29uc3QgW3dhbGxldElEXSA9IG9wLkFwcEdsb2JhbC5nZXRFeFVpbnQ2NCh0aGlzLmFraXRhREFPLnZhbHVlLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c1dhbGxldCkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGJ5dGVzICJ3YWxsZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozOQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWMgNCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDAKICAgIC8vIHRoaXMuYWtpdGFEQU8udmFsdWUgPSBha2l0YURBTwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM4CiAgICAvLyB1cGRhdGVBa2l0YURBTyhha2l0YURBTzogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnJbcm91dGluZ10oKSAtPiB2b2lkOgptYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL3Jld2FyZHMvYmFzZS50czo6QmFzZVJld2FyZHMubWJyCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjpDb250cmFjdFdpdGhPcHRJbi5vcHRJbltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjIzCiAgICAvLyBvcHRJbihwYXltZW50OiBndHhuLlBheW1lbnRUeG4sIGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjI1LTMyCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvb3B0aW4udHM6MjgKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvb3B0aW4udHM6MjUtMzIKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgdW5jb3ZlciAyCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czoyOQogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UsCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czoyNS0zMgogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIEludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM0LTQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM2CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM3CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czozNC0zOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM0LTQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czoyMwogICAgLy8gb3B0SW4ocGF5bWVudDogZ3R4bi5QYXltZW50VHhuLCBhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLm5ld0Rpc2J1cnNlbWVudElEKCkgLT4gdWludDY0OgpuZXdEaXNidXJzZW1lbnRJRDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIGNvbnN0IGlkID0gdGhpcy5kaXNidXJzZW1lbnRJRC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGRpc2J1cnNlbWVudElEID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMSwga2V5OiBSZXdhcmRzR2xvYmFsU3RhdGVLZXlEaXNidXJzZW1lbnRJRCB9KQogICAgYnl0ZWNfMyAvLyAiZGlzYnVyc2VtZW50X2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgaWQgPSB0aGlzLmRpc2J1cnNlbWVudElELnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRJRC52YWx1ZSArPSAxCiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBkaXNidXJzZW1lbnRJRCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEsIGtleTogUmV3YXJkc0dsb2JhbFN0YXRlS2V5RGlzYnVyc2VtZW50SUQgfSkKICAgIGJ5dGVjXzMgLy8gImRpc2J1cnNlbWVudF9pZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50SUQudmFsdWUgKz0gMQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHJldHVybiBpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvYmFzZS50czo6QmFzZVJld2FyZHMubWJyKHRpdGxlOiBieXRlcywgbm90ZTogYnl0ZXMpIC0+IGJ5dGVzOgpzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjctOAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBtYnIodGl0bGU6IHN0cmluZywgbm90ZTogc3RyaW5nKTogUmV3YXJkc01CUkRhdGEgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjEwCiAgICAvLyBkaXNidXJzZW1lbnRzOiBNaW5EaXNidXJzZW1lbnRzTUJSICsgKEJveENvc3RQZXJCeXRlICogKEJ5dGVzKHRpdGxlKS5sZW5ndGggKyBCeXRlcyhub3RlKS5sZW5ndGgpKSwKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgKwogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAqCiAgICBpbnRjIDUgLy8gMzUzMDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2Jhc2UudHM6OS0xMgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgZGlzYnVyc2VtZW50czogTWluRGlzYnVyc2VtZW50c01CUiArIChCb3hDb3N0UGVyQnl0ZSAqIChCeXRlcyh0aXRsZSkubGVuZ3RoICsgQnl0ZXMobm90ZSkubGVuZ3RoKSksCiAgICAvLyAgIHVzZXJBbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25NQlIKICAgIC8vIH0KICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2Jhc2UudHM6MTEKICAgIC8vIHVzZXJBbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25NQlIKICAgIGludGMgNCAvLyAyNTMwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvYmFzZS50czo5LTEyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBkaXNidXJzZW1lbnRzOiBNaW5EaXNidXJzZW1lbnRzTUJSICsgKEJveENvc3RQZXJCeXRlICogKEJ5dGVzKHRpdGxlKS5sZW5ndGggKyBCeXRlcyhub3RlKS5sZW5ndGgpKSwKICAgIC8vICAgdXNlckFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbk1CUgogICAgLy8gfQogICAgaXRvYgogICAgY29uY2F0CiAgICByZXRzdWIK\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"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\",\"clear\":\"C4EBQw==\"},\"events\":[],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n// Type definitions for ARC-56 structs\n\nexport type DisbursementDetails = {\n creator: string,\n finalized: boolean,\n title: string,\n amount: bigint,\n timeToUnlock: bigint,\n expiration: bigint,\n allocations: bigint,\n distributed: bigint,\n note: string\n}\n\n\n/**\n * Converts the ABI tuple representation of a DisbursementDetails to the struct representation\n */\nexport function DisbursementDetailsFromTuple(abiTuple: [string, boolean, string, bigint, bigint, bigint, bigint, bigint, string]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.DisbursementDetails, APP_SPEC.structs) as DisbursementDetails\n}\n\nexport type RewardsMbrData = {\n disbursements: bigint,\n userAllocations: bigint\n}\n\n\n/**\n * Converts the ABI tuple representation of a RewardsMBRData to the struct representation\n */\nexport function RewardsMbrDataFromTuple(abiTuple: [bigint, bigint]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.RewardsMBRData, APP_SPEC.structs) as RewardsMbrData\n}\n\nexport type UserAllocationsKey = {\n address: string,\n asset: bigint,\n disbursementId: bigint\n}\n\n\n/**\n * Converts the ABI tuple representation of a UserAllocationsKey to the struct representation\n */\nexport function UserAllocationsKeyFromTuple(abiTuple: [string, bigint, bigint]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.UserAllocationsKey, APP_SPEC.structs) as UserAllocationsKey\n}\n\n/**\n * The argument types for the Rewards contract\n */\nexport type RewardsArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'create(string,uint64)void': {\n version: string\n akitaDao: bigint | number\n }\n 'createDisbursement(pay,string,uint64,uint64,string)uint64': {\n mbrPayment: AppMethodCallTransactionArgument\n title: string\n timeToUnlock: bigint | number\n expiration: bigint | number\n note: string\n }\n 'editDisbursement(uint64,string,uint64,uint64,string)void': {\n id: bigint | number\n title: string\n timeToUnlock: bigint | number\n expiration: bigint | number\n note: string\n }\n 'createUserAllocations(pay,uint64,(address,uint64)[])void': {\n payment: AppMethodCallTransactionArgument\n id: bigint | number\n allocations: [string, bigint | number][]\n }\n 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void': {\n mbrPayment: AppMethodCallTransactionArgument\n assetXfer: AppMethodCallTransactionArgument\n id: bigint | number\n allocations: [string, bigint | number][]\n }\n 'finalizeDisbursement(uint64)void': {\n id: bigint | number\n }\n 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64': {\n mbrPayment: AppMethodCallTransactionArgument\n timeToUnlock: bigint | number\n expiration: bigint | number\n allocations: [string, bigint | number][]\n }\n 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64': {\n mbrPayment: AppMethodCallTransactionArgument\n assetXfer: AppMethodCallTransactionArgument\n timeToUnlock: bigint | number\n expiration: bigint | number\n allocations: [string, bigint | number][]\n }\n 'claimRewards((uint64,uint64)[])void': {\n rewards: [bigint | number, bigint | number][]\n }\n 'reclaimRewards(uint64,(address,uint64)[])void': {\n id: bigint | number\n reclaims: [string, bigint | number][]\n }\n 'updateAkitaDAO(uint64)void': {\n akitaDao: bigint | number\n }\n 'opUp()void': Record<string, never>\n 'mbr(string,string)(uint64,uint64)': {\n title: string\n note: string\n }\n 'optIn(pay,uint64)void': {\n /**\n * The payment transaction\n */\n payment: AppMethodCallTransactionArgument\n /**\n * The asset to be opted into\n */\n asset: bigint | number\n }\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'create(string,uint64)void': [version: string, akitaDao: bigint | number]\n 'createDisbursement(pay,string,uint64,uint64,string)uint64': [mbrPayment: AppMethodCallTransactionArgument, title: string, timeToUnlock: bigint | number, expiration: bigint | number, note: string]\n 'editDisbursement(uint64,string,uint64,uint64,string)void': [id: bigint | number, title: string, timeToUnlock: bigint | number, expiration: bigint | number, note: string]\n 'createUserAllocations(pay,uint64,(address,uint64)[])void': [payment: AppMethodCallTransactionArgument, id: bigint | number, allocations: [string, bigint | number][]]\n 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void': [mbrPayment: AppMethodCallTransactionArgument, assetXfer: AppMethodCallTransactionArgument, id: bigint | number, allocations: [string, bigint | number][]]\n 'finalizeDisbursement(uint64)void': [id: bigint | number]\n 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64': [mbrPayment: AppMethodCallTransactionArgument, timeToUnlock: bigint | number, expiration: bigint | number, allocations: [string, bigint | number][]]\n 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64': [mbrPayment: AppMethodCallTransactionArgument, assetXfer: AppMethodCallTransactionArgument, timeToUnlock: bigint | number, expiration: bigint | number, allocations: [string, bigint | number][]]\n 'claimRewards((uint64,uint64)[])void': [rewards: [bigint | number, bigint | number][]]\n 'reclaimRewards(uint64,(address,uint64)[])void': [id: bigint | number, reclaims: [string, bigint | number][]]\n 'updateAkitaDAO(uint64)void': [akitaDao: bigint | number]\n 'opUp()void': []\n 'mbr(string,string)(uint64,uint64)': [title: string, note: string]\n 'optIn(pay,uint64)void': [payment: AppMethodCallTransactionArgument, asset: bigint | number]\n }\n}\n\n/**\n * The return type for each method\n */\nexport type RewardsReturns = {\n 'create(string,uint64)void': void\n 'createDisbursement(pay,string,uint64,uint64,string)uint64': bigint\n 'editDisbursement(uint64,string,uint64,uint64,string)void': void\n 'createUserAllocations(pay,uint64,(address,uint64)[])void': void\n 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void': void\n 'finalizeDisbursement(uint64)void': void\n 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64': bigint\n 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64': bigint\n 'claimRewards((uint64,uint64)[])void': void\n 'reclaimRewards(uint64,(address,uint64)[])void': void\n 'updateAkitaDAO(uint64)void': void\n 'opUp()void': void\n 'mbr(string,string)(uint64,uint64)': RewardsMbrData\n 'optIn(pay,uint64)void': void\n}\n\n/**\n * Defines the types of available calls and state of the Rewards smart contract.\n */\nexport type RewardsTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'create(string,uint64)void' | 'create', {\n argsObj: RewardsArgs['obj']['create(string,uint64)void']\n argsTuple: RewardsArgs['tuple']['create(string,uint64)void']\n returns: RewardsReturns['create(string,uint64)void']\n }>\n & Record<'createDisbursement(pay,string,uint64,uint64,string)uint64' | 'createDisbursement', {\n argsObj: RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64']\n argsTuple: RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']\n returns: RewardsReturns['createDisbursement(pay,string,uint64,uint64,string)uint64']\n }>\n & Record<'editDisbursement(uint64,string,uint64,uint64,string)void' | 'editDisbursement', {\n argsObj: RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void']\n argsTuple: RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']\n returns: RewardsReturns['editDisbursement(uint64,string,uint64,uint64,string)void']\n }>\n & Record<'createUserAllocations(pay,uint64,(address,uint64)[])void' | 'createUserAllocations', {\n argsObj: RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']\n returns: RewardsReturns['createUserAllocations(pay,uint64,(address,uint64)[])void']\n }>\n & Record<'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void' | 'createAsaUserAllocations', {\n argsObj: RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']\n returns: RewardsReturns['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']\n }>\n & Record<'finalizeDisbursement(uint64)void' | 'finalizeDisbursement', {\n argsObj: RewardsArgs['obj']['finalizeDisbursement(uint64)void']\n argsTuple: RewardsArgs['tuple']['finalizeDisbursement(uint64)void']\n returns: RewardsReturns['finalizeDisbursement(uint64)void']\n }>\n & Record<'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64' | 'createInstantDisbursement', {\n argsObj: RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']\n argsTuple: RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']\n returns: RewardsReturns['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']\n }>\n & Record<'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64' | 'createInstantAsaDisbursement', {\n argsObj: RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']\n argsTuple: RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']\n returns: RewardsReturns['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']\n }>\n & Record<'claimRewards((uint64,uint64)[])void' | 'claimRewards', {\n argsObj: RewardsArgs['obj']['claimRewards((uint64,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']\n returns: RewardsReturns['claimRewards((uint64,uint64)[])void']\n }>\n & Record<'reclaimRewards(uint64,(address,uint64)[])void' | 'reclaimRewards', {\n argsObj: RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']\n returns: RewardsReturns['reclaimRewards(uint64,(address,uint64)[])void']\n }>\n & Record<'updateAkitaDAO(uint64)void' | 'updateAkitaDAO', {\n argsObj: RewardsArgs['obj']['updateAkitaDAO(uint64)void']\n argsTuple: RewardsArgs['tuple']['updateAkitaDAO(uint64)void']\n returns: RewardsReturns['updateAkitaDAO(uint64)void']\n }>\n & Record<'opUp()void' | 'opUp', {\n argsObj: RewardsArgs['obj']['opUp()void']\n argsTuple: RewardsArgs['tuple']['opUp()void']\n returns: RewardsReturns['opUp()void']\n }>\n & Record<'mbr(string,string)(uint64,uint64)' | 'mbr', {\n argsObj: RewardsArgs['obj']['mbr(string,string)(uint64,uint64)']\n argsTuple: RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']\n returns: RewardsReturns['mbr(string,string)(uint64,uint64)']\n }>\n & Record<'optIn(pay,uint64)void' | 'optIn', {\n argsObj: RewardsArgs['obj']['optIn(pay,uint64)void']\n argsTuple: RewardsArgs['tuple']['optIn(pay,uint64)void']\n returns: RewardsReturns['optIn(pay,uint64)void']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * the disbursement id cursor\n */\n disbursementId: bigint\n /**\n * the current version of the contract\n */\n version: string\n /**\n * the app ID of the Akita DAO\n */\n akitaDao: bigint\n }\n maps: {}\n }\n box: {\n keys: {}\n maps: {\n /**\n * the disbursement map of tokens\n \n the key is the uint64 id of the disbursement\n the value is the details of the disbursement\n\n */\n disbursements: Map<bigint | number, DisbursementDetails>\n /**\n * the user allocations of disbursements\n \n the key is the address of the qualified account with the uint64 id of the disbursement\n the value is the amount they are owed\n\n */\n userAllocations: Map<UserAllocationsKey, bigint>\n }\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type RewardsSignatures = keyof RewardsTypes['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type RewardsNonVoidMethodSignatures = keyof RewardsTypes['methods'] extends infer T ? T extends keyof RewardsTypes['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the Rewards smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends RewardsSignatures> = RewardsTypes['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the Rewards smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends RewardsSignatures> = RewardsTypes['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = RewardsTypes['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = RewardsTypes['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type RewardsCreateCallParams =\n | Expand<CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n | Expand<CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & {method: 'create(string,uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type RewardsDeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: RewardsCreateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Rewards smart contract\n */\nexport abstract class RewardsParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends RewardsCreateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'create':\n case 'create(string,uint64)void':\n return RewardsParamsFactory.create.create(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs create ABI call params for the Rewards smart contract using the create(string,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n create(params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} {\n return {\n ...params,\n method: 'create(string,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.version, params.args.akitaDao],\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the createDisbursement(pay,string,uint64,uint64,string)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createDisbursement(params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createDisbursement(pay,string,uint64,uint64,string)uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.title, params.args.timeToUnlock, params.args.expiration, params.args.note],\n }\n }\n /**\n * Constructs a no op call for the editDisbursement(uint64,string,uint64,uint64,string)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static editDisbursement(params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'editDisbursement(uint64,string,uint64,uint64,string)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.id, params.args.title, params.args.timeToUnlock, params.args.expiration, params.args.note],\n }\n }\n /**\n * Constructs a no op call for the createUserAllocations(pay,uint64,(address,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createUserAllocations(params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createUserAllocations(pay,uint64,(address,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.id, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createAsaUserAllocations(params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.assetXfer, params.args.id, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the finalizeDisbursement(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static finalizeDisbursement(params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'finalizeDisbursement(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.id],\n }\n }\n /**\n * Constructs a no op call for the createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createInstantDisbursement(params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.timeToUnlock, params.args.expiration, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createInstantAsaDisbursement(params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.assetXfer, params.args.timeToUnlock, params.args.expiration, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the claimRewards((uint64,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static claimRewards(params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'claimRewards((uint64,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.rewards],\n }\n }\n /**\n * Constructs a no op call for the reclaimRewards(uint64,(address,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static reclaimRewards(params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'reclaimRewards(uint64,(address,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.id, params.args.reclaims],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAO(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDao(params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAO(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao],\n }\n }\n /**\n * Constructs a no op call for the opUp()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static opUp(params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'opUp()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the mbr(string,string)(uint64,uint64) ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static mbr(params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'mbr(string,string)(uint64,uint64)' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.title, params.args.note],\n }\n }\n /**\n * Constructs a no op call for the optIn(pay,uint64)void ABI method\n *\n * optin tells the contract to opt into an asa\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optIn(params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'optIn(pay,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.asset],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Rewards smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class RewardsFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `RewardsFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new RewardsClient(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new RewardsClient(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the Rewards smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: RewardsDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method ? RewardsParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (RewardsCreateCallParams & { args: Uint8Array[] }) : undefined,\n })\n return { result: result.result, appClient: new RewardsClient(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Rewards smart contract using the create(string,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n create: (params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.params.create(RewardsParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Rewards smart contract using the create(string,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n create: (params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.createTransaction.create(RewardsParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Rewards smart contract using an ABI method call using the create(string,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n create: async (params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appFactory.send.create(RewardsParamsFactory.create.create(params))\n return { result: { ...result.result, return: result.result.return as unknown as (undefined | RewardsReturns['create(string,uint64)void']) }, appClient: new RewardsClient(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the Rewards smart contract\n */\nexport class RewardsClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `RewardsClient`\n *\n * @param appClient An `AppClient` instance which has been created with the Rewards app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `RewardsClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends RewardsNonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `RewardsClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<RewardsClient> {\n return new RewardsClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `RewardsClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<RewardsClient> {\n return new RewardsClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createDisbursement(pay,string,uint64,uint64,string)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createDisbursement: (params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `editDisbursement(uint64,string,uint64,uint64,string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n editDisbursement: (params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.editDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createUserAllocations(pay,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createUserAllocations: (params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createAsaUserAllocations: (params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createAsaUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `finalizeDisbursement(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n finalizeDisbursement: (params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.finalizeDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createInstantDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createInstantDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createInstantAsaDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createInstantAsaDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `claimRewards((uint64,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n claimRewards: (params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.claimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `reclaimRewards(uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n reclaimRewards: (params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.reclaimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDao: (params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n opUp: (params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(RewardsParamsFactory.opUp(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n mbr: (params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.mbr(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optIn: (params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.optIn(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createDisbursement(pay,string,uint64,uint64,string)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createDisbursement: (params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `editDisbursement(uint64,string,uint64,uint64,string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n editDisbursement: (params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.editDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createUserAllocations(pay,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createUserAllocations: (params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createAsaUserAllocations: (params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createAsaUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `finalizeDisbursement(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n finalizeDisbursement: (params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.finalizeDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createInstantDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createInstantDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createInstantAsaDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createInstantAsaDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `claimRewards((uint64,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n claimRewards: (params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.claimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `reclaimRewards(uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n reclaimRewards: (params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.reclaimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDao: (params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n opUp: (params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.opUp(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n mbr: (params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.mbr(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optIn: (params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.optIn(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createDisbursement(pay,string,uint64,uint64,string)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createDisbursement: async (params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createDisbursement(pay,string,uint64,uint64,string)uint64'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `editDisbursement(uint64,string,uint64,uint64,string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n editDisbursement: async (params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.editDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['editDisbursement(uint64,string,uint64,uint64,string)void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createUserAllocations(pay,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createUserAllocations: async (params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createUserAllocations(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createUserAllocations(pay,uint64,(address,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createAsaUserAllocations: async (params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createAsaUserAllocations(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `finalizeDisbursement(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n finalizeDisbursement: async (params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.finalizeDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['finalizeDisbursement(uint64)void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createInstantDisbursement: async (params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createInstantDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createInstantAsaDisbursement: async (params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createInstantAsaDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `claimRewards((uint64,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n claimRewards: async (params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.claimRewards(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['claimRewards((uint64,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `reclaimRewards(uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n reclaimRewards: async (params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.reclaimRewards(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['reclaimRewards(uint64,(address,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDao: async (params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.updateAkitaDao(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['updateAkitaDAO(uint64)void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n opUp: async (params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.opUp(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['opUp()void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n mbr: async (params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.mbr(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['mbr(string,string)(uint64,uint64)'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optIn: async (params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.optIn(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['optIn(pay,uint64)void'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new RewardsClient(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async mbr(params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']>) {\n const result = await this.appClient.send.call(RewardsParamsFactory.mbr(params))\n return result.return as unknown as RewardsReturns['mbr(string,string)(uint64,uint64)']\n }\n\n /**\n * Methods to access state for the current Rewards app\n */\n state = {\n /**\n * Methods to access global state for the current Rewards app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n disbursementId: result.disbursementID,\n version: result.version,\n akitaDao: result.akitaDAO,\n }\n },\n /**\n * Get the current value of the disbursementID key in global state\n */\n disbursementId: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"disbursementID\")) as bigint | undefined },\n /**\n * Get the current value of the version key in global state\n */\n version: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"version\")) as string | undefined },\n /**\n * Get the current value of the akitaDAO key in global state\n */\n akitaDao: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAO\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current Rewards app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n }\n },\n /**\n * Get values from the disbursements map in box state\n */\n disbursements: {\n /**\n * Get all current values of the disbursements map in box state\n */\n getMap: async (): Promise<Map<bigint, DisbursementDetails>> => { return (await this.appClient.state.box.getMap(\"disbursements\")) as Map<bigint, DisbursementDetails> },\n /**\n * Get a current value of the disbursements map by key from box state\n */\n value: async (key: bigint | number): Promise<DisbursementDetails | undefined> => { return await this.appClient.state.box.getMapValue(\"disbursements\", key) as DisbursementDetails | undefined },\n },\n /**\n * Get values from the userAllocations map in box state\n */\n userAllocations: {\n /**\n * Get all current values of the userAllocations map in box state\n */\n getMap: async (): Promise<Map<UserAllocationsKey, bigint>> => { return (await this.appClient.state.box.getMap(\"userAllocations\")) as Map<UserAllocationsKey, bigint> },\n /**\n * Get a current value of the userAllocations map by key from box state\n */\n value: async (key: UserAllocationsKey): Promise<bigint | undefined> => { return await this.appClient.state.box.getMapValue(\"userAllocations\", key) as bigint | undefined },\n },\n },\n }\n\n public newGroup(): RewardsComposer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a createDisbursement(pay,string,uint64,uint64,string)uint64 method call against the Rewards contract\n */\n createDisbursement(params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createDisbursement(params)))\n resultMappers.push((v) => client.decodeReturnValue('createDisbursement(pay,string,uint64,uint64,string)uint64', v))\n return this\n },\n /**\n * Add a editDisbursement(uint64,string,uint64,uint64,string)void method call against the Rewards contract\n */\n editDisbursement(params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.editDisbursement(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a createUserAllocations(pay,uint64,(address,uint64)[])void method call against the Rewards contract\n */\n createUserAllocations(params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createUserAllocations(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void method call against the Rewards contract\n */\n createAsaUserAllocations(params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createAsaUserAllocations(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a finalizeDisbursement(uint64)void method call against the Rewards contract\n */\n finalizeDisbursement(params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.finalizeDisbursement(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64 method call against the Rewards contract\n */\n createInstantDisbursement(params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createInstantDisbursement(params)))\n resultMappers.push((v) => client.decodeReturnValue('createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64', v))\n return this\n },\n /**\n * Add a createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64 method call against the Rewards contract\n */\n createInstantAsaDisbursement(params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createInstantAsaDisbursement(params)))\n resultMappers.push((v) => client.decodeReturnValue('createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64', v))\n return this\n },\n /**\n * Add a claimRewards((uint64,uint64)[])void method call against the Rewards contract\n */\n claimRewards(params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.claimRewards(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a reclaimRewards(uint64,(address,uint64)[])void method call against the Rewards contract\n */\n reclaimRewards(params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.reclaimRewards(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a updateAkitaDAO(uint64)void method call against the Rewards contract\n */\n updateAkitaDao(params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDao(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a opUp()void method call against the Rewards contract\n */\n opUp(params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.opUp(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a mbr(string,string)(uint64,uint64) method call against the Rewards contract\n */\n mbr(params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.mbr(params)))\n resultMappers.push((v) => client.decodeReturnValue('mbr(string,string)(uint64,uint64)', v))\n return this\n },\n /**\n * Add a optIn(pay,uint64)void method call against the Rewards contract\n */\n optIn(params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a clear state call to the Rewards contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as RewardsComposer\n }\n}\nexport type RewardsComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the createDisbursement(pay,string,uint64,uint64,string)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createDisbursement(params?: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']>): RewardsComposer<[...TReturns, RewardsReturns['createDisbursement(pay,string,uint64,uint64,string)uint64'] | undefined]>\n\n /**\n * Calls the editDisbursement(uint64,string,uint64,uint64,string)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n editDisbursement(params?: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']>): RewardsComposer<[...TReturns, RewardsReturns['editDisbursement(uint64,string,uint64,uint64,string)void'] | undefined]>\n\n /**\n * Calls the createUserAllocations(pay,uint64,(address,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createUserAllocations(params?: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['createUserAllocations(pay,uint64,(address,uint64)[])void'] | undefined]>\n\n /**\n * Calls the createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createAsaUserAllocations(params?: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | undefined]>\n\n /**\n * Calls the finalizeDisbursement(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n finalizeDisbursement(params?: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']>): RewardsComposer<[...TReturns, RewardsReturns['finalizeDisbursement(uint64)void'] | undefined]>\n\n /**\n * Calls the createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createInstantDisbursement(params?: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']>): RewardsComposer<[...TReturns, RewardsReturns['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | undefined]>\n\n /**\n * Calls the createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createInstantAsaDisbursement(params?: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']>): RewardsComposer<[...TReturns, RewardsReturns['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | undefined]>\n\n /**\n * Calls the claimRewards((uint64,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claimRewards(params?: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['claimRewards((uint64,uint64)[])void'] | undefined]>\n\n /**\n * Calls the reclaimRewards(uint64,(address,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n reclaimRewards(params?: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['reclaimRewards(uint64,(address,uint64)[])void'] | undefined]>\n\n /**\n * Calls the updateAkitaDAO(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDao(params?: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']>): RewardsComposer<[...TReturns, RewardsReturns['updateAkitaDAO(uint64)void'] | undefined]>\n\n /**\n * Calls the opUp()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n opUp(params?: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']>): RewardsComposer<[...TReturns, RewardsReturns['opUp()void'] | undefined]>\n\n /**\n * Calls the mbr(string,string)(uint64,uint64) ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n mbr(params?: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']>): RewardsComposer<[...TReturns, RewardsReturns['mbr(string,string)(uint64,uint64)'] | undefined]>\n\n /**\n * Calls the optIn(pay,uint64)void ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optIn(params?: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']>): RewardsComposer<[...TReturns, RewardsReturns['optIn(pay,uint64)void'] | undefined]>\n\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): RewardsComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): RewardsComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<RewardsComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<RewardsComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<RewardsComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<RewardsComposerResults<TReturns>>\n}\nexport type RewardsComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n"]}
1
+ {"version":3,"sources":["/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-EN3NMZTZ.js","../src/rewards/index.ts","../src/generated/RewardsClient.ts"],"names":[],"mappings":"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","file":"/Users/kylebreeding/akita/akita-sc/projects/akita-sdk/dist/chunk-EN3NMZTZ.js","sourcesContent":[null,"import { microAlgo } from \"@algorandfoundation/algokit-utils\";\nimport { BaseSDK } from \"../base\";\nimport { ENV_VAR_NAMES } from \"../config\";\nimport {\n RewardsClient,\n RewardsFactory,\n RewardsComposer,\n DisbursementDetails,\n RewardsMbrData,\n} from '../generated/RewardsClient';\nimport { MaybeSigner, NewContractSDKParams } from \"../types\";\nimport {\n GetMbrParams,\n GetDisbursementParams,\n GetUserAllocationParams,\n RewardsGlobalState,\n OptInAssetParams,\n CreateDisbursementParams,\n EditDisbursementParams,\n CreateUserAllocationsParams,\n CreateAsaUserAllocationsParams,\n FinalizeDisbursementParams,\n CreateInstantDisbursementParams,\n CreateInstantAsaDisbursementParams,\n ClaimRewardsParams,\n ReclaimRewardsParams,\n UpdateAkitaDaoParams,\n UserAllocation,\n} from \"./types\";\n\nexport * from \"./types\";\n\n/** Base references available per transaction */\nconst BASE_REFERENCES = 8;\n/** References added by each opUp call */\nconst REFERENCES_PER_OPUP = 8;\n\n/**\n * SDK for interacting with the Rewards contract.\n * Use this to create disbursements, manage allocations, and claim/reclaim rewards.\n */\nexport class RewardsSDK extends BaseSDK<RewardsClient> {\n\n constructor(params: NewContractSDKParams) {\n super({ factory: RewardsFactory, ...params }, ENV_VAR_NAMES.REWARDS_APP_ID);\n }\n\n // ========== OpUp Helpers ==========\n\n /**\n * Calculates the number of opUp calls needed for a given reference count.\n * @param referencesNeeded - Number of references needed for the operation\n * @param baseReferences - Base references available (default 8)\n * @returns Number of opUp calls needed (0 if none needed)\n */\n private calculateOpUpsNeeded(referencesNeeded: number, baseReferences = BASE_REFERENCES): number {\n if (referencesNeeded <= baseReferences) {\n return 0;\n }\n return Math.ceil((referencesNeeded - baseReferences) / REFERENCES_PER_OPUP);\n }\n\n /**\n * Adds the required number of opUp calls to a transaction group.\n * Each opUp call adds 8 more reference slots to the group.\n */\n private addOpUps<T extends unknown[]>(\n group: RewardsComposer<T>,\n count: number,\n sendParams: { sender?: string | import('algosdk').Address; signer?: import('algosdk').TransactionSigner }\n ): void {\n for (let i = 0; i < count; i++) {\n group.opUp({\n ...sendParams,\n args: {},\n // Add unique note to avoid duplicate transaction issues\n note: i > 0 ? `opUp-${i}` : undefined,\n });\n }\n }\n\n // ========== Read Methods ==========\n\n /**\n * Gets the current global state of the rewards contract.\n */\n async getState(): Promise<RewardsGlobalState> {\n const state = await this.client.state.global.getAll();\n\n return {\n disbursementId: state.disbursementId ?? 1n,\n version: state.version ?? '',\n akitaDao: state.akitaDao ?? 0n,\n };\n }\n\n /**\n * Gets the MBR (Minimum Balance Requirement) data for creating disbursements.\n * @param title - The disbursement title\n * @param note - The disbursement note\n */\n async mbr({ title, note }: GetMbrParams): Promise<RewardsMbrData> {\n return await this.client.mbr({ args: { title, note } });\n }\n\n /**\n * Gets a specific disbursement by ID.\n */\n async getDisbursement({ id }: GetDisbursementParams): Promise<DisbursementDetails> {\n const disbursement = await this.client.state.box.disbursements.value(id);\n\n if (disbursement === undefined) {\n throw new Error(`Disbursement ${id} not found`);\n }\n\n return disbursement;\n }\n\n /**\n * Gets all disbursements as a map.\n */\n async getDisbursements(): Promise<Map<bigint, DisbursementDetails>> {\n const disbursements = await this.client.state.box.disbursements.getMap();\n return new Map(Array.from(disbursements.entries()).map(([key, value]) => [BigInt(key), value]));\n }\n\n /**\n * Gets a user's allocation for a specific disbursement and asset.\n */\n async getUserAllocation({ address, disbursementId, asset }: GetUserAllocationParams): Promise<bigint> {\n const allocation = await this.client.state.box.userAllocations.value({\n address,\n disbursementId: BigInt(disbursementId),\n asset: BigInt(asset),\n });\n\n if (allocation === undefined) {\n throw new Error(`Allocation not found for address ${address}, disbursement ${disbursementId}`);\n }\n\n return allocation;\n }\n\n /**\n * Checks if a user has an allocation for a specific disbursement and asset.\n */\n async hasAllocation({ address, disbursementId, asset }: GetUserAllocationParams): Promise<boolean> {\n try {\n const allocation = await this.client.state.box.userAllocations.value({\n address,\n disbursementId: BigInt(disbursementId),\n asset: BigInt(asset),\n });\n return allocation !== undefined;\n } catch {\n return false;\n }\n }\n\n // ========== Write Methods ==========\n\n /**\n * Opts the rewards contract into an asset.\n */\n async optIn({ sender, signer, asset }: OptInAssetParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Asset opt-in costs 100,000 microAlgo\n const payment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(100_000),\n receiver: this.client.appAddress,\n });\n\n await this.client.send.optIn({\n ...sendParams,\n args: {\n payment,\n asset,\n },\n });\n }\n\n /**\n * Creates a new disbursement.\n * Returns the disbursement ID.\n */\n async createDisbursement({\n sender,\n signer,\n title,\n timeToUnlock,\n expiration,\n note,\n }: CreateDisbursementParams): Promise<bigint> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get MBR for this disbursement\n const mbrData = await this.mbr({ title, note });\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrData.disbursements),\n receiver: this.client.appAddress,\n });\n\n const { return: disbursementId } = await this.client.send.createDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n title,\n timeToUnlock,\n expiration,\n note,\n },\n });\n\n if (disbursementId === undefined) {\n throw new Error('Failed to create disbursement');\n }\n\n return disbursementId;\n }\n\n /**\n * Edits an existing disbursement (only before finalization).\n */\n async editDisbursement({\n sender,\n signer,\n id,\n title,\n timeToUnlock,\n expiration,\n note,\n }: EditDisbursementParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.editDisbursement({\n ...sendParams,\n args: {\n id,\n title,\n timeToUnlock,\n expiration,\n note,\n },\n });\n }\n\n /**\n * Helper to format allocations for the contract.\n */\n private formatAllocations(allocations: UserAllocation[]): [string, bigint | number][] {\n return allocations.map(a => [a.address, a.amount]);\n }\n\n /**\n * Calculates the total amount from allocations.\n */\n private sumAllocations(allocations: UserAllocation[]): bigint {\n return allocations.reduce((sum, a) => sum + BigInt(a.amount), 0n);\n }\n\n /**\n * Creates ALGO allocations for a disbursement.\n * The payment includes both MBR for the boxes and the actual ALGO to distribute.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createUserAllocations({\n sender,\n signer,\n id,\n allocations,\n }: CreateUserAllocationsParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get disbursement to calculate MBR\n const disbursement = await this.getDisbursement({ id });\n const mbrData = await this.mbr({ title: disbursement.title, note: disbursement.note });\n\n // MBR per allocation + total ALGO to distribute\n const mbrAmount = mbrData.userAllocations * BigInt(allocations.length);\n const totalAmount = this.sumAllocations(allocations);\n\n const payment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount + totalAmount),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box\n const referencesNeeded = allocations.length + 1;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n // No opUps needed, send directly\n await this.client.send.createUserAllocations({\n ...sendParams,\n args: {\n payment,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n } else {\n // Use transaction group with opUps\n const group = this.client.newGroup();\n\n group.createUserAllocations({\n ...sendParams,\n args: {\n payment,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Creates ASA allocations for a disbursement.\n * Requires both an MBR payment and an asset transfer.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createAsaUserAllocations({\n sender,\n signer,\n id,\n asset,\n allocations,\n }: CreateAsaUserAllocationsParams): Promise<void> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // Get disbursement to calculate MBR\n const disbursement = await this.getDisbursement({ id });\n const mbrData = await this.mbr({ title: disbursement.title, note: disbursement.note });\n\n const mbrAmount = mbrData.userAllocations * BigInt(allocations.length);\n const totalAmount = this.sumAllocations(allocations);\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount),\n receiver: this.client.appAddress,\n });\n\n const assetXfer = await this.client.algorand.createTransaction.assetTransfer({\n ...sendParams,\n amount: totalAmount,\n assetId: BigInt(asset),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box, plus 1 for asset\n const referencesNeeded = allocations.length + 2;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n await this.client.send.createAsaUserAllocations({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n } else {\n const group = this.client.newGroup();\n\n group.createAsaUserAllocations({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n id,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Finalizes a disbursement, locking it for distribution.\n */\n async finalizeDisbursement({ sender, signer, id }: FinalizeDisbursementParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.finalizeDisbursement({\n ...sendParams,\n args: { id },\n });\n }\n\n /**\n * Creates and finalizes an ALGO disbursement in a single call.\n * Returns the disbursement ID.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createInstantDisbursement({\n sender,\n signer,\n timeToUnlock,\n expiration,\n allocations,\n }: CreateInstantDisbursementParams): Promise<bigint> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // MinDisbursementsMBR (35,300) + UserAllocationMBR (25,300) per allocation\n const MIN_DISBURSEMENTS_MBR = 35_300n;\n const USER_ALLOCATION_MBR = 25_300n;\n\n const mbrAmount = MIN_DISBURSEMENTS_MBR + (USER_ALLOCATION_MBR * BigInt(allocations.length));\n const totalAmount = this.sumAllocations(allocations);\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount + totalAmount),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box\n const referencesNeeded = allocations.length + 1;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n let disbursementId: bigint | undefined;\n\n if (opUpsNeeded === 0) {\n const result = await this.client.send.createInstantDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n disbursementId = result.return;\n } else {\n const group = this.client.newGroup();\n\n group.createInstantDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n const result = await group.send(sendParams);\n disbursementId = result.returns?.[0];\n }\n\n if (disbursementId === undefined) {\n throw new Error('Failed to create instant disbursement');\n }\n\n return disbursementId;\n }\n\n /**\n * Creates and finalizes an ASA disbursement in a single call.\n * Returns the disbursement ID.\n * Automatically adds opUp calls for large allocation batches.\n */\n async createInstantAsaDisbursement({\n sender,\n signer,\n timeToUnlock,\n expiration,\n asset,\n allocations,\n }: CreateInstantAsaDisbursementParams): Promise<bigint> {\n const sendParams = this.getRequiredSendParams({ sender, signer });\n\n // MinDisbursementsMBR (35,300) + UserAllocationMBR (25,300) per allocation\n const MIN_DISBURSEMENTS_MBR = 35_300n;\n const USER_ALLOCATION_MBR = 25_300n;\n\n const mbrAmount = MIN_DISBURSEMENTS_MBR + (USER_ALLOCATION_MBR * BigInt(allocations.length));\n const totalAmount = this.sumAllocations(allocations);\n\n const mbrPayment = await this.client.algorand.createTransaction.payment({\n ...sendParams,\n amount: microAlgo(mbrAmount),\n receiver: this.client.appAddress,\n });\n\n const assetXfer = await this.client.algorand.createTransaction.assetTransfer({\n ...sendParams,\n amount: totalAmount,\n assetId: BigInt(asset),\n receiver: this.client.appAddress,\n });\n\n // Each allocation needs ~1 box reference, plus 1 for disbursement box, plus 1 for asset\n const referencesNeeded = allocations.length + 2;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n let disbursementId: bigint | undefined;\n\n if (opUpsNeeded === 0) {\n const result = await this.client.send.createInstantAsaDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n disbursementId = result.return;\n } else {\n const group = this.client.newGroup();\n\n group.createInstantAsaDisbursement({\n ...sendParams,\n args: {\n mbrPayment,\n assetXfer,\n timeToUnlock,\n expiration,\n allocations: this.formatAllocations(allocations),\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n const result = await group.send(sendParams);\n disbursementId = result.returns?.[0];\n }\n\n if (disbursementId === undefined) {\n throw new Error('Failed to create instant ASA disbursement');\n }\n\n return disbursementId;\n }\n\n /**\n * Claims rewards from one or more disbursements.\n * The caller claims their allocated rewards.\n * Automatically adds opUp calls for claiming from many disbursements.\n */\n async claimRewards({ sender, signer, rewards }: ClaimRewardsParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n // Format rewards as [id, asset] tuples\n const formattedRewards: [bigint | number, bigint | number][] = rewards.map(r => [r.id, r.asset]);\n\n // Each claim needs references for: disbursement box, allocation box, possibly asset\n // Plus inner transactions use references\n const referencesNeeded = rewards.length * 3;\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n await this.client.send.claimRewards({\n ...sendParams,\n // Extra fee for inner transactions (2 per claim: MBR refund + reward transfer)\n extraFee: microAlgo(2000 * rewards.length),\n args: {\n rewards: formattedRewards,\n },\n });\n } else {\n const group = this.client.newGroup();\n\n group.claimRewards({\n ...sendParams,\n extraFee: microAlgo(2000 * rewards.length),\n args: {\n rewards: formattedRewards,\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Reclaims unclaimed rewards after a disbursement has expired.\n * Only the disbursement creator can reclaim.\n * Automatically adds opUp calls for reclaiming many allocations.\n */\n async reclaimRewards({ sender, signer, id, reclaims }: ReclaimRewardsParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n // Format reclaims as [address, asset] tuples\n const formattedReclaims: [string, bigint | number][] = reclaims.map(r => [r.address, r.asset]);\n\n // Each reclaim needs references for: allocation box, possibly asset, receiver account\n const referencesNeeded = reclaims.length * 2 + 1; // +1 for disbursement box\n const opUpsNeeded = this.calculateOpUpsNeeded(referencesNeeded);\n\n if (opUpsNeeded === 0) {\n await this.client.send.reclaimRewards({\n ...sendParams,\n // Extra fee for inner transactions (2 per reclaim: asset transfer + MBR refund)\n extraFee: microAlgo(2000 * reclaims.length),\n args: {\n id,\n reclaims: formattedReclaims,\n },\n });\n } else {\n const group = this.client.newGroup();\n\n group.reclaimRewards({\n ...sendParams,\n extraFee: microAlgo(2000 * reclaims.length),\n args: {\n id,\n reclaims: formattedReclaims,\n },\n });\n\n this.addOpUps(group, opUpsNeeded, sendParams);\n\n await group.send(sendParams);\n }\n }\n\n /**\n * Updates the Akita DAO reference.\n */\n async updateAkitaDao({ sender, signer, akitaDao }: UpdateAkitaDaoParams): Promise<void> {\n const sendParams = this.getSendParams({ sender, signer });\n\n await this.client.send.updateAkitaDao({\n ...sendParams,\n args: { akitaDao },\n });\n }\n}\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"Rewards\",\"structs\":{\"DisbursementDetails\":[{\"name\":\"creator\",\"type\":\"address\"},{\"name\":\"finalized\",\"type\":\"bool\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"uint64\"},{\"name\":\"timeToUnlock\",\"type\":\"uint64\"},{\"name\":\"expiration\",\"type\":\"uint64\"},{\"name\":\"allocations\",\"type\":\"uint64\"},{\"name\":\"distributed\",\"type\":\"uint64\"},{\"name\":\"note\",\"type\":\"string\"}],\"RewardsMBRData\":[{\"name\":\"disbursements\",\"type\":\"uint64\"},{\"name\":\"userAllocations\",\"type\":\"uint64\"}],\"UserAllocationsKey\":[{\"name\":\"address\",\"type\":\"address\"},{\"name\":\"asset\",\"type\":\"uint64\"},{\"name\":\"disbursementId\",\"type\":\"uint64\"}]},\"methods\":[{\"name\":\"create\",\"args\":[{\"type\":\"string\",\"name\":\"version\"},{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[\"NoOp\"],\"call\":[]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createDisbursement\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"string\",\"name\":\"title\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"string\",\"name\":\"note\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"editDisbursement\",\"args\":[{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"string\",\"name\":\"title\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"string\",\"name\":\"note\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createUserAllocations\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\"},{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createAsaUserAllocations\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"axfer\",\"name\":\"assetXfer\"},{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"finalizeDisbursement\",\"args\":[{\"type\":\"uint64\",\"name\":\"id\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createInstantDisbursement\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"createInstantAsaDisbursement\",\"args\":[{\"type\":\"pay\",\"name\":\"mbrPayment\"},{\"type\":\"axfer\",\"name\":\"assetXfer\"},{\"type\":\"uint64\",\"name\":\"timeToUnlock\"},{\"type\":\"uint64\",\"name\":\"expiration\"},{\"type\":\"(address,uint64)[]\",\"name\":\"allocations\"}],\"returns\":{\"type\":\"uint64\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"claimRewards\",\"args\":[{\"type\":\"(uint64,uint64)[]\",\"name\":\"rewards\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"reclaimRewards\",\"args\":[{\"type\":\"uint64\",\"name\":\"id\"},{\"type\":\"(address,uint64)[]\",\"name\":\"reclaims\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"updateAkitaDAO\",\"args\":[{\"type\":\"uint64\",\"name\":\"akitaDAO\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"opUp\",\"args\":[],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[],\"recommendations\":{}},{\"name\":\"mbr\",\"args\":[{\"type\":\"string\",\"name\":\"title\"},{\"type\":\"string\",\"name\":\"note\"}],\"returns\":{\"type\":\"(uint64,uint64)\",\"struct\":\"RewardsMBRData\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"events\":[],\"recommendations\":{}},{\"name\":\"optIn\",\"args\":[{\"type\":\"pay\",\"name\":\"payment\",\"desc\":\"The payment transaction\"},{\"type\":\"uint64\",\"name\":\"asset\",\"desc\":\"The asset to be opted into\"}],\"returns\":{\"type\":\"void\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"optin tells the contract to opt into an asa\",\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":2,\"bytes\":1},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"disbursementID\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"ZGlzYnVyc2VtZW50X2lk\",\"desc\":\"the disbursement id cursor\"},\"version\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMString\",\"key\":\"dmVyc2lvbg==\",\"desc\":\"the current version of the contract\"},\"akitaDAO\":{\"keyType\":\"AVMString\",\"valueType\":\"AVMUint64\",\"key\":\"YWtpdGFfZGFv\",\"desc\":\"the app ID of the Akita DAO\"}},\"local\":{},\"box\":{}},\"maps\":{\"global\":{},\"local\":{},\"box\":{\"disbursements\":{\"keyType\":\"uint64\",\"valueType\":\"DisbursementDetails\",\"desc\":\"the disbursement map of tokens\\n\\nthe key is the uint64 id of the disbursement\\nthe value is the details of the disbursement\",\"prefix\":\"ZA==\"},\"userAllocations\":{\"keyType\":\"UserAllocationsKey\",\"valueType\":\"uint64\",\"desc\":\"the user allocations of disbursements\\n\\nthe key is the address of the qualified account with the uint64 id of the disbursement\\nthe value is the amount they are owed\",\"prefix\":\"dQ==\"}}}},\"bareActions\":{\"create\":[],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[734,974],\"errorMessage\":\"Allocation already exists\"},{\"pc\":[1766,2018],\"errorMessage\":\"Allocation does not exist\"},{\"pc\":[500,690,927,1148,1966],\"errorMessage\":\"Disbursement already final\"},{\"pc\":[481,645,882,1090,1670,1939],\"errorMessage\":\"Disbursement does not exist\"},{\"pc\":[1970],\"errorMessage\":\"Disbursement has not expired\"},{\"pc\":[1740],\"errorMessage\":\"Disbursement is fully distributed\"},{\"pc\":[1732,1738],\"errorMessage\":\"Disbursement is locked\"},{\"pc\":[1182],\"errorMessage\":\"Disbursements cannot be empty\"},{\"pc\":[1184],\"errorMessage\":\"Disbursements must have allocations\"},{\"pc\":[1179],\"errorMessage\":\"Invalid disbursement expiration time\"},{\"pc\":[1161],\"errorMessage\":\"Invalid disbursement unlock time\"},{\"pc\":[326,818,1055,1347,1545,2240],\"errorMessage\":\"Invalid payment\"},{\"pc\":[1071,1564],\"errorMessage\":\"Invalid transfer\"},{\"pc\":[72],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[2156],\"errorMessage\":\"Only the Akita DAO can call this function\"},{\"pc\":[498,1146,1964],\"errorMessage\":\"You are not the creator of this disbursement\"},{\"pc\":[2154],\"errorMessage\":\"application exists\"},{\"pc\":[2141,2265],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[715,952,1291,1492,1657,1991],\"errorMessage\":\"index access is out of bounds\"},{\"pc\":[1636],\"errorMessage\":\"invalid number of bytes for (len+(uint64,uint64)[])\"},{\"pc\":[634,871,1256,1457,1928],\"errorMessage\":\"invalid number of bytes for (len+(uint8[32],uint64)[])\"},{\"pc\":[206,260,295,440,470,2176,2193],\"errorMessage\":\"invalid number of bytes for (len+utf8[])\"},{\"pc\":[217,271,280,422,448,456,611,848,1079,1224,1233,1425,1434,1905,2133,2223],\"errorMessage\":\"invalid number of bytes for uint64\"},{\"pc\":[840,1417],\"errorMessage\":\"transaction type is axfer\"},{\"pc\":[246,603,829,1216,1406,2215],\"errorMessage\":\"transaction type is pay\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMjUzMDAgMzUzMDAKICAgIGJ5dGVjYmxvY2sgImQiICJ1IiAweDE1MWY3Yzc1ICJkaXNidXJzZW1lbnRfaWQiICJha2l0YV9kYW8iIDB4ODAwMDRkIDB4MDA0ZjAwMDAwMDAwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBkaXNidXJzZW1lbnRJRCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEsIGtleTogUmV3YXJkc0dsb2JhbFN0YXRlS2V5RGlzYnVyc2VtZW50SUQgfSkKICAgIGJ5dGVjXzMgLy8gImRpc2J1cnNlbWVudF9pZCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgUmV3YXJkcyBleHRlbmRzIGNsYXNzZXMoQmFzZVJld2FyZHMsIEFraXRhQmFzZUNvbnRyYWN0LCBDb250cmFjdFdpdGhPcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDE5CiAgICBwdXNoYnl0ZXNzIDB4MWM5ZWJiZGIgMHg4ZjQ5MjYyZCAweDU2NTZhY2Y5IDB4M2M2MGRmYTAgMHg1NDI0YTU5MSAweDdiN2RjNWZjIDB4YWYxYTE0ZjIgMHgzZWM0MGFhNCAweGJkM2NkMDkwIDB4MzNlOTJjOTQgMHg4NTRkZWRlMCAweGQ1NGJiYWQ5IDB4Mzk0ZWFlYjIgLy8gbWV0aG9kICJjcmVhdGVEaXNidXJzZW1lbnQocGF5LHN0cmluZyx1aW50NjQsdWludDY0LHN0cmluZyl1aW50NjQiLCBtZXRob2QgImVkaXREaXNidXJzZW1lbnQodWludDY0LHN0cmluZyx1aW50NjQsdWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJjcmVhdGVVc2VyQWxsb2NhdGlvbnMocGF5LHVpbnQ2NCwoYWRkcmVzcyx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAiY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zKHBheSxheGZlcix1aW50NjQsKGFkZHJlc3MsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImZpbmFsaXplRGlzYnVyc2VtZW50KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50KHBheSx1aW50NjQsdWludDY0LChhZGRyZXNzLHVpbnQ2NClbXSl1aW50NjQiLCBtZXRob2QgImNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQocGF5LGF4ZmVyLHVpbnQ2NCx1aW50NjQsKGFkZHJlc3MsdWludDY0KVtdKXVpbnQ2NCIsIG1ldGhvZCAiY2xhaW1SZXdhcmRzKCh1aW50NjQsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgInJlY2xhaW1SZXdhcmRzKHVpbnQ2NCwoYWRkcmVzcyx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAidXBkYXRlQWtpdGFEQU8odWludDY0KXZvaWQiLCBtZXRob2QgIm9wVXAoKXZvaWQiLCBtZXRob2QgIm1icihzdHJpbmcsc3RyaW5nKSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAib3B0SW4ocGF5LHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlRGlzYnVyc2VtZW50IGVkaXREaXNidXJzZW1lbnQgY3JlYXRlVXNlckFsbG9jYXRpb25zIGNyZWF0ZUFzYVVzZXJBbGxvY2F0aW9ucyBmaW5hbGl6ZURpc2J1cnNlbWVudCBjcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50IGNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQgY2xhaW1SZXdhcmRzIHJlY2xhaW1SZXdhcmRzIHVwZGF0ZUFraXRhREFPIG1haW5fb3BVcF9yb3V0ZUAxNSBtYnIgb3B0SW4KICAgIGVycgoKbWFpbl9vcFVwX3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDMKICAgIC8vIG9wVXAoKTogdm9pZCB7IH0KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMTk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgUmV3YXJkcyBleHRlbmRzIGNsYXNzZXMoQmFzZVJld2FyZHMsIEFraXRhQmFzZUNvbnRyYWN0LCBDb250cmFjdFdpdGhPcHRJbikgewogICAgcHVzaGJ5dGVzIDB4Y2Q5YWQ2N2UgLy8gbWV0aG9kICJjcmVhdGUoc3RyaW5nLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLmNyZWF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czoyNwogICAgLy8gdmVyc2lvbiA9IEdsb2JhbFN0YXRlPHN0cmluZz4oeyBrZXk6IEdsb2JhbFN0YXRlS2V5VmVyc2lvbiB9KQogICAgcHVzaGJ5dGVzICJ2ZXJzaW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gdGhpcy52ZXJzaW9uLnZhbHVlID0gdmVyc2lvbgogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlYyA0IC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFraXRhREFPLnZhbHVlID0gQXBwbGljYXRpb24oYWtpdGFEQU8pCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo4OAogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLmNyZWF0ZURpc2J1cnNlbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZURpc2J1cnNlbWVudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OTYtMTAyCiAgICAvLyBjcmVhdGVEaXNidXJzZW1lbnQoCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICAgdGl0bGU6IHN0cmluZywKICAgIC8vICAgdGltZVRvVW5sb2NrOiB1aW50NjQsCiAgICAvLyAgIGV4cGlyYXRpb246IHVpbnQ2NCwKICAgIC8vICAgbm90ZTogc3RyaW5nCiAgICAvLyApOiB1aW50NjQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gY29uc3QgaWQgPSB0aGlzLm5ld0Rpc2J1cnNlbWVudElEKCkKICAgIGNhbGxzdWIgbmV3RGlzYnVyc2VtZW50SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBjb3N0cyA9IHRoaXMubWJyKHRpdGxlLCBub3RlKQogICAgZGlnIDQKICAgIGRpZyAyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2Jhc2UudHM6OkJhc2VSZXdhcmRzLm1icgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNvbnN0IG1ickFtb3VudCA9IGNvc3RzLmRpc2J1cnNlbWVudHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMDgtMTE1CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDYKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTA4LTExNQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICB1bmNvdmVyIDcKICAgIGd0eG5zIEFtb3VudAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMTctMTI3CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IGZhbHNlLAogICAgLy8gICB0aXRsZSwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiAwLAogICAgLy8gICBkaXN0cmlidXRlZDogMCwKICAgIC8vICAgbm90ZSwKICAgIC8vIH0KICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgc3dhcAogICAgcHVzaGJ5dGVzIDB4MDAwMDRkCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgNzcgLy8gNzcKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBhbW91bnQ6IDAsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMTctMTI3CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IGZhbHNlLAogICAgLy8gICB0aXRsZSwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiAwLAogICAgLy8gICBkaXN0cmlidXRlZDogMCwKICAgIC8vICAgbm90ZSwKICAgIC8vIH0KICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciA3CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTE3LTEyNwogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIC8vICAgY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIC8vICAgZmluYWxpemVkOiBmYWxzZSwKICAgIC8vICAgdGl0bGUsCiAgICAvLyAgIGFtb3VudDogMCwKICAgIC8vICAgdGltZVRvVW5sb2NrLAogICAgLy8gICBleHBpcmF0aW9uLAogICAgLy8gICBhbGxvY2F0aW9uczogMCwKICAgIC8vICAgZGlzdHJpYnV0ZWQ6IDAsCiAgICAvLyAgIG5vdGUsCiAgICAvLyB9CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgdW5jb3ZlciAyCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjk2LTEwMgogICAgLy8gY3JlYXRlRGlzYnVyc2VtZW50KAogICAgLy8gICBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHRpdGxlOiBzdHJpbmcsCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIG5vdGU6IHN0cmluZwogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLmVkaXREaXNidXJzZW1lbnRbcm91dGluZ10oKSAtPiB2b2lkOgplZGl0RGlzYnVyc2VtZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMzItMTM4CiAgICAvLyBlZGl0RGlzYnVyc2VtZW50KAogICAgLy8gICBpZDogdWludDY0LAogICAgLy8gICB0aXRsZTogc3RyaW5nLAogICAgLy8gICB0aW1lVG9VbmxvY2s6IHVpbnQ2NCwKICAgIC8vICAgZXhwaXJhdGlvbjogdWludDY0LAogICAgLy8gICBub3RlOiBzdHJpbmcKICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY29uc3QgeyBjcmVhdG9yLCBmaW5hbGl6ZWQgfSA9IHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMyAvLyAzMgogICAgYm94X2V4dHJhY3QKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMzIKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNDIKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBjcmVhdG9yLCBFUlJfWU9VX0FSRV9OT1RfVEhFX0NSRUFUT1IpCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gWW91IGFyZSBub3QgdGhlIGNyZWF0b3Igb2YgdGhpcyBkaXNidXJzZW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQoZmluYWxpemVkID09PSBmYWxzZSwgRVJSX0RJU0JVUlNFTUVOVF9BTFJFQURZX0ZJTkFMKQogICAgIQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBhbHJlYWR5IGZpbmFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS50aXRsZSA9IHRpdGxlCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBwdXNoaW50IDMzIC8vIDMzCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMgogICAgZXh0cmFjdDMKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICBkaWcgMgogICAgcHVzaGludCA3NSAvLyA3NQogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgNAogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICB1bmNvdmVyIDMKICAgIC0KICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA3CiAgICArCiAgICBzd2FwCiAgICAtCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgNzUKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGRpZyAxCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS50aW1lVG9VbmxvY2sgPSB0aW1lVG9VbmxvY2sKICAgIGR1cAogICAgcHVzaGludCA0MyAvLyA0MwogICAgdW5jb3ZlciA1CiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUuZXhwaXJhdGlvbiA9IGV4cGlyYXRpb24KICAgIGR1cAogICAgcHVzaGludCA1MSAvLyA1MQogICAgdW5jb3ZlciA0CiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUubm90ZSA9IG5vdGUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBkdXAKICAgIHB1c2hpbnQgNzUgLy8gNzUKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgZXh0cmFjdDMKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjEzMi0xMzgKICAgIC8vIGVkaXREaXNidXJzZW1lbnQoCiAgICAvLyAgIGlkOiB1aW50NjQsCiAgICAvLyAgIHRpdGxlOiBzdHJpbmcsCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIG5vdGU6IHN0cmluZwogICAgLy8gKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5jcmVhdGVVc2VyQWxsb2NhdGlvbnNbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVVc2VyQWxsb2NhdGlvbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIGNyZWF0ZVVzZXJBbGxvY2F0aW9ucygKICAgIC8vICAgcGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBpZDogdWludDY0LAogICAgLy8gICBhbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25bXQogICAgLy8gKTogdm9pZCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ4WzMyXSx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE1NgogICAgLy8gYXNzZXJ0KHRoaXMuZGlzYnVyc2VtZW50cyhpZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgaXRvYgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBkaXNidXJzZW1lbnRzID0gQm94TWFwPHVpbnQ2NCwgRGlzYnVyc2VtZW50RGV0YWlscz4oeyBrZXlQcmVmaXg6IFJld2FyZHNCb3hQcmVmaXhEaXNidXJzZW1lbnRzIH0pCiAgICBieXRlY18wIC8vICJkIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBhc3NlcnQodGhpcy5kaXNidXJzZW1lbnRzKGlkKS5leGlzdHMsIEVSUl9ESVNCVVJTRU1FTlRfRE9FU19OT1RfRVhJU1QpCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyBjb25zdCB7IGZpbmFsaXplZCwgdGl0bGUsIG5vdGUgfSA9IHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMzIKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgZGlnIDEKICAgIHB1c2hpbnQgMzMgLy8gMzMKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgcHVzaGludCA3NSAvLyA3NQogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgY292ZXIgMwogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNTkKICAgIC8vIGFzc2VydCghZmluYWxpemVkLCBFUlJfRElTQlVSU0VNRU5UX0FMUkVBRFlfRklOQUwpCiAgICAhCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGFscmVhZHkgZmluYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCgpjcmVhdGVVc2VyQWxsb2NhdGlvbnNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGRpZyA3CiAgICA8CiAgICBieiBjcmVhdGVVc2VyQWxsb2NhdGlvbnNfYWZ0ZXJfd2hpbGVANAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNjUKICAgIC8vIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICBkaWcgNwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NldDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2My0xNjcKICAgIC8vIGNvbnN0IHVzZXJBbGxvY2F0aW9uc0tleTogVXNlckFsbG9jYXRpb25zS2V5ID0gewogICAgLy8gICBkaXNidXJzZW1lbnRJRDogaWQsCiAgICAvLyAgIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICAvLyAgIGFzc2V0OiAwLAogICAgLy8gfQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgOAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyB1c2VyQWxsb2NhdGlvbnMgPSBCb3hNYXA8VXNlckFsbG9jYXRpb25zS2V5LCB1aW50NjQ+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4VXNlckFsbG9jYXRpb25zIH0pCiAgICBieXRlY18xIC8vICJ1IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gYXNzZXJ0KCF0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmV4aXN0cywgRVJSX0FMTE9DQVRJT05fQUxSRUFEWV9FWElTVFMpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEFsbG9jYXRpb24gYWxyZWFkeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLnZhbHVlID0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxNzIKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUuYWxsb2NhdGlvbnMgKz0gMQogICAgZGlnIDYKICAgIGR1cAogICAgcHVzaGludCA1OSAvLyA1OQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZGlnIDEKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmFtb3VudCArPSBhbGxvY2F0aW9uc1tpXS5hbW91bnQKICAgIGR1cAogICAgcHVzaGludCAzNSAvLyAzNQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgMgogICAgKwogICAgaXRvYgogICAgcHVzaGludCAzNSAvLyAzNQogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBzdW0gKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMwogICAgKwogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZVVzZXJBbGxvY2F0aW9uc193aGlsZV90b3BAMgoKY3JlYXRlVXNlckFsbG9jYXRpb25zX2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gY29uc3QgY29zdHMgPSB0aGlzLm1icih0aXRsZSwgbm90ZSkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBjb25zdCBtYnJBbW91bnQ6IHVpbnQ2NCA9IGNvc3RzLnVzZXJBbGxvY2F0aW9ucyAqIGFsbG9jYXRpb25zLmxlbmd0aAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDkKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTg0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIGFtb3VudDogbWJyQW1vdW50ICsgc3VtLAogICAgdW5jb3ZlciAyCiAgICBkaWcgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxODEtMTg4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgICYmCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIGNyZWF0ZVVzZXJBbGxvY2F0aW9ucygKICAgIC8vICAgcGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBpZDogdWludDY0LAogICAgLy8gICBhbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25bXQogICAgLy8gKTogdm9pZCB7CiAgICByZXR1cm4gLy8gb24gZXJyb3I6IEludmFsaWQgcGF5bWVudAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OlJld2FyZHMuY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxOTEtMTk2CiAgICAvLyBjcmVhdGVBc2FVc2VyQWxsb2NhdGlvbnMoCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICAgYXNzZXRYZmVyOiBndHhuLkFzc2V0VHJhbnNmZXJUeG4sCiAgICAvLyAgIGlkOiB1aW50NjQsCiAgICAvLyAgIGFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbltdCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIgLy8gMgogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbisodWludDhbMzJdLHVpbnQ2NClbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyBhc3NlcnQodGhpcy5kaXNidXJzZW1lbnRzKGlkKS5leGlzdHMsIEVSUl9ESVNCVVJTRU1FTlRfRE9FU19OT1RfRVhJU1QpCiAgICBpdG9iCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGRpc2J1cnNlbWVudHMgPSBCb3hNYXA8dWludDY0LCBEaXNidXJzZW1lbnREZXRhaWxzPih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeERpc2J1cnNlbWVudHMgfSkKICAgIGJ5dGVjXzAgLy8gImQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoxOTkKICAgIC8vIGNvbnN0IHsgZmluYWxpemVkLCB0aXRsZSwgbm90ZSB9ID0gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHN3YXAKICAgIGludGNfMyAvLyAzMgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBkaWcgMQogICAgcHVzaGludCAzMyAvLyAzMwogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBwdXNoaW50IDc1IC8vIDc1CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBjb3ZlciAzCiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIwMAogICAgLy8gYXNzZXJ0KCFmaW5hbGl6ZWQsIEVSUl9ESVNCVVJTRU1FTlRfQUxSRUFEWV9GSU5BTCkKICAgICEKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgYWxyZWFkeSBmaW5hbAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDIKICAgIC8vIGxldCBtYXRjaFN1bTogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjAzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAoKY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgNwogICAgPAogICAgYnogY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zX2FmdGVyX3doaWxlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjA2CiAgICAvLyBhZGRyZXNzOiBhbGxvY2F0aW9uc1tpXS5hZGRyZXNzLAogICAgZGlnIDcKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICAqCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXQ6IGFzc2V0WGZlci54ZmVyQXNzZXQuaWQsCiAgICBkaWcgMTEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDQtMjA4CiAgICAvLyBjb25zdCB1c2VyQWxsb2NhdGlvbnNLZXk6IFVzZXJBbGxvY2F0aW9uc0tleSA9IHsKICAgIC8vICAgZGlzYnVyc2VtZW50SUQ6IGlkLAogICAgLy8gICBhZGRyZXNzOiBhbGxvY2F0aW9uc1tpXS5hZGRyZXNzLAogICAgLy8gICBhc3NldDogYXNzZXRYZmVyLnhmZXJBc3NldC5pZCwKICAgIC8vIH0KICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDgKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGFzc2VydCghdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS5leGlzdHMsIEVSUl9BTExPQ0FUSU9OX0FMUkVBRFlfRVhJU1RTKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBBbGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS52YWx1ZSA9IGFsbG9jYXRpb25zW2ldLmFtb3VudAogICAgc3dhcAogICAgaW50Y18zIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmFsbG9jYXRpb25zICs9IDEKICAgIGRpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGRpZyAxCiAgICBwdXNoaW50IDU5IC8vIDU5CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS5hbW91bnQgKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkdXAKICAgIHB1c2hpbnQgMzUgLy8gMzUKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZGlnIDIKICAgICsKICAgIGl0b2IKICAgIHB1c2hpbnQgMzUgLy8gMzUKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gbWF0Y2hTdW0gKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMwogICAgKwogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZUFzYVVzZXJBbGxvY2F0aW9uc193aGlsZV90b3BAMgoKY3JlYXRlQXNhVXNlckFsbG9jYXRpb25zX2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIyMAogICAgLy8gY29uc3QgY29zdHMgPSB0aGlzLm1icih0aXRsZSwgbm90ZSkKICAgIGRpZyAzCiAgICBkaWcgMwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBjb25zdCBtYnJBbW91bnQ6IHVpbnQ2NCA9IGNvc3RzLnVzZXJBbGxvY2F0aW9ucyAqIGFsbG9jYXRpb25zLmxlbmd0aAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMjMtMjMwCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDEwCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjIzLTIzMAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIHVuY292ZXIgMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gSW52YWxpZCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIzMi0yMzkKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBhc3NldFhmZXIsCiAgICAvLyAgIHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogbWF0Y2hTdW0sCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1RSQU5TRkVSCiAgICAvLyApCiAgICBkaWcgOAogICAgZHVwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyMzItMjM5CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgYXNzZXRYZmVyLAogICAgLy8gICB7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IG1hdGNoU3VtLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9UUkFOU0ZFUgogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBkaWcgMwogICAgPT0KICAgICYmCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjE5MS0xOTYKICAgIC8vIGNyZWF0ZUFzYVVzZXJBbGxvY2F0aW9ucygKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBhc3NldFhmZXI6IGd0eG4uQXNzZXRUcmFuc2ZlclR4biwKICAgIC8vICAgaWQ6IHVpbnQ2NCwKICAgIC8vICAgYWxsb2NhdGlvbnM6IFVzZXJBbGxvY2F0aW9uW10KICAgIC8vICk6IHZvaWQgewogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBJbnZhbGlkIHRyYW5zZmVyCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5maW5hbGl6ZURpc2J1cnNlbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmZpbmFsaXplRGlzYnVyc2VtZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGZpbmFsaXplRGlzYnVyc2VtZW50KGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0MwogICAgLy8gYXNzZXJ0KHRoaXMuZGlzYnVyc2VtZW50cyhpZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0MwogICAgLy8gYXNzZXJ0KHRoaXMuZGlzYnVyc2VtZW50cyhpZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gY29uc3QgeyBjcmVhdG9yLCBmaW5hbGl6ZWQsIHRpbWVUb1VubG9jaywgZXhwaXJhdGlvbiwgYW1vdW50LCBhbGxvY2F0aW9ucyB9ID0gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18zIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDEKICAgIGludGNfMyAvLyAzMgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBkaWcgMgogICAgcHVzaGludCA0MyAvLyA0MwogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDQKICAgIGRpZyAzCiAgICBwdXNoaW50IDUxIC8vIDUxCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGNvdmVyIDQKICAgIGRpZyAzCiAgICBwdXNoaW50IDM1IC8vIDM1CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGNvdmVyIDQKICAgIHVuY292ZXIgMwogICAgcHVzaGludCA1OSAvLyA1OQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI0NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IGNyZWF0b3IsIEVSUl9ZT1VfQVJFX05PVF9USEVfQ1JFQVRPUikKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgPT0KICAgIGFzc2VydCAvLyBZb3UgYXJlIG5vdCB0aGUgY3JlYXRvciBvZiB0aGlzIGRpc2J1cnNlbWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDcKICAgIC8vIGFzc2VydCghZmluYWxpemVkLCBFUlJfRElTQlVSU0VNRU5UX0FMUkVBRFlfRklOQUwpCiAgICAhCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGFscmVhZHkgZmluYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyB0aW1lVG9VbmxvY2sgPj0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCB8fCB0aW1lVG9VbmxvY2sgPT09IDAsCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICA+PQogICAgYm56IGZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfdHJ1ZUAzCiAgICBkaWcgMwogICAgYm56IGZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfZmFsc2VANAoKZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDgtMjUxCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRpbWVUb1VubG9jayA+PSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wIHx8IHRpbWVUb1VubG9jayA9PT0gMCwKICAgIC8vICAgRVJSX0lOVkFMSURfRElTQlVSU0VNRU5UX1VOTE9DS19USU1FCiAgICAvLyApCiAgICBhc3NlcnQgLy8gSW52YWxpZCBkaXNidXJzZW1lbnQgdW5sb2NrIHRpbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBleHBpcmF0aW9uID49IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAgKyA2MCB8fCBleHBpcmF0aW9uID09PSAwLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgcHVzaGludCA2MCAvLyA2MAogICAgKwogICAgZGlnIDMKICAgIDw9CiAgICBibnogZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF90cnVlQDcKICAgIGRpZyAyCiAgICBibnogZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9mYWxzZUA4CgpmaW5hbGl6ZURpc2J1cnNlbWVudF9ib29sX3RydWVANzoKICAgIGludGNfMSAvLyAxCgpmaW5hbGl6ZURpc2J1cnNlbWVudF9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI1Mi0yNTUKICAgIC8vIGFzc2VydCgKICAgIC8vICAgZXhwaXJhdGlvbiA+PSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wICsgNjAgfHwgZXhwaXJhdGlvbiA9PT0gMCwKICAgIC8vICAgRVJSX0lOVkFMSURfRElTQlVSU0VNRU5UX0VYUElSQVRJT05fVElNRQogICAgLy8gKQogICAgYXNzZXJ0IC8vIEludmFsaWQgZGlzYnVyc2VtZW50IGV4cGlyYXRpb24gdGltZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGFzc2VydChhbW91bnQgPiAwLCBFUlJfRElTQlVSU0VNRU5UU19DQU5OT1RfQkVfRU1QVFkpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudHMgY2Fubm90IGJlIGVtcHR5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI1NwogICAgLy8gYXNzZXJ0KGFsbG9jYXRpb25zID4gMCwgRVJSX0RJU0JVUlNFTUVOVFNfTVVTVF9IQVZFX0FMTE9DQVRJT05TKQogICAgZHVwCiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50cyBtdXN0IGhhdmUgYWxsb2NhdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjU5CiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmZpbmFsaXplZCA9IHRydWUKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMyAvLyAzMgogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18xIC8vIDEKICAgIHNldGJpdAogICAgaW50Y18zIC8vIDMyCiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGZpbmFsaXplRGlzYnVyc2VtZW50KGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGZpbmFsaXplRGlzYnVyc2VtZW50X2Jvb2xfbWVyZ2VAOQoKZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgZmluYWxpemVEaXNidXJzZW1lbnRfYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5jcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlSW5zdGFudERpc2J1cnNlbWVudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjYyLTI2NwogICAgLy8gY3JlYXRlSW5zdGFudERpc2J1cnNlbWVudCgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICB0aW1lVG9VbmxvY2s6IHVpbnQ2NCwKICAgIC8vICAgZXhwaXJhdGlvbjogdWludDY0LAogICAgLy8gICBhbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25bXQogICAgLy8gKTogdWludDY0IHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbisodWludDhbMzJdLHVpbnQ2NClbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyBjb25zdCBpZCA9IHRoaXMubmV3RGlzYnVyc2VtZW50SUQoKQogICAgY2FsbHN1YiBuZXdEaXNidXJzZW1lbnRJRAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGNvbnN0IG1ickFtb3VudDogdWludDY0ID0gTWluRGlzYnVyc2VtZW50c01CUiArIChVc2VyQWxsb2NhdGlvbk1CUiAqIGFsbG9jYXRpb25zLmxlbmd0aCkKICAgIGludGMgNCAvLyAyNTMwMAogICAgKgogICAgaW50YyA1IC8vIDM1MzAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gbGV0IHN1bTogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAoKY3JlYXRlSW5zdGFudERpc2J1cnNlbWVudF93aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IGNyZWF0ZUluc3RhbnREaXNidXJzZW1lbnRfYWZ0ZXJfd2hpbGVANAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICBkaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjc3CiAgICAvLyBhc3NldDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI3NC0yNzgKICAgIC8vIGNvbnN0IHVzZXJBbGxvY2F0aW9uc0tleTogVXNlckFsbG9jYXRpb25zS2V5ID0gewogICAgLy8gICBkaXNidXJzZW1lbnRJRDogaWQsCiAgICAvLyAgIGFkZHJlc3M6IGFsbG9jYXRpb25zW2ldLmFkZHJlc3MsCiAgICAvLyAgIGFzc2V0OiAwLAogICAgLy8gfQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS52YWx1ZSA9IGFsbG9jYXRpb25zW2ldLmFtb3VudAogICAgc3dhcAogICAgaW50Y18zIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS52YWx1ZSA9IGFsbG9jYXRpb25zW2ldLmFtb3VudAogICAgZGlnIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MjgxCiAgICAvLyBzdW0gKz0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMwogICAgKwogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI3MwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG9jYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGNyZWF0ZUluc3RhbnREaXNidXJzZW1lbnRfd2hpbGVfdG9wQDIKCmNyZWF0ZUluc3RhbnREaXNidXJzZW1lbnRfYWZ0ZXJfd2hpbGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjg0LTI5MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQgKyBzdW0sCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyA4CiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4NwogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjg0LTI5MQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBtYnJBbW91bnQgKyBzdW0sCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBhbW91bnQ6IG1ickFtb3VudCArIHN1bSwKICAgIGRpZyA0CiAgICBkaWcgNAogICAgZHVwCiAgICBjb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI4NC0yOTEKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogbWJyQW1vdW50ICsgc3VtLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mjk0CiAgICAvLyBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyOTMtMzAzCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IHRydWUsCiAgICAvLyAgIHRpdGxlOiAnJywKICAgIC8vICAgYW1vdW50OiBzdW0sCiAgICAvLyAgIHRpbWVUb1VubG9jaywKICAgIC8vICAgZXhwaXJhdGlvbiwKICAgIC8vICAgYWxsb2NhdGlvbnM6IGFsbG9jYXRpb25zLmxlbmd0aCwKICAgIC8vICAgZGlzdHJpYnV0ZWQ6IDAsCiAgICAvLyAgIG5vdGU6ICcnLAogICAgLy8gfQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIHN3YXAKICAgIGJ5dGVjIDUgLy8gMHg4MDAwNGQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA5CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNiAvLyAweDAwNGYwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjI5MwogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIGRpZyA0CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBkaXNidXJzZW1lbnRzID0gQm94TWFwPHVpbnQ2NCwgRGlzYnVyc2VtZW50RGV0YWlscz4oeyBrZXlQcmVmaXg6IFJld2FyZHNCb3hQcmVmaXhEaXNidXJzZW1lbnRzIH0pCiAgICBieXRlY18wIC8vICJkIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyOTMtMzAzCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlID0gewogICAgLy8gICBjcmVhdG9yOiBUeG4uc2VuZGVyLAogICAgLy8gICBmaW5hbGl6ZWQ6IHRydWUsCiAgICAvLyAgIHRpdGxlOiAnJywKICAgIC8vICAgYW1vdW50OiBzdW0sCiAgICAvLyAgIHRpbWVUb1VubG9jaywKICAgIC8vICAgZXhwaXJhdGlvbiwKICAgIC8vICAgYWxsb2NhdGlvbnM6IGFsbG9jYXRpb25zLmxlbmd0aCwKICAgIC8vICAgZGlzdHJpYnV0ZWQ6IDAsCiAgICAvLyAgIG5vdGU6ICcnLAogICAgLy8gfQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHVuY292ZXIgMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czoyNjItMjY3CiAgICAvLyBjcmVhdGVJbnN0YW50RGlzYnVyc2VtZW50KAogICAgLy8gICBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4sCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIGFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbltdCiAgICAvLyApOiB1aW50NjQgewogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OlJld2FyZHMuY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjMwOC0zMTQKICAgIC8vIGNyZWF0ZUluc3RhbnRBc2FEaXNidXJzZW1lbnQoCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwKICAgIC8vICAgYXNzZXRYZmVyOiBndHhuLkFzc2V0VHJhbnNmZXJUeG4sCiAgICAvLyAgIHRpbWVUb1VubG9jazogdWludDY0LAogICAgLy8gICBleHBpcmF0aW9uOiB1aW50NjQsCiAgICAvLyAgIGFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbltdCiAgICAvLyApOiB1aW50NjQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50OFszMl0sdWludDY0KVtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMTUKICAgIC8vIGNvbnN0IGlkID0gdGhpcy5uZXdEaXNidXJzZW1lbnRJRCgpCiAgICBjYWxsc3ViIG5ld0Rpc2J1cnNlbWVudElECiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjMxNwogICAgLy8gY29uc3QgbWJyQW1vdW50OiB1aW50NjQgPSBNaW5EaXNidXJzZW1lbnRzTUJSICsgKFVzZXJBbGxvY2F0aW9uTUJSICogYWxsb2NhdGlvbnMubGVuZ3RoKQogICAgaW50YyA0IC8vIDI1MzAwCiAgICAqCiAgICBpbnRjIDUgLy8gMzUzMDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzE5CiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCgpjcmVhdGVJbnN0YW50QXNhRGlzYnVyc2VtZW50X3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhbGxvY2F0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgNQogICAgPAogICAgYnogY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudF9hZnRlcl93aGlsZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjMyMwogICAgLy8gYWRkcmVzczogYWxsb2NhdGlvbnNbaV0uYWRkcmVzcywKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGV4dHJhY3QgMCAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjQKICAgIC8vIGFzc2V0OiBhc3NldFhmZXIueGZlckFzc2V0LmlkLAogICAgZGlnIDExCiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzIxLTMyNQogICAgLy8gY29uc3QgdXNlckFsbG9jYXRpb25zS2V5OiBVc2VyQWxsb2NhdGlvbnNLZXkgPSB7CiAgICAvLyAgIGRpc2J1cnNlbWVudElEOiBpZCwKICAgIC8vICAgYWRkcmVzczogYWxsb2NhdGlvbnNbaV0uYWRkcmVzcywKICAgIC8vICAgYXNzZXQ6IGFzc2V0WGZlci54ZmVyQXNzZXQuaWQsCiAgICAvLyB9CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA2CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLnZhbHVlID0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjc2CiAgICAvLyB1c2VyQWxsb2NhdGlvbnMgPSBCb3hNYXA8VXNlckFsbG9jYXRpb25zS2V5LCB1aW50NjQ+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4VXNlckFsbG9jYXRpb25zIH0pCiAgICBieXRlY18xIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLnZhbHVlID0gYWxsb2NhdGlvbnNbaV0uYW1vdW50CiAgICBkaWcgMQogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHN1bSArPSBhbGxvY2F0aW9uc1tpXS5hbW91bnQKICAgIGRpZyAzCiAgICArCiAgICBidXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb2NhdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudF93aGlsZV90b3BAMgoKY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudF9hZnRlcl93aGlsZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMzEtMzM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDkKICAgIGR1cAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozMzEtMzM4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IG1ickFtb3VudCwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgZGlnIDQKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIEludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNDAtMzQ3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgYXNzZXRYZmVyLAogICAgLy8gICB7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IHN1bSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfVFJBTlNGRVIKICAgIC8vICkKICAgIGRpZyA4CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM0MC0zNDcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBhc3NldFhmZXIsCiAgICAvLyAgIHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogc3VtLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9UUkFOU0ZFUgogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBJbnZhbGlkIHRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM1MAogICAgLy8gY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzQ5LTM1OQogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIC8vICAgY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIC8vICAgZmluYWxpemVkOiB0cnVlLAogICAgLy8gICB0aXRsZTogJycsCiAgICAvLyAgIGFtb3VudDogc3VtLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiBhbGxvY2F0aW9ucy5sZW5ndGgsCiAgICAvLyAgIGRpc3RyaWJ1dGVkOiAwLAogICAgLy8gICBub3RlOiAnJywKICAgIC8vIH0KICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBzd2FwCiAgICBieXRlYyA1IC8vIDB4ODAwMDRkCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgOQogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgOAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgNgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDRmMDAwMDAwMDAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50cyhpZCkudmFsdWUgPSB7CiAgICBkaWcgNAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gZGlzYnVyc2VtZW50cyA9IEJveE1hcDx1aW50NjQsIERpc2J1cnNlbWVudERldGFpbHM+KHsga2V5UHJlZml4OiBSZXdhcmRzQm94UHJlZml4RGlzYnVyc2VtZW50cyB9KQogICAgYnl0ZWNfMCAvLyAiZCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzQ5LTM1OQogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZSA9IHsKICAgIC8vICAgY3JlYXRvcjogVHhuLnNlbmRlciwKICAgIC8vICAgZmluYWxpemVkOiB0cnVlLAogICAgLy8gICB0aXRsZTogJycsCiAgICAvLyAgIGFtb3VudDogc3VtLAogICAgLy8gICB0aW1lVG9VbmxvY2ssCiAgICAvLyAgIGV4cGlyYXRpb24sCiAgICAvLyAgIGFsbG9jYXRpb25zOiBhbGxvY2F0aW9ucy5sZW5ndGgsCiAgICAvLyAgIGRpc3RyaWJ1dGVkOiAwLAogICAgLy8gICBub3RlOiAnJywKICAgIC8vIH0KICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICB1bmNvdmVyIDIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzA4LTMxNAogICAgLy8gY3JlYXRlSW5zdGFudEFzYURpc2J1cnNlbWVudCgKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuLAogICAgLy8gICBhc3NldFhmZXI6IGd0eG4uQXNzZXRUcmFuc2ZlclR4biwKICAgIC8vICAgdGltZVRvVW5sb2NrOiB1aW50NjQsCiAgICAvLyAgIGV4cGlyYXRpb246IHVpbnQ2NCwKICAgIC8vICAgYWxsb2NhdGlvbnM6IFVzZXJBbGxvY2F0aW9uW10KICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo6UmV3YXJkcy5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzY0CiAgICAvLyBjbGFpbVJld2FyZHMocmV3YXJkczogQ2xhaW1EZXRhaWxzW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgICoKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHJld2FyZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgpjbGFpbVJld2FyZHNfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHJld2FyZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl93aGlsZUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjYKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMocmV3YXJkc1tpXS5pZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyBkaXNidXJzZW1lbnRzID0gQm94TWFwPHVpbnQ2NCwgRGlzYnVyc2VtZW50RGV0YWlscz4oeyBrZXlQcmVmaXg6IFJld2FyZHNCb3hQcmVmaXhEaXNidXJzZW1lbnRzIH0pCiAgICBieXRlY18wIC8vICJkIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjYKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMocmV3YXJkc1tpXS5pZCkuZXhpc3RzLCBFUlJfRElTQlVSU0VNRU5UX0RPRVNfTk9UX0VYSVNUKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzY4CiAgICAvLyBjb25zdCB7IHRpbWVUb1VubG9jaywgZXhwaXJhdGlvbiwgYW1vdW50LCBkaXN0cmlidXRlZCwgY3JlYXRvciwgbm90ZSB9ID0gdGhpcy5kaXNidXJzZW1lbnRzKHJld2FyZHNbaV0uaWQpLnZhbHVlCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgc3dhcAogICAgZHVwCiAgICBwdXNoaW50IDQzIC8vIDQzCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAxCiAgICBwdXNoaW50IDUxIC8vIDUxCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAyCiAgICBwdXNoaW50IDM1IC8vIDM1CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAzCiAgICBwdXNoaW50IDY3IC8vIDY3CiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA0CiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18zIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgYnVyeSAxNAogICAgZGlnIDUKICAgIHB1c2hpbnQgNzUgLy8gNzUKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgNgogICAgbGVuCiAgICB1bmNvdmVyIDcKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBidXJ5IDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gYXNzZXJ0KHRpbWVUb1VubG9jayA8PSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wLCBFUlJfRElTQlVSU0VNRU5UX0xPQ0tFRCkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIHVuY292ZXIgNAogICAgPj0KICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM3MAogICAgLy8gYXNzZXJ0KGV4cGlyYXRpb24gPj0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcCwgRVJSX0RJU0JVUlNFTUVOVF9MT0NLRUQpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICB1bmNvdmVyIDMKICAgIDw9CiAgICBhc3NlcnQgLy8gRGlzYnVyc2VtZW50IGlzIGxvY2tlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIGFzc2VydChhbW91bnQgPiBkaXN0cmlidXRlZCwgRVJSX0RJU0JVUlNFTUVOVF9GVUxMWV9ESVNUUklCVVRFRCkKICAgID4KICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgaXMgZnVsbHkgZGlzdHJpYnV0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzc1CiAgICAvLyBhZGRyZXNzOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIGFzc2V0OiByZXdhcmRzW2ldLmFzc2V0LAogICAgdW5jb3ZlciAzCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgYnVyeSA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM3My0zNzcKICAgIC8vIGNvbnN0IHVzZXJBbGxvY2F0aW9uc0tleTogVXNlckFsbG9jYXRpb25zS2V5ID0gewogICAgLy8gICBkaXNidXJzZW1lbnRJRDogcmV3YXJkc1tpXS5pZCwKICAgIC8vICAgYWRkcmVzczogVHhuLnNlbmRlciwKICAgIC8vICAgYXNzZXQ6IHJld2FyZHNbaV0uYXNzZXQsCiAgICAvLyB9CiAgICBkdXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNzgKICAgIC8vIGFzc2VydCh0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmV4aXN0cywgRVJSX0FMTE9DQVRJT05fRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFsbG9jYXRpb24gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyBjb25zdCB1c2VyQWxsb2NhdGlvbiA9IHRoaXMudXNlckFsbG9jYXRpb25zKHVzZXJBbGxvY2F0aW9uc0tleSkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMocmV3YXJkc1tpXS5pZCkudmFsdWUuYWxsb2NhdGlvbnMgLT0gMQogICAgZGlnIDMKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIGRpZyA0CiAgICBwdXNoaW50IDU5IC8vIDU5CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM4MgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKHJld2FyZHNbaV0uaWQpLnZhbHVlLmRpc3RyaWJ1dGVkICs9IHVzZXJBbGxvY2F0aW9uCiAgICBkaWcgMwogICAgcHVzaGludCA2NyAvLyA2NwogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICArCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHB1c2hpbnQgNjcgLy8gNjcKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzgzCiAgICAvLyB0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzkyCiAgICAvLyBpZiAoIWlzQWxnbykgewogICAgYnogY2xhaW1SZXdhcmRzX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjM5NAogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGNyZWF0b3JNQlJSZWZ1bmQsIGFzc2V0WGZlcikKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzg3CiAgICAvLyBhbW91bnQ6IFVzZXJBbGxvY2F0aW9uTUJSLAogICAgaW50YyA0IC8vIDI1MzAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZGlnIDcKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6Mzg1LTM4OAogICAgLy8gY29uc3QgY3JlYXRvck1CUlJlZnVuZCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHJlY2VpdmVyOiBjcmVhdG9yLAogICAgLy8gICBhbW91bnQ6IFVzZXJBbGxvY2F0aW9uTUJSLAogICAgLy8gfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGNyZWF0b3JNQlJSZWZ1bmQsIGFzc2V0WGZlcikKICAgIGl0eG5fbmV4dAogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgTm90ZQogICAgZGlnIDUKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6MzkzLTM5OAogICAgLy8gY29uc3QgYXNzZXRYZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHVzZXJBbGxvY2F0aW9uLAogICAgLy8gICB4ZmVyQXNzZXQ6IHJld2FyZHNbaV0uYXNzZXQsCiAgICAvLyAgIG5vdGUsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MDAKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAoY3JlYXRvck1CUlJlZnVuZCwgYXNzZXRYZmVyKQogICAgaXR4bl9zdWJtaXQKCmNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZXdhcmRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgY2xhaW1SZXdhcmRzX3doaWxlX3RvcEAyCgpjbGFpbVJld2FyZHNfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQwMwogICAgLy8gcmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQwOAogICAgLy8gaXR4bi5zdWJtaXRHcm91cChjcmVhdG9yTUJSUmVmdW5kLCBwYXltZW50KQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozODcKICAgIC8vIGFtb3VudDogVXNlckFsbG9jYXRpb25NQlIsCiAgICBpbnRjIDQgLy8gMjUzMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgNwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozODUtMzg4CiAgICAvLyBjb25zdCBjcmVhdG9yTUJSUmVmdW5kID0gaXR4bi5wYXltZW50KHsKICAgIC8vICAgcmVjZWl2ZXI6IGNyZWF0b3IsCiAgICAvLyAgIGFtb3VudDogVXNlckFsbG9jYXRpb25NQlIsCiAgICAvLyB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAoY3JlYXRvck1CUlJlZnVuZCwgcGF5bWVudCkKICAgIGl0eG5fbmV4dAogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgTm90ZQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDAyLTQwNgogICAgLy8gY29uc3QgcGF5bWVudCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICBhbW91bnQ6IHVzZXJBbGxvY2F0aW9uLAogICAgLy8gICBub3RlLAogICAgLy8gfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKGNyZWF0b3JNQlJSZWZ1bmQsIHBheW1lbnQpCiAgICBpdHhuX3N1Ym1pdAogICAgYiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUAxMAoKY2xhaW1SZXdhcmRzX2FmdGVyX3doaWxlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czozNjQKICAgIC8vIGNsYWltUmV3YXJkcyhyZXdhcmRzOiBDbGFpbURldGFpbHNbXSk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6OlJld2FyZHMucmVjbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpyZWNsYWltUmV3YXJkczoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTMKICAgIC8vIHJlY2xhaW1SZXdhcmRzKGlkOiB1aW50NjQsIHJlY2xhaW1zOiBBbGxvY2F0aW9uUmVjbGFpbURldGFpbHNbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgcHVzaGludCA0MCAvLyA0MAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbisodWludDhbMzJdLHVpbnQ2NClbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDE0CiAgICAvLyBhc3NlcnQodGhpcy5kaXNidXJzZW1lbnRzKGlkKS5leGlzdHMsIEVSUl9ESVNCVVJTRU1FTlRfRE9FU19OT1RfRVhJU1QpCiAgICBpdG9iCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIGRpc2J1cnNlbWVudHMgPSBCb3hNYXA8dWludDY0LCBEaXNidXJzZW1lbnREZXRhaWxzPih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeERpc2J1cnNlbWVudHMgfSkKICAgIGJ5dGVjXzAgLy8gImQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTQKICAgIC8vIGFzc2VydCh0aGlzLmRpc2J1cnNlbWVudHMoaWQpLmV4aXN0cywgRVJSX0RJU0JVUlNFTUVOVF9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTUKICAgIC8vIGNvbnN0IHsgY3JlYXRvciwgZmluYWxpemVkLCBleHBpcmF0aW9uIH0gPSB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzMgLy8gMzIKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzMgLy8gMzIKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgcHVzaGludCA1MSAvLyA1MQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQxNwogICAgLy8gYXNzZXJ0KGNyZWF0b3IgPT09IFR4bi5zZW5kZXIsIEVSUl9ZT1VfQVJFX05PVF9USEVfQ1JFQVRPUikKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMwogICAgPT0KICAgIGFzc2VydCAvLyBZb3UgYXJlIG5vdCB0aGUgY3JlYXRvciBvZiB0aGlzIGRpc2J1cnNlbWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTgKICAgIC8vIGFzc2VydChmaW5hbGl6ZWQsIEVSUl9ESVNCVVJTRU1FTlRfQUxSRUFEWV9GSU5BTCkKICAgIHN3YXAKICAgIGFzc2VydCAvLyBEaXNidXJzZW1lbnQgYWxyZWFkeSBmaW5hbAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MTkKICAgIC8vIGFzc2VydChleHBpcmF0aW9uIDw9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAsIEVSUl9ESVNCVVJTRU1FTlRfTk9UX0VYUElSRUQpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICA8PQogICAgYXNzZXJ0IC8vIERpc2J1cnNlbWVudCBoYXMgbm90IGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgpyZWNsYWltUmV3YXJkc193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IHJlY2xhaW1SZXdhcmRzX2FmdGVyX3doaWxlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQyNAogICAgLy8gYWRkcmVzczogcmVjbGFpbXNbaV0uYWRkcmVzcywKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgICoKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDI1CiAgICAvLyBhc3NldDogcmVjbGFpbXNbaV0uYXNzZXQsCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQyNC00MjUKICAgIC8vIGFkZHJlc3M6IHJlY2xhaW1zW2ldLmFkZHJlc3MsCiAgICAvLyBhc3NldDogcmVjbGFpbXNbaV0uYXNzZXQsCiAgICBpbnRjXzMgLy8gMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDI1CiAgICAvLyBhc3NldDogcmVjbGFpbXNbaV0uYXNzZXQsCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDIyLTQyNgogICAgLy8gY29uc3QgdXNlckFsbG9jYXRpb25zS2V5OiBVc2VyQWxsb2NhdGlvbnNLZXkgPSB7CiAgICAvLyAgIGRpc2J1cnNlbWVudElEOiBpZCwKICAgIC8vICAgYWRkcmVzczogcmVjbGFpbXNbaV0uYWRkcmVzcywKICAgIC8vICAgYXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0LAogICAgLy8gfQogICAgZHVwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDUKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdXNlckFsbG9jYXRpb25zID0gQm94TWFwPFVzZXJBbGxvY2F0aW9uc0tleSwgdWludDY0Pih7IGtleVByZWZpeDogUmV3YXJkc0JveFByZWZpeFVzZXJBbGxvY2F0aW9ucyB9KQogICAgYnl0ZWNfMSAvLyAidSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MjcKICAgIC8vIGFzc2VydCh0aGlzLnVzZXJBbGxvY2F0aW9ucyh1c2VyQWxsb2NhdGlvbnNLZXkpLmV4aXN0cywgRVJSX0FMTE9DQVRJT05fRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEFsbG9jYXRpb24gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDI5CiAgICAvLyBjb25zdCB1c2VyQWxsb2NhdGlvbiA9IHRoaXMudXNlckFsbG9jYXRpb25zKHVzZXJBbGxvY2F0aW9uc0tleSkudmFsdWUKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDMxCiAgICAvLyB0aGlzLmRpc2J1cnNlbWVudHMoaWQpLnZhbHVlLmFsbG9jYXRpb25zIC09IDEKICAgIGRpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgNTkgLy8gNTkKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIGRpZyAxCiAgICBwdXNoaW50IDU5IC8vIDU5CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQzMgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRzKGlkKS52YWx1ZS5hbW91bnQgLT0gdXNlckFsbG9jYXRpb24KICAgIGR1cAogICAgcHVzaGludCAzNSAvLyAzNQogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIGl0b2IKICAgIHB1c2hpbnQgMzUgLy8gMzUKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQzMwogICAgLy8gdGhpcy51c2VyQWxsb2NhdGlvbnModXNlckFsbG9jYXRpb25zS2V5KS5kZWxldGUoKQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQzNwogICAgLy8gaWYgKCFpc0FsZ28pIHsKICAgIGJ6IHJlY2xhaW1SZXdhcmRzX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gaXR4bi5zdWJtaXRHcm91cCh4ZmVyLCBtYnJSZWZ1bmQpCiAgICBpdHhuX2JlZ2luCiAgICBkaWcgNwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyAxCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0MzgtNDQyCiAgICAvLyBjb25zdCB4ZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogY3JlYXRvciwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHVzZXJBbGxvY2F0aW9uLAogICAgLy8gICB4ZmVyQXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0LAogICAgLy8gfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDQ5CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHhmZXIsIG1iclJlZnVuZCkKICAgIGl0eG5fbmV4dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0NDYKICAgIC8vIGFtb3VudDogVXNlckFsbG9jYXRpb25NQlIsCiAgICBpbnRjIDQgLy8gMjUzMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQ0NC00NDcKICAgIC8vIGNvbnN0IG1iclJlZnVuZCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHJlY2VpdmVyOiBjcmVhdG9yLAogICAgLy8gICBhbW91bnQ6IFVzZXJBbGxvY2F0aW9uTUJSLAogICAgLy8gfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDQ5CiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHhmZXIsIG1iclJlZnVuZCkKICAgIGl0eG5fc3VibWl0CgpyZWNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IHJlY2xhaW1zLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgcmVjbGFpbVJld2FyZHNfd2hpbGVfdG9wQDIKCnJlY2xhaW1SZXdhcmRzX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0NTEtNDU2CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvciwKICAgIC8vICAgICBhbW91bnQ6IHVzZXJBbGxvY2F0aW9uICsgVXNlckFsbG9jYXRpb25NQlIsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGFtb3VudDogdXNlckFsbG9jYXRpb24gKyBVc2VyQWxsb2NhdGlvbk1CUiwKICAgIGludGMgNCAvLyAyNTMwMAogICAgKwogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQ1MS00NTUKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBjcmVhdG9yLAogICAgLy8gICAgIGFtb3VudDogdXNlckFsbG9jYXRpb24gKyBVc2VyQWxsb2NhdGlvbk1CUiwKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NDUxLTQ1NgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IGNyZWF0b3IsCiAgICAvLyAgICAgYW1vdW50OiB1c2VyQWxsb2NhdGlvbiArIFVzZXJBbGxvY2F0aW9uTUJSLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBiIHJlY2xhaW1SZXdhcmRzX2FmdGVyX2lmX2Vsc2VAOQoKcmVjbGFpbVJld2FyZHNfYWZ0ZXJfd2hpbGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjQxMwogICAgLy8gcmVjbGFpbVJld2FyZHMoaWQ6IHVpbnQ2NCwgcmVjbGFpbXM6IEFsbG9jYXRpb25SZWNsYWltRGV0YWlsc1tdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6OkFraXRhQmFzZUNvbnRyYWN0LnVwZGF0ZUFraXRhREFPW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlQWtpdGFEQU86CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozOAogICAgLy8gdXBkYXRlQWtpdGFEQU8oYWtpdGFEQU86IEFwcGxpY2F0aW9uKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmdldEFraXRhREFPV2FsbGV0KCkuYWRkcmVzcywgRVJSX05PVF9BS0lUQV9EQU8pCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozMgogICAgLy8gY29uc3QgW3dhbGxldElEXSA9IG9wLkFwcEdsb2JhbC5nZXRFeFVpbnQ2NCh0aGlzLmFraXRhREFPLnZhbHVlLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c1dhbGxldCkpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6MjkKICAgIC8vIGFraXRhREFPID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBHbG9iYWxTdGF0ZUtleUFraXRhREFPIH0pCiAgICBieXRlYyA0IC8vICJha2l0YV9kYW8iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozMgogICAgLy8gY29uc3QgW3dhbGxldElEXSA9IG9wLkFwcEdsb2JhbC5nZXRFeFVpbnQ2NCh0aGlzLmFraXRhREFPLnZhbHVlLCBCeXRlcyhBa2l0YURBT0dsb2JhbFN0YXRlS2V5c1dhbGxldCkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGJ5dGVzICJ3YWxsZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvYmFzZS50czozOQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuZ2V0QWtpdGFEQU9XYWxsZXQoKS5hZGRyZXNzLCBFUlJfTk9UX0FLSVRBX0RBTykKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgQWtpdGEgREFPIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjI5CiAgICAvLyBha2l0YURBTyA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogR2xvYmFsU3RhdGVLZXlBa2l0YURBTyB9KQogICAgYnl0ZWMgNCAvLyAiYWtpdGFfZGFvIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL2Jhc2UudHM6NDAKICAgIC8vIHRoaXMuYWtpdGFEQU8udmFsdWUgPSBha2l0YURBTwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9iYXNlLnRzOjM4CiAgICAvLyB1cGRhdGVBa2l0YURBTyhha2l0YURBTzogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnJbcm91dGluZ10oKSAtPiB2b2lkOgptYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL3Jld2FyZHMvYmFzZS50czo6QmFzZVJld2FyZHMubWJyCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjpDb250cmFjdFdpdGhPcHRJbi5vcHRJbltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluOgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjIzCiAgICAvLyBvcHRJbihwYXltZW50OiBndHhuLlBheW1lbnRUeG4sIGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjI1LTMyCiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvb3B0aW4udHM6MjgKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvYmFzZS1jb250cmFjdHMvb3B0aW4udHM6MjUtMzIKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgdW5jb3ZlciAyCiAgICBndHhucyBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czoyOQogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UsCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czoyNS0zMgogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIEludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM0LTQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM2CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM3CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czozNC0zOQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL2Jhc2UtY29udHJhY3RzL29wdGluLnRzOjM0LTQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9iYXNlLWNvbnRyYWN0cy9vcHRpbi50czoyMwogICAgLy8gb3B0SW4ocGF5bWVudDogZ3R4bi5QYXltZW50VHhuLCBhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjpSZXdhcmRzLm5ld0Rpc2J1cnNlbWVudElEKCkgLT4gdWludDY0OgpuZXdEaXNidXJzZW1lbnRJRDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODEKICAgIC8vIGNvbnN0IGlkID0gdGhpcy5kaXNidXJzZW1lbnRJRC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGRpc2J1cnNlbWVudElEID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMSwga2V5OiBSZXdhcmRzR2xvYmFsU3RhdGVLZXlEaXNidXJzZW1lbnRJRCB9KQogICAgYnl0ZWNfMyAvLyAiZGlzYnVyc2VtZW50X2lkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgaWQgPSB0aGlzLmRpc2J1cnNlbWVudElELnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gdGhpcy5kaXNidXJzZW1lbnRJRC52YWx1ZSArPSAxCiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9jb250cmFjdC5hbGdvLnRzOjYwCiAgICAvLyBkaXNidXJzZW1lbnRJRCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDEsIGtleTogUmV3YXJkc0dsb2JhbFN0YXRlS2V5RGlzYnVyc2VtZW50SUQgfSkKICAgIGJ5dGVjXzMgLy8gImRpc2J1cnNlbWVudF9pZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIHRoaXMuZGlzYnVyc2VtZW50SUQudmFsdWUgKz0gMQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2NvbnRyYWN0LmFsZ28udHM6ODMKICAgIC8vIHJldHVybiBpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvYmFzZS50czo6QmFzZVJld2FyZHMubWJyKHRpdGxlOiBieXRlcywgbm90ZTogYnl0ZXMpIC0+IGJ5dGVzOgpzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjpCYXNlUmV3YXJkcy5tYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjctOAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBtYnIodGl0bGU6IHN0cmluZywgbm90ZTogc3RyaW5nKTogUmV3YXJkc01CUkRhdGEgewogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmV3YXJkcy9iYXNlLnRzOjEwCiAgICAvLyBkaXNidXJzZW1lbnRzOiBNaW5EaXNidXJzZW1lbnRzTUJSICsgKEJveENvc3RQZXJCeXRlICogKEJ5dGVzKHRpdGxlKS5sZW5ndGggKyBCeXRlcyhub3RlKS5sZW5ndGgpKSwKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgKwogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAqCiAgICBpbnRjIDUgLy8gMzUzMDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2Jhc2UudHM6OS0xMgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgZGlzYnVyc2VtZW50czogTWluRGlzYnVyc2VtZW50c01CUiArIChCb3hDb3N0UGVyQnl0ZSAqIChCeXRlcyh0aXRsZSkubGVuZ3RoICsgQnl0ZXMobm90ZSkubGVuZ3RoKSksCiAgICAvLyAgIHVzZXJBbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25NQlIKICAgIC8vIH0KICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZXdhcmRzL2Jhc2UudHM6MTEKICAgIC8vIHVzZXJBbGxvY2F0aW9uczogVXNlckFsbG9jYXRpb25NQlIKICAgIGludGMgNCAvLyAyNTMwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Jld2FyZHMvYmFzZS50czo5LTEyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBkaXNidXJzZW1lbnRzOiBNaW5EaXNidXJzZW1lbnRzTUJSICsgKEJveENvc3RQZXJCeXRlICogKEJ5dGVzKHRpdGxlKS5sZW5ndGggKyBCeXRlcyhub3RlKS5sZW5ndGgpKSwKICAgIC8vICAgdXNlckFsbG9jYXRpb25zOiBVc2VyQWxsb2NhdGlvbk1CUgogICAgLy8gfQogICAgaXRvYgogICAgY29uY2F0CiAgICByZXRzdWIK\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"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\",\"clear\":\"C4EBQw==\"},\"events\":[],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n// Type definitions for ARC-56 structs\n\nexport type DisbursementDetails = {\n creator: string,\n finalized: boolean,\n title: string,\n amount: bigint,\n timeToUnlock: bigint,\n expiration: bigint,\n allocations: bigint,\n distributed: bigint,\n note: string\n}\n\n\n/**\n * Converts the ABI tuple representation of a DisbursementDetails to the struct representation\n */\nexport function DisbursementDetailsFromTuple(abiTuple: [string, boolean, string, bigint, bigint, bigint, bigint, bigint, string]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.DisbursementDetails, APP_SPEC.structs) as DisbursementDetails\n}\n\nexport type RewardsMbrData = {\n disbursements: bigint,\n userAllocations: bigint\n}\n\n\n/**\n * Converts the ABI tuple representation of a RewardsMBRData to the struct representation\n */\nexport function RewardsMbrDataFromTuple(abiTuple: [bigint, bigint]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.RewardsMBRData, APP_SPEC.structs) as RewardsMbrData\n}\n\nexport type UserAllocationsKey = {\n address: string,\n asset: bigint,\n disbursementId: bigint\n}\n\n\n/**\n * Converts the ABI tuple representation of a UserAllocationsKey to the struct representation\n */\nexport function UserAllocationsKeyFromTuple(abiTuple: [string, bigint, bigint]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.UserAllocationsKey, APP_SPEC.structs) as UserAllocationsKey\n}\n\n/**\n * The argument types for the Rewards contract\n */\nexport type RewardsArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'create(string,uint64)void': {\n version: string\n akitaDao: bigint | number\n }\n 'createDisbursement(pay,string,uint64,uint64,string)uint64': {\n mbrPayment: AppMethodCallTransactionArgument\n title: string\n timeToUnlock: bigint | number\n expiration: bigint | number\n note: string\n }\n 'editDisbursement(uint64,string,uint64,uint64,string)void': {\n id: bigint | number\n title: string\n timeToUnlock: bigint | number\n expiration: bigint | number\n note: string\n }\n 'createUserAllocations(pay,uint64,(address,uint64)[])void': {\n payment: AppMethodCallTransactionArgument\n id: bigint | number\n allocations: [string, bigint | number][]\n }\n 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void': {\n mbrPayment: AppMethodCallTransactionArgument\n assetXfer: AppMethodCallTransactionArgument\n id: bigint | number\n allocations: [string, bigint | number][]\n }\n 'finalizeDisbursement(uint64)void': {\n id: bigint | number\n }\n 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64': {\n mbrPayment: AppMethodCallTransactionArgument\n timeToUnlock: bigint | number\n expiration: bigint | number\n allocations: [string, bigint | number][]\n }\n 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64': {\n mbrPayment: AppMethodCallTransactionArgument\n assetXfer: AppMethodCallTransactionArgument\n timeToUnlock: bigint | number\n expiration: bigint | number\n allocations: [string, bigint | number][]\n }\n 'claimRewards((uint64,uint64)[])void': {\n rewards: [bigint | number, bigint | number][]\n }\n 'reclaimRewards(uint64,(address,uint64)[])void': {\n id: bigint | number\n reclaims: [string, bigint | number][]\n }\n 'updateAkitaDAO(uint64)void': {\n akitaDao: bigint | number\n }\n 'opUp()void': Record<string, never>\n 'mbr(string,string)(uint64,uint64)': {\n title: string\n note: string\n }\n 'optIn(pay,uint64)void': {\n /**\n * The payment transaction\n */\n payment: AppMethodCallTransactionArgument\n /**\n * The asset to be opted into\n */\n asset: bigint | number\n }\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'create(string,uint64)void': [version: string, akitaDao: bigint | number]\n 'createDisbursement(pay,string,uint64,uint64,string)uint64': [mbrPayment: AppMethodCallTransactionArgument, title: string, timeToUnlock: bigint | number, expiration: bigint | number, note: string]\n 'editDisbursement(uint64,string,uint64,uint64,string)void': [id: bigint | number, title: string, timeToUnlock: bigint | number, expiration: bigint | number, note: string]\n 'createUserAllocations(pay,uint64,(address,uint64)[])void': [payment: AppMethodCallTransactionArgument, id: bigint | number, allocations: [string, bigint | number][]]\n 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void': [mbrPayment: AppMethodCallTransactionArgument, assetXfer: AppMethodCallTransactionArgument, id: bigint | number, allocations: [string, bigint | number][]]\n 'finalizeDisbursement(uint64)void': [id: bigint | number]\n 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64': [mbrPayment: AppMethodCallTransactionArgument, timeToUnlock: bigint | number, expiration: bigint | number, allocations: [string, bigint | number][]]\n 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64': [mbrPayment: AppMethodCallTransactionArgument, assetXfer: AppMethodCallTransactionArgument, timeToUnlock: bigint | number, expiration: bigint | number, allocations: [string, bigint | number][]]\n 'claimRewards((uint64,uint64)[])void': [rewards: [bigint | number, bigint | number][]]\n 'reclaimRewards(uint64,(address,uint64)[])void': [id: bigint | number, reclaims: [string, bigint | number][]]\n 'updateAkitaDAO(uint64)void': [akitaDao: bigint | number]\n 'opUp()void': []\n 'mbr(string,string)(uint64,uint64)': [title: string, note: string]\n 'optIn(pay,uint64)void': [payment: AppMethodCallTransactionArgument, asset: bigint | number]\n }\n}\n\n/**\n * The return type for each method\n */\nexport type RewardsReturns = {\n 'create(string,uint64)void': void\n 'createDisbursement(pay,string,uint64,uint64,string)uint64': bigint\n 'editDisbursement(uint64,string,uint64,uint64,string)void': void\n 'createUserAllocations(pay,uint64,(address,uint64)[])void': void\n 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void': void\n 'finalizeDisbursement(uint64)void': void\n 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64': bigint\n 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64': bigint\n 'claimRewards((uint64,uint64)[])void': void\n 'reclaimRewards(uint64,(address,uint64)[])void': void\n 'updateAkitaDAO(uint64)void': void\n 'opUp()void': void\n 'mbr(string,string)(uint64,uint64)': RewardsMbrData\n 'optIn(pay,uint64)void': void\n}\n\n/**\n * Defines the types of available calls and state of the Rewards smart contract.\n */\nexport type RewardsTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'create(string,uint64)void' | 'create', {\n argsObj: RewardsArgs['obj']['create(string,uint64)void']\n argsTuple: RewardsArgs['tuple']['create(string,uint64)void']\n returns: RewardsReturns['create(string,uint64)void']\n }>\n & Record<'createDisbursement(pay,string,uint64,uint64,string)uint64' | 'createDisbursement', {\n argsObj: RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64']\n argsTuple: RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']\n returns: RewardsReturns['createDisbursement(pay,string,uint64,uint64,string)uint64']\n }>\n & Record<'editDisbursement(uint64,string,uint64,uint64,string)void' | 'editDisbursement', {\n argsObj: RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void']\n argsTuple: RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']\n returns: RewardsReturns['editDisbursement(uint64,string,uint64,uint64,string)void']\n }>\n & Record<'createUserAllocations(pay,uint64,(address,uint64)[])void' | 'createUserAllocations', {\n argsObj: RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']\n returns: RewardsReturns['createUserAllocations(pay,uint64,(address,uint64)[])void']\n }>\n & Record<'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void' | 'createAsaUserAllocations', {\n argsObj: RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']\n returns: RewardsReturns['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']\n }>\n & Record<'finalizeDisbursement(uint64)void' | 'finalizeDisbursement', {\n argsObj: RewardsArgs['obj']['finalizeDisbursement(uint64)void']\n argsTuple: RewardsArgs['tuple']['finalizeDisbursement(uint64)void']\n returns: RewardsReturns['finalizeDisbursement(uint64)void']\n }>\n & Record<'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64' | 'createInstantDisbursement', {\n argsObj: RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']\n argsTuple: RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']\n returns: RewardsReturns['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']\n }>\n & Record<'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64' | 'createInstantAsaDisbursement', {\n argsObj: RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']\n argsTuple: RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']\n returns: RewardsReturns['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']\n }>\n & Record<'claimRewards((uint64,uint64)[])void' | 'claimRewards', {\n argsObj: RewardsArgs['obj']['claimRewards((uint64,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']\n returns: RewardsReturns['claimRewards((uint64,uint64)[])void']\n }>\n & Record<'reclaimRewards(uint64,(address,uint64)[])void' | 'reclaimRewards', {\n argsObj: RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void']\n argsTuple: RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']\n returns: RewardsReturns['reclaimRewards(uint64,(address,uint64)[])void']\n }>\n & Record<'updateAkitaDAO(uint64)void' | 'updateAkitaDAO', {\n argsObj: RewardsArgs['obj']['updateAkitaDAO(uint64)void']\n argsTuple: RewardsArgs['tuple']['updateAkitaDAO(uint64)void']\n returns: RewardsReturns['updateAkitaDAO(uint64)void']\n }>\n & Record<'opUp()void' | 'opUp', {\n argsObj: RewardsArgs['obj']['opUp()void']\n argsTuple: RewardsArgs['tuple']['opUp()void']\n returns: RewardsReturns['opUp()void']\n }>\n & Record<'mbr(string,string)(uint64,uint64)' | 'mbr', {\n argsObj: RewardsArgs['obj']['mbr(string,string)(uint64,uint64)']\n argsTuple: RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']\n returns: RewardsReturns['mbr(string,string)(uint64,uint64)']\n }>\n & Record<'optIn(pay,uint64)void' | 'optIn', {\n argsObj: RewardsArgs['obj']['optIn(pay,uint64)void']\n argsTuple: RewardsArgs['tuple']['optIn(pay,uint64)void']\n returns: RewardsReturns['optIn(pay,uint64)void']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * the disbursement id cursor\n */\n disbursementId: bigint\n /**\n * the current version of the contract\n */\n version: string\n /**\n * the app ID of the Akita DAO\n */\n akitaDao: bigint\n }\n maps: {}\n }\n box: {\n keys: {}\n maps: {\n /**\n * the disbursement map of tokens\n \n the key is the uint64 id of the disbursement\n the value is the details of the disbursement\n\n */\n disbursements: Map<bigint | number, DisbursementDetails>\n /**\n * the user allocations of disbursements\n \n the key is the address of the qualified account with the uint64 id of the disbursement\n the value is the amount they are owed\n\n */\n userAllocations: Map<UserAllocationsKey, bigint>\n }\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type RewardsSignatures = keyof RewardsTypes['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type RewardsNonVoidMethodSignatures = keyof RewardsTypes['methods'] extends infer T ? T extends keyof RewardsTypes['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the Rewards smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends RewardsSignatures> = RewardsTypes['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the Rewards smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends RewardsSignatures> = RewardsTypes['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = RewardsTypes['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = RewardsTypes['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type RewardsCreateCallParams =\n | Expand<CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n | Expand<CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & {method: 'create(string,uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type RewardsDeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: RewardsCreateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Rewards smart contract\n */\nexport abstract class RewardsParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends RewardsCreateCallParams & {method: string}>(params: TParams) {\n switch(params.method) {\n case 'create':\n case 'create(string,uint64)void':\n return RewardsParamsFactory.create.create(params)\n }\n throw new Error(`Unknown ' + verb + ' method`)\n },\n\n /**\n * Constructs create ABI call params for the Rewards smart contract using the create(string,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n create(params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} {\n return {\n ...params,\n method: 'create(string,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.version, params.args.akitaDao],\n }\n },\n }\n }\n\n /**\n * Constructs a no op call for the createDisbursement(pay,string,uint64,uint64,string)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createDisbursement(params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createDisbursement(pay,string,uint64,uint64,string)uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.title, params.args.timeToUnlock, params.args.expiration, params.args.note],\n }\n }\n /**\n * Constructs a no op call for the editDisbursement(uint64,string,uint64,uint64,string)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static editDisbursement(params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'editDisbursement(uint64,string,uint64,uint64,string)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.id, params.args.title, params.args.timeToUnlock, params.args.expiration, params.args.note],\n }\n }\n /**\n * Constructs a no op call for the createUserAllocations(pay,uint64,(address,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createUserAllocations(params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createUserAllocations(pay,uint64,(address,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.id, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createAsaUserAllocations(params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.assetXfer, params.args.id, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the finalizeDisbursement(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static finalizeDisbursement(params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'finalizeDisbursement(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.id],\n }\n }\n /**\n * Constructs a no op call for the createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createInstantDisbursement(params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.timeToUnlock, params.args.expiration, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static createInstantAsaDisbursement(params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.mbrPayment, params.args.assetXfer, params.args.timeToUnlock, params.args.expiration, params.args.allocations],\n }\n }\n /**\n * Constructs a no op call for the claimRewards((uint64,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static claimRewards(params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'claimRewards((uint64,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.rewards],\n }\n }\n /**\n * Constructs a no op call for the reclaimRewards(uint64,(address,uint64)[])void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static reclaimRewards(params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'reclaimRewards(uint64,(address,uint64)[])void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.id, params.args.reclaims],\n }\n }\n /**\n * Constructs a no op call for the updateAkitaDAO(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static updateAkitaDao(params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'updateAkitaDAO(uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.akitaDao],\n }\n }\n /**\n * Constructs a no op call for the opUp()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static opUp(params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'opUp()void' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the mbr(string,string)(uint64,uint64) ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static mbr(params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'mbr(string,string)(uint64,uint64)' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.title, params.args.note],\n }\n }\n /**\n * Constructs a no op call for the optIn(pay,uint64)void ABI method\n *\n * optin tells the contract to opt into an asa\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optIn(params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'optIn(pay,uint64)void' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.asset],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Rewards smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class RewardsFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `RewardsFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new RewardsClient(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new RewardsClient(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the Rewards smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: RewardsDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method ? RewardsParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (RewardsCreateCallParams & { args: Uint8Array[] }) : undefined,\n })\n return { result: result.result, appClient: new RewardsClient(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Rewards smart contract using the create(string,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n create: (params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.params.create(RewardsParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Rewards smart contract using the create(string,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n create: (params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appFactory.createTransaction.create(RewardsParamsFactory.create.create(params))\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Rewards smart contract using an ABI method call using the create(string,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n create: async (params: CallParams<RewardsArgs['obj']['create(string,uint64)void'] | RewardsArgs['tuple']['create(string,uint64)void']> & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appFactory.send.create(RewardsParamsFactory.create.create(params))\n return { result: { ...result.result, return: result.result.return as unknown as (undefined | RewardsReturns['create(string,uint64)void']) }, appClient: new RewardsClient(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the Rewards smart contract\n */\nexport class RewardsClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `RewardsClient`\n *\n * @param appClient An `AppClient` instance which has been created with the Rewards app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `RewardsClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends RewardsNonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `RewardsClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<RewardsClient> {\n return new RewardsClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `RewardsClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<RewardsClient> {\n return new RewardsClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createDisbursement(pay,string,uint64,uint64,string)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createDisbursement: (params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `editDisbursement(uint64,string,uint64,uint64,string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n editDisbursement: (params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.editDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createUserAllocations(pay,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createUserAllocations: (params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createAsaUserAllocations: (params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createAsaUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `finalizeDisbursement(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n finalizeDisbursement: (params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.finalizeDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createInstantDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createInstantDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n createInstantAsaDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.createInstantAsaDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `claimRewards((uint64,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n claimRewards: (params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.claimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `reclaimRewards(uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n reclaimRewards: (params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.reclaimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n updateAkitaDao: (params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n opUp: (params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(RewardsParamsFactory.opUp(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n mbr: (params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.mbr(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optIn: (params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(RewardsParamsFactory.optIn(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createDisbursement(pay,string,uint64,uint64,string)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createDisbursement: (params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `editDisbursement(uint64,string,uint64,uint64,string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n editDisbursement: (params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.editDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createUserAllocations(pay,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createUserAllocations: (params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createAsaUserAllocations: (params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createAsaUserAllocations(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `finalizeDisbursement(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n finalizeDisbursement: (params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.finalizeDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createInstantDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createInstantDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n createInstantAsaDisbursement: (params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.createInstantAsaDisbursement(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `claimRewards((uint64,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n claimRewards: (params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.claimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `reclaimRewards(uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n reclaimRewards: (params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.reclaimRewards(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n updateAkitaDao: (params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.updateAkitaDao(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n opUp: (params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.opUp(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n mbr: (params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.mbr(params))\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optIn: (params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(RewardsParamsFactory.optIn(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createDisbursement(pay,string,uint64,uint64,string)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createDisbursement: async (params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createDisbursement(pay,string,uint64,uint64,string)uint64'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `editDisbursement(uint64,string,uint64,uint64,string)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n editDisbursement: async (params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.editDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['editDisbursement(uint64,string,uint64,uint64,string)void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createUserAllocations(pay,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createUserAllocations: async (params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createUserAllocations(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createUserAllocations(pay,uint64,(address,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createAsaUserAllocations: async (params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createAsaUserAllocations(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `finalizeDisbursement(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n finalizeDisbursement: async (params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.finalizeDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['finalizeDisbursement(uint64)void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createInstantDisbursement: async (params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createInstantDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n createInstantAsaDisbursement: async (params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.createInstantAsaDisbursement(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `claimRewards((uint64,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n claimRewards: async (params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.claimRewards(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['claimRewards((uint64,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `reclaimRewards(uint64,(address,uint64)[])void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n reclaimRewards: async (params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.reclaimRewards(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['reclaimRewards(uint64,(address,uint64)[])void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `updateAkitaDAO(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n updateAkitaDao: async (params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.updateAkitaDao(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['updateAkitaDAO(uint64)void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `opUp()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n opUp: async (params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.opUp(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['opUp()void'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n mbr: async (params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.mbr(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['mbr(string,string)(uint64,uint64)'])}\n },\n\n /**\n * Makes a call to the Rewards smart contract using the `optIn(pay,uint64)void` ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optIn: async (params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(RewardsParamsFactory.optIn(params))\n return {...result, return: result.return as unknown as (undefined | RewardsReturns['optIn(pay,uint64)void'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new RewardsClient(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the Rewards smart contract using the `mbr(string,string)(uint64,uint64)` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async mbr(params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']>) {\n const result = await this.appClient.send.call(RewardsParamsFactory.mbr(params))\n return result.return as unknown as RewardsReturns['mbr(string,string)(uint64,uint64)']\n }\n\n /**\n * Methods to access state for the current Rewards app\n */\n state = {\n /**\n * Methods to access global state for the current Rewards app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n disbursementId: result.disbursementID,\n version: result.version,\n akitaDao: result.akitaDAO,\n }\n },\n /**\n * Get the current value of the disbursementID key in global state\n */\n disbursementId: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"disbursementID\")) as bigint | undefined },\n /**\n * Get the current value of the version key in global state\n */\n version: async (): Promise<string | undefined> => { return (await this.appClient.state.global.getValue(\"version\")) as string | undefined },\n /**\n * Get the current value of the akitaDAO key in global state\n */\n akitaDao: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"akitaDAO\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current Rewards app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n }\n },\n /**\n * Get values from the disbursements map in box state\n */\n disbursements: {\n /**\n * Get all current values of the disbursements map in box state\n */\n getMap: async (): Promise<Map<bigint, DisbursementDetails>> => { return (await this.appClient.state.box.getMap(\"disbursements\")) as Map<bigint, DisbursementDetails> },\n /**\n * Get a current value of the disbursements map by key from box state\n */\n value: async (key: bigint | number): Promise<DisbursementDetails | undefined> => { return await this.appClient.state.box.getMapValue(\"disbursements\", key) as DisbursementDetails | undefined },\n },\n /**\n * Get values from the userAllocations map in box state\n */\n userAllocations: {\n /**\n * Get all current values of the userAllocations map in box state\n */\n getMap: async (): Promise<Map<UserAllocationsKey, bigint>> => { return (await this.appClient.state.box.getMap(\"userAllocations\")) as Map<UserAllocationsKey, bigint> },\n /**\n * Get a current value of the userAllocations map by key from box state\n */\n value: async (key: UserAllocationsKey): Promise<bigint | undefined> => { return await this.appClient.state.box.getMapValue(\"userAllocations\", key) as bigint | undefined },\n },\n },\n }\n\n public newGroup(): RewardsComposer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a createDisbursement(pay,string,uint64,uint64,string)uint64 method call against the Rewards contract\n */\n createDisbursement(params: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createDisbursement(params)))\n resultMappers.push((v) => client.decodeReturnValue('createDisbursement(pay,string,uint64,uint64,string)uint64', v))\n return this\n },\n /**\n * Add a editDisbursement(uint64,string,uint64,uint64,string)void method call against the Rewards contract\n */\n editDisbursement(params: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.editDisbursement(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a createUserAllocations(pay,uint64,(address,uint64)[])void method call against the Rewards contract\n */\n createUserAllocations(params: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createUserAllocations(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void method call against the Rewards contract\n */\n createAsaUserAllocations(params: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createAsaUserAllocations(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a finalizeDisbursement(uint64)void method call against the Rewards contract\n */\n finalizeDisbursement(params: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.finalizeDisbursement(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64 method call against the Rewards contract\n */\n createInstantDisbursement(params: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createInstantDisbursement(params)))\n resultMappers.push((v) => client.decodeReturnValue('createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64', v))\n return this\n },\n /**\n * Add a createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64 method call against the Rewards contract\n */\n createInstantAsaDisbursement(params: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.createInstantAsaDisbursement(params)))\n resultMappers.push((v) => client.decodeReturnValue('createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64', v))\n return this\n },\n /**\n * Add a claimRewards((uint64,uint64)[])void method call against the Rewards contract\n */\n claimRewards(params: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.claimRewards(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a reclaimRewards(uint64,(address,uint64)[])void method call against the Rewards contract\n */\n reclaimRewards(params: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.reclaimRewards(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a updateAkitaDAO(uint64)void method call against the Rewards contract\n */\n updateAkitaDao(params: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.updateAkitaDao(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a opUp()void method call against the Rewards contract\n */\n opUp(params: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.opUp(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a mbr(string,string)(uint64,uint64) method call against the Rewards contract\n */\n mbr(params: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.mbr(params)))\n resultMappers.push((v) => client.decodeReturnValue('mbr(string,string)(uint64,uint64)', v))\n return this\n },\n /**\n * Add a optIn(pay,uint64)void method call against the Rewards contract\n */\n optIn(params: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optIn(params)))\n resultMappers.push(undefined)\n return this\n },\n /**\n * Add a clear state call to the Rewards contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as RewardsComposer\n }\n}\nexport type RewardsComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the createDisbursement(pay,string,uint64,uint64,string)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createDisbursement(params?: CallParams<RewardsArgs['obj']['createDisbursement(pay,string,uint64,uint64,string)uint64'] | RewardsArgs['tuple']['createDisbursement(pay,string,uint64,uint64,string)uint64']>): RewardsComposer<[...TReturns, RewardsReturns['createDisbursement(pay,string,uint64,uint64,string)uint64'] | undefined]>\n\n /**\n * Calls the editDisbursement(uint64,string,uint64,uint64,string)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n editDisbursement(params?: CallParams<RewardsArgs['obj']['editDisbursement(uint64,string,uint64,uint64,string)void'] | RewardsArgs['tuple']['editDisbursement(uint64,string,uint64,uint64,string)void']>): RewardsComposer<[...TReturns, RewardsReturns['editDisbursement(uint64,string,uint64,uint64,string)void'] | undefined]>\n\n /**\n * Calls the createUserAllocations(pay,uint64,(address,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createUserAllocations(params?: CallParams<RewardsArgs['obj']['createUserAllocations(pay,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createUserAllocations(pay,uint64,(address,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['createUserAllocations(pay,uint64,(address,uint64)[])void'] | undefined]>\n\n /**\n * Calls the createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createAsaUserAllocations(params?: CallParams<RewardsArgs['obj']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['createAsaUserAllocations(pay,axfer,uint64,(address,uint64)[])void'] | undefined]>\n\n /**\n * Calls the finalizeDisbursement(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n finalizeDisbursement(params?: CallParams<RewardsArgs['obj']['finalizeDisbursement(uint64)void'] | RewardsArgs['tuple']['finalizeDisbursement(uint64)void']>): RewardsComposer<[...TReturns, RewardsReturns['finalizeDisbursement(uint64)void'] | undefined]>\n\n /**\n * Calls the createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createInstantDisbursement(params?: CallParams<RewardsArgs['obj']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64']>): RewardsComposer<[...TReturns, RewardsReturns['createInstantDisbursement(pay,uint64,uint64,(address,uint64)[])uint64'] | undefined]>\n\n /**\n * Calls the createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n createInstantAsaDisbursement(params?: CallParams<RewardsArgs['obj']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | RewardsArgs['tuple']['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64']>): RewardsComposer<[...TReturns, RewardsReturns['createInstantAsaDisbursement(pay,axfer,uint64,uint64,(address,uint64)[])uint64'] | undefined]>\n\n /**\n * Calls the claimRewards((uint64,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claimRewards(params?: CallParams<RewardsArgs['obj']['claimRewards((uint64,uint64)[])void'] | RewardsArgs['tuple']['claimRewards((uint64,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['claimRewards((uint64,uint64)[])void'] | undefined]>\n\n /**\n * Calls the reclaimRewards(uint64,(address,uint64)[])void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n reclaimRewards(params?: CallParams<RewardsArgs['obj']['reclaimRewards(uint64,(address,uint64)[])void'] | RewardsArgs['tuple']['reclaimRewards(uint64,(address,uint64)[])void']>): RewardsComposer<[...TReturns, RewardsReturns['reclaimRewards(uint64,(address,uint64)[])void'] | undefined]>\n\n /**\n * Calls the updateAkitaDAO(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n updateAkitaDao(params?: CallParams<RewardsArgs['obj']['updateAkitaDAO(uint64)void'] | RewardsArgs['tuple']['updateAkitaDAO(uint64)void']>): RewardsComposer<[...TReturns, RewardsReturns['updateAkitaDAO(uint64)void'] | undefined]>\n\n /**\n * Calls the opUp()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n opUp(params?: CallParams<RewardsArgs['obj']['opUp()void'] | RewardsArgs['tuple']['opUp()void']>): RewardsComposer<[...TReturns, RewardsReturns['opUp()void'] | undefined]>\n\n /**\n * Calls the mbr(string,string)(uint64,uint64) ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n mbr(params?: CallParams<RewardsArgs['obj']['mbr(string,string)(uint64,uint64)'] | RewardsArgs['tuple']['mbr(string,string)(uint64,uint64)']>): RewardsComposer<[...TReturns, RewardsReturns['mbr(string,string)(uint64,uint64)'] | undefined]>\n\n /**\n * Calls the optIn(pay,uint64)void ABI method.\n *\n * optin tells the contract to opt into an asa\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optIn(params?: CallParams<RewardsArgs['obj']['optIn(pay,uint64)void'] | RewardsArgs['tuple']['optIn(pay,uint64)void']>): RewardsComposer<[...TReturns, RewardsReturns['optIn(pay,uint64)void'] | undefined]>\n\n /**\n * Makes a clear_state call to an existing instance of the Rewards smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): RewardsComposer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): RewardsComposer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<RewardsComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<RewardsComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<RewardsComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<RewardsComposerResults<TReturns>>\n}\nexport type RewardsComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n"]}