@bitgo-beta/sdk-coin-sol 7.6.4-beta.720 → 7.6.4-beta.721

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 (40) hide show
  1. package/LICENSE +191 -0
  2. package/dist/cjs/src/lib/constants.d.ts +7 -0
  3. package/dist/cjs/src/lib/constants.d.ts.map +1 -1
  4. package/dist/cjs/src/lib/constants.js +9 -2
  5. package/dist/cjs/src/lib/customInstructionBuilder.d.ts +13 -2
  6. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -1
  7. package/dist/cjs/src/lib/customInstructionBuilder.js +131 -28
  8. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
  9. package/dist/cjs/src/lib/instructionParamsFactory.js +81 -21
  10. package/dist/cjs/src/lib/transaction.d.ts +12 -1
  11. package/dist/cjs/src/lib/transaction.d.ts.map +1 -1
  12. package/dist/cjs/src/lib/transaction.js +31 -1
  13. package/dist/cjs/src/lib/transactionBuilder.d.ts +33 -0
  14. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -1
  15. package/dist/cjs/src/lib/transactionBuilder.js +75 -1
  16. package/dist/cjs/src/lib/utils.d.ts.map +1 -1
  17. package/dist/cjs/src/lib/utils.js +12 -4
  18. package/dist/cjs/test/unit/transaction.js +22 -1
  19. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts +2 -0
  20. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts.map +1 -0
  21. package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.js +346 -0
  22. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +334 -23
  23. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  24. package/dist/esm/lib/constants.d.ts +7 -0
  25. package/dist/esm/lib/constants.d.ts.map +1 -1
  26. package/dist/esm/lib/constants.js +8 -1
  27. package/dist/esm/lib/customInstructionBuilder.d.ts +13 -2
  28. package/dist/esm/lib/customInstructionBuilder.d.ts.map +1 -1
  29. package/dist/esm/lib/customInstructionBuilder.js +132 -29
  30. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
  31. package/dist/esm/lib/instructionParamsFactory.js +81 -21
  32. package/dist/esm/lib/transaction.d.ts +12 -1
  33. package/dist/esm/lib/transaction.d.ts.map +1 -1
  34. package/dist/esm/lib/transaction.js +31 -1
  35. package/dist/esm/lib/transactionBuilder.d.ts +33 -0
  36. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -1
  37. package/dist/esm/lib/transactionBuilder.js +76 -2
  38. package/dist/esm/lib/utils.d.ts.map +1 -1
  39. package/dist/esm/lib/utils.js +12 -4
  40. package/package.json +8 -8
@@ -1,4 +1,4 @@
1
- import { BaseTransaction, ITokenEnablement, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
1
+ import { PublicKey as BasePublicKey, BaseTransaction, ITokenEnablement, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
3
  import { Transaction as SolTransaction, VersionedTransaction } from '@solana/web3.js';
4
4
  import BigNumber from 'bignumber.js';
@@ -89,6 +89,17 @@ export declare class Transaction extends BaseTransaction {
89
89
  * @param {VersionedTransactionData | undefined} data The versioned transaction data to store, or undefined to clear
90
90
  */
91
91
  setVersionedTransactionData(data: VersionedTransactionData | undefined): void;
92
+ /**
93
+ * Add a signature produced by the fee payer of this transaction.
94
+ *
95
+ * The fee payer is account 0 of the transaction message, so its signature belongs in slot 0.
96
+ * Use this for signatures produced by the enterprise fee address key (HSM single-sig) of a
97
+ * sponsored transaction.
98
+ *
99
+ * @param {BasePublicKey} publicKey The public key of the fee payer; must be account 0 of the message
100
+ * @param {Buffer} signature The signature of the transaction payload
101
+ */
102
+ addFeePayerSignature(publicKey: BasePublicKey, signature: Buffer): void;
92
103
  /** @inheritdoc */
93
104
  canSign(): boolean;
94
105
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
@@ -180,6 +180,36 @@ export class Transaction extends BaseTransaction {
180
180
  setVersionedTransactionData(data) {
181
181
  this._versionedTransactionData = data;
182
182
  }
183
+ /**
184
+ * Add a signature produced by the fee payer of this transaction.
185
+ *
186
+ * The fee payer is account 0 of the transaction message, so its signature belongs in slot 0.
187
+ * Use this for signatures produced by the enterprise fee address key (HSM single-sig) of a
188
+ * sponsored transaction.
189
+ *
190
+ * @param {BasePublicKey} publicKey The public key of the fee payer; must be account 0 of the message
191
+ * @param {Buffer} signature The signature of the transaction payload
192
+ */
193
+ addFeePayerSignature(publicKey, signature) {
194
+ if (this._versionedTransaction) {
195
+ const account0 = this._versionedTransaction.message.staticAccountKeys[0]?.toBase58();
196
+ if (publicKey.pub !== account0) {
197
+ throw new SigningError(`Fee payer signature must come from account 0 of the message, got: ${publicKey.pub}`);
198
+ }
199
+ this._versionedTransaction.addSignature(new PublicKey(publicKey.pub), signature);
200
+ return;
201
+ }
202
+ if (this._solTransaction) {
203
+ // For legacy transactions @solana/web3.js places the fee payer first in the message
204
+ const feePayer = this._solTransaction.feePayer?.toBase58();
205
+ if (publicKey.pub !== feePayer) {
206
+ throw new SigningError(`Fee payer signature must come from account 0 of the message, got: ${publicKey.pub}`);
207
+ }
208
+ this._solTransaction.addSignature(new PublicKey(publicKey.pub), signature);
209
+ return;
210
+ }
211
+ throw new SigningError('Fee payer signature requires a built transaction');
212
+ }
183
213
  /** @inheritdoc */
184
214
  canSign() {
185
215
  return true;
@@ -651,4 +681,4 @@ export class Transaction extends BaseTransaction {
651
681
  };
652
682
  }
653
683
  }
654
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLHFCQUFxQixFQUNyQixZQUFZLEVBRVosZUFBZSxHQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxJQUFJLGNBQWMsRUFDN0IsaUJBQWlCLEdBRWxCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUscUJBQXFCLEVBQVcsTUFBTSxHQUFHLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLHlCQUF5QixHQUMxQixNQUFNLGFBQWEsQ0FBQztBQWlCckIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQix5QkFBeUIsR0FDMUIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsTUFBTSxPQUFPLFdBQVksU0FBUSxlQUFlO0lBWTlDLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBUlgsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQUM5Qyw4QkFBeUIsR0FBRyxLQUFLLENBQUM7SUFRMUMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEVBQWtCO1FBQ25DLElB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LEVBQUUsRUFBRTtZQUNYLEdBQUcsRUFBRTtnQkFDSCxHQUFHLEVBQUUsU0FBUztnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUNuQztZQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzFCLFlBQVksRUFBRSxZQUFZO1lBQzFCLGdCQUFnQixFQUFFLHNCQUFzQjtZQUN4QyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsb0VBQW9FO1NBQzNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEVudHJ5LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgSVRva2VuRW5hYmxlbWVudCxcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJsb2NraGFzaCxcbiAgUHVibGljS2V5LFxuICBTaWduZXIsXG4gIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLFxuICBTeXN0ZW1JbnN0cnVjdGlvbixcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgZXhwbGFpblNvbFRyYW5zYWN0aW9uLCBLZXlQYWlyIH0gZnJvbSAnLic7XG5pbXBvcnQge1xuICBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcyxcbiAgVU5BVkFJTEFCTEVfVEVYVCxcbiAgdmFsaWRJbnN0cnVjdGlvbkRhdGEsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0sXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEF0YUluaXQsXG4gIER1cmFibGVOb25jZVBhcmFtcyxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIE5vbmNlLFxuICBTdGFraW5nQWN0aXZhdGUsXG4gIFN0YWtpbmdBdXRob3JpemVQYXJhbXMsXG4gIFN0YWtpbmdXaXRoZHJhdyxcbiAgVG9rZW5UcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNmZXIsXG4gIFR4RGF0YSxcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICBXYWxsZXRJbml0LFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeSB9IGZyb20gJy4vaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5JztcbmltcG9ydCB7XG4gIGdldEluc3RydWN0aW9uVHlwZSxcbiAgZ2V0VHJhbnNhY3Rpb25UeXBlLFxuICBpc1ZhbGlkUmF3VHJhbnNhY3Rpb24sXG4gIHJlcXVpcmVzQWxsU2lnbmF0dXJlcyxcbiAgdmFsaWRhdGVSYXdNc2dJbnN0cnVjdGlvbixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTb2xTdGFraW5nVHlwZUVudW0gfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9zb2xUcmFuc2FjdGlvbjogU29sVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX2xhbXBvcnRzUGVyU2lnbmF0dXJlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHByb3RlY3RlZCBfaW5zdHJ1Y3Rpb25zRGF0YTogSW5zdHJ1Y3Rpb25QYXJhbXNbXSA9IFtdO1xuICBwcml2YXRlIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmVyc2lvbmVkVHJhbnNhY3Rpb246IFZlcnNpb25lZFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF92ZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfdjFUcmFuc2FjdGlvbkJ5dGVzOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF92MU1lc3NhZ2VCeXRlczogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc29sVHJhbnNhY3Rpb24oKTogU29sVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9zb2xUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCBzb2xUcmFuc2FjdGlvbih0eDogU29sVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbnVtYmVyT2ZSZXF1aXJlZFNpZ25hdHVyZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc29sVHJhbnNhY3Rpb24uY29tcGlsZU1lc3NhZ2UoKS5oZWFkZXIubnVtUmVxdWlyZWRTaWduYXR1cmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbnVtYmVyT2ZBVEFDcmVhdGlvbkluc3RydWN0aW9ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGluc3RydWN0aW9uKSA9PiBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pID09PSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkluaXRpYWxpemVBc3NvY2lhdGVkVG9rZW5BY2NvdW50XG4gICAgKS5sZW5ndGg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLl92MU1lc3NhZ2VCeXRlcykge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3YxTWVzc2FnZUJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24ubWVzc2FnZS5zZXJpYWxpemUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5zZXJpYWxpemVNZXNzYWdlKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIC8vIFNvbGFuYSB0cmFuc2FjdGlvbiBJRCA9PT0gZmlyc3Qgc2lnbmF0dXJlOiBodHRwczovL2RvY3Muc29sYW5hLmNvbS90ZXJtaW5vbG9neSN0cmFuc2FjdGlvbi1pZFxuICAgIGlmICh0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXMpIHtcbiAgICAgIC8vIHYxIHdpcmUgZm9ybWF0OiBtZXNzYWdlQnl0ZXMgZm9sbG93ZWQgYnkgNjQtYnl0ZSBzaWduYXR1cmVzOyB0aGUgZmlyc3Qgc2lnbmF0dXJlIGlzIHRoZSB0eCBpZFxuICAgICAgY29uc3QgbnVtUmVxdWlyZWQgPSB0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXNbMV07XG4gICAgICBjb25zdCBzaWdTdGFydCA9IHRoaXMuX3YxVHJhbnNhY3Rpb25CeXRlcy5sZW5ndGggLSBudW1SZXF1aXJlZCAqIDY0O1xuICAgICAgaWYgKG51bVJlcXVpcmVkID4gMCAmJiBzaWdTdGFydCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHNpZyA9IHRoaXMuX3YxVHJhbnNhY3Rpb25CeXRlcy5zbGljZShzaWdTdGFydCwgc2lnU3RhcnQgKyA2NCk7XG4gICAgICAgIGlmIChzaWcuc29tZSgoYnl0ZSkgPT4gYnl0ZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gYmFzZTU4LmVuY29kZShzaWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICBjb25zdCBzaWcgPSB0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbi5zaWduYXR1cmVzPy5bMF07XG4gICAgICAvLyBDaGVjayBpZiBzaWduYXR1cmUgZXhpc3RzIGFuZCBpcyBub3QgYSBwbGFjZWhvbGRlciBzaWduYXR1cmUgKGFsbCB6ZXJvcylcbiAgICAgIGlmIChzaWcgJiYgc2lnLnNvbWUoKGJ5dGUpID0+IGJ5dGUgIT09IDApKSB7XG4gICAgICAgIHJldHVybiBiYXNlNTguZW5jb2RlKHNpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIGJhc2U1OC5lbmNvZGUodGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIGdldCBsYW1wb3J0c1BlclNpZ25hdHVyZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZTtcbiAgfVxuXG4gIHNldCBsYW1wb3J0c1BlclNpZ25hdHVyZShsYW1wb3J0c1BlclNpZ25hdHVyZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFtcG9ydHNQZXJTaWduYXR1cmUgPSBsYW1wb3J0c1BlclNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldCB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ7XG4gIH1cblxuICBzZXQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50ID0gdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzaWduYXR1cmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICAvLyBIYW5kbGUgVmVyc2lvbmVkVHJhbnNhY3Rpb24gc2lnbmF0dXJlc1xuICAgICAgZm9yIChjb25zdCBzaWcgb2YgdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlcykge1xuICAgICAgICAvLyBGaWx0ZXJzIG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzXG4gICAgICAgIGlmIChzaWcgJiYgc2lnLnNvbWUoKGIpID0+IGIgIT09IDApKSB7XG4gICAgICAgICAgc2lnbmF0dXJlcy5wdXNoKGJhc2U1OC5lbmNvZGUoc2lnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIGxlZ2FjeSB0cmFuc2FjdGlvbiBzaWduYXR1cmVzXG4gICAgICBmb3IgKGNvbnN0IHNvbFNpZ25hdHVyZSBvZiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmVzKSB7XG4gICAgICAgIGlmIChzb2xTaWduYXR1cmUuc2lnbmF0dXJlKSB7XG4gICAgICAgICAgc2lnbmF0dXJlcy5wdXNoKGJhc2U1OC5lbmNvZGUoc29sU2lnbmF0dXJlLnNpZ25hdHVyZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbnN0cnVjdGlvbkRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gaW5zdHJ1Y3Rpb25EYXRhIFRoZSBpbnN0cnVjdGlvbiBkYXRhIHRvIGJlIHNldC5cbiAgICovXG4gIHNldEluc3RydWN0aW9uc0RhdGEoaW5zdHJ1Y3Rpb25EYXRhOiBJbnN0cnVjdGlvblBhcmFtc1tdKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IGluc3RydWN0aW9uRGF0YTtcbiAgfVxuXG4gIGdldCB1c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZTtcbiAgfVxuXG4gIHNldFVzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgdHJhbnNhY3Rpb24gaXMgYSBWZXJzaW9uZWRUcmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGlzIGEgVmVyc2lvbmVkVHJhbnNhY3Rpb25cbiAgICovXG4gIGlzVmVyc2lvbmVkVHJhbnNhY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24gfHwgISF0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgfHwgISF0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZXJpYWxpemVkIHYxIHdpcmUgdHJhbnNhY3Rpb24gYnl0ZXMgKG1lc3NhZ2UgKyBzaWduYXR1cmVzKSwgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyB2MVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheSB8IHVuZGVmaW5lZH0gVGhlIHYxIHdpcmUgYnl0ZXMgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXQgdjFUcmFuc2FjdGlvbkJ5dGVzKCk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzZXJpYWxpemVkIHYxIHdpcmUgdHJhbnNhY3Rpb24gYnl0ZXMgKG1lc3NhZ2UgKyBzaWduYXR1cmVzKVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXkgfCB1bmRlZmluZWR9IGJ5dGVzIFRoZSB2MSB3aXJlIGJ5dGVzIHRvIHN0b3JlLCBvciB1bmRlZmluZWQgdG8gY2xlYXJcbiAgICovXG4gIHNldCB2MVRyYW5zYWN0aW9uQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXMgPSBieXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlcmlhbGl6ZWQgdjEgbWVzc2FnZSBieXRlcyAod2l0aG91dCBzaWduYXR1cmVzKSwgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyB2MVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheSB8IHVuZGVmaW5lZH0gVGhlIHYxIG1lc3NhZ2UgYnl0ZXMgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXQgdjFNZXNzYWdlQnl0ZXMoKTogVWludDhBcnJheSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3YxTWVzc2FnZUJ5dGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2VyaWFsaXplZCB2MSBtZXNzYWdlIGJ5dGVzICh3aXRob3V0IHNpZ25hdHVyZXMpXG4gICAqIEBwYXJhbSB7VWludDhBcnJheSB8IHVuZGVmaW5lZH0gYnl0ZXMgVGhlIHYxIG1lc3NhZ2UgYnl0ZXMgdG8gc3RvcmUsIG9yIHVuZGVmaW5lZCB0byBjbGVhclxuICAgKi9cbiAgc2V0IHYxTWVzc2FnZUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdjFNZXNzYWdlQnl0ZXMgPSBieXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yaWdpbmFsIFZlcnNpb25lZFRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb24gd2FzIHBhcnNlZCBmcm9tIG9uZVxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IFRoZSBWZXJzaW9uZWRUcmFuc2FjdGlvbiBvciB1bmRlZmluZWRcbiAgICovXG4gIGdldCB2ZXJzaW9uZWRUcmFuc2FjdGlvbigpOiBWZXJzaW9uZWRUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGJ1aWx0IFZlcnNpb25lZFRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VmVyc2lvbmVkVHJhbnNhY3Rpb259IHZlcnNpb25lZFR4IFRoZSBWZXJzaW9uZWRUcmFuc2FjdGlvbiB0byBzZXRcbiAgICovXG4gIHNldCB2ZXJzaW9uZWRUcmFuc2FjdGlvbih2ZXJzaW9uZWRUeDogVmVyc2lvbmVkVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbiA9IHZlcnNpb25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RvcmVkIFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YVxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkfSBUaGUgc3RvcmVkIGRhdGEgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTogVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIGZvciB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkfSBkYXRhIFRoZSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZGF0YSB0byBzdG9yZSwgb3IgdW5kZWZpbmVkIHRvIGNsZWFyXG4gICAqL1xuICBzZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoZGF0YTogVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJ9IGtleVBhaXIgU2lnbmVyIGtleXMuXG4gICAqL1xuICBhc3luYyBzaWduKGtleVBhaXI6IEtleVBhaXJbXSB8IEtleVBhaXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDb252ZXJ0IHRvIGFycmF5IGFuZCBidWlsZCBzaWduZXJzIGxpc3RcbiAgICBjb25zdCBrZXlQYWlycyA9IGtleVBhaXIgaW5zdGFuY2VvZiBBcnJheSA/IGtleVBhaXIgOiBba2V5UGFpcl07XG4gICAgY29uc3Qgc2lnbmVyczogU2lnbmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtwIG9mIGtleVBhaXJzKSB7XG4gICAgICBjb25zdCBrZXlzID0ga3AuZ2V0S2V5cyh0cnVlKTtcbiAgICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgICAgfVxuICAgICAgc2lnbmVycy5wdXNoKHsgcHVibGljS2V5OiBuZXcgUHVibGljS2V5KGtleXMucHViKSwgc2VjcmV0S2V5OiBrZXlzLnBydiBhcyBVaW50OEFycmF5IH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbikge1xuICAgICAgaWYgKCF0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbi5tZXNzYWdlLnJlY2VudEJsb2NraGFzaCkge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdOb25jZSBpcyByZXF1aXJlZCBiZWZvcmUgc2lnbmluZycpO1xuICAgICAgfVxuICAgICAgdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24uc2lnbihzaWduZXJzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NvbFRyYW5zYWN0aW9uIHx8ICF0aGlzLl9zb2xUcmFuc2FjdGlvbi5yZWNlbnRCbG9ja2hhc2gpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ05vbmNlIGlzIHJlcXVpcmVkIGJlZm9yZSBzaWduaW5nJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc29sVHJhbnNhY3Rpb24gfHwgIXRoaXMuX3NvbFRyYW5zYWN0aW9uLmZlZVBheWVyKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdmZWVQYXllciBpcyByZXF1aXJlZCBiZWZvcmUgc2lnbmluZycpO1xuICAgIH1cbiAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbi5wYXJ0aWFsU2lnbiguLi5zaWduZXJzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXMpIHtcbiAgICAgIC8vIHYxIHdpcmUgZm9ybWF0IGlzIG1lc3NhZ2UtZmlyc3Qgd2l0aCBzaWduYXR1cmVzIGFwcGVuZGVkIChubyBsZW5ndGggcHJlZml4KVxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3YxVHJhbnNhY3Rpb25CeXRlcykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbikge1xuICAgICAgLy8gVmVyc2lvbmVkVHJhbnNhY3Rpb24uc2VyaWFsaXplKCkgZG9lc24ndCBuZWVkIHJlcXVpcmVBbGxTaWduYXR1cmVzIHBhcmFtZXRlclxuICAgICAgLy8gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHdoYXRldmVyIHNpZ25hdHVyZXMgYXJlIHByZXNlbnRcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc29sVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIC8vIFRoZSBzaWduYXR1cmVzIGNhbiBoYXZlIG51bGwgc2lnbmF0dXJlcyAod2hpY2ggbWVhbnMgdGhleSBhcmUgcmVxdWlyZWQgYnV0IHlldCB1bnNpZ25lZClcbiAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHNlcmlhbGl6ZXIgdGhlIHR4cywgd2UgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlcXVpcmVBbGxTaWduYXR1cmVzIGJhc2VkXG4gICAgLy8gb24gaWYgdGhlIFRYIGlzIGZ1bGx5IHNpZ25lZCBvciBub3RcbiAgICBjb25zdCByZXF1aXJlQWxsU2lnbmF0dXJlcyA9IHJlcXVpcmVzQWxsU2lnbmF0dXJlcyh0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmVzKTtcbiAgICAvLyBCYXNlZCBvbiB0aGUgcmVjb21lbmRhdGlvbiBlbmNvZGluZyBmb3VuZCBoZXJlIGh0dHBzOi8vZG9jcy5zb2xhbmEuY29tL2RldmVsb3BpbmcvY2xpZW50cy9qc29ucnBjLWFwaSNzZW5kdHJhbnNhY3Rpb25cbiAgICAvLyBXZSB1c2UgYmFzZTY0IGVuY29kaW5nXG4gICAgcmV0dXJuIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNlcmlhbGl6ZSh7IHJlcXVpcmVBbGxTaWduYXR1cmVzIH0pLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbiA9IFNvbFRyYW5zYWN0aW9uLmZyb20oQnVmZmVyLmZyb20ocmF3VHJhbnNhY3Rpb24sICdiYXNlNjQnKSk7XG4gICAgICBpZiAodGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlICYmIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNpZ25hdHVyZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9pZCA9IGJhc2U1OC5lbmNvZGUodGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uVHlwZSA9IGdldFRyYW5zYWN0aW9uVHlwZSh0aGlzLl9zb2xUcmFuc2FjdGlvbik7XG4gICAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZTpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0F1dGhvcml6ZVJhdzpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0F1dGhvcml6ZVJhdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWxlZ2F0ZTpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlbGVnYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ29uZmlkZW50aWFsVHJhbnNmZXI6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbmZpZGVudGlhbFRyYW5zZmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2FjdGlvblR5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplUmF3KSB7XG4gICAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3NvbFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGxldCBkdXJhYmxlTm9uY2U6IER1cmFibGVOb25jZVBhcmFtcyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5fc29sVHJhbnNhY3Rpb24ubm9uY2VJbmZvKSB7XG4gICAgICBjb25zdCBub25jZUluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlTm9uY2VBZHZhbmNlKHRoaXMuX3NvbFRyYW5zYWN0aW9uLm5vbmNlSW5mby5ub25jZUluc3RydWN0aW9uKTtcbiAgICAgIGR1cmFibGVOb25jZSA9IHtcbiAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBub25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGluc3RydWN0aW9uRGF0YSA9IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgICAgIHRoaXMuX3R5cGUsXG4gICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMsXG4gICAgICB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhLFxuICAgICAgdGhpcy5fdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lXG4gICAgKTtcbiAgICBpZiAodGhpcy5fdHlwZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhZHVyYWJsZU5vbmNlICYmXG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5sZW5ndGggPiAxICYmXG4gICAgICAgIGluc3RydWN0aW9uRGF0YVswXS50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2VcbiAgICAgICkge1xuICAgICAgICBkdXJhYmxlTm9uY2UgPSBpbnN0cnVjdGlvbkRhdGFbMF0ucGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmUgPyB0aGlzLmlkIDogdW5kZWZpbmVkLFxuICAgICAgZmVlUGF5ZXI6IHRoaXMuX3NvbFRyYW5zYWN0aW9uLmZlZVBheWVyPy50b1N0cmluZygpLFxuICAgICAgbGFtcG9ydHNQZXJTaWduYXR1cmU6IHRoaXMubGFtcG9ydHNQZXJTaWduYXR1cmUsXG4gICAgICBub25jZTogdGhpcy5nZXROb25jZSgpLFxuICAgICAgZHVyYWJsZU5vbmNlOiBkdXJhYmxlTm9uY2UsXG4gICAgICBudW1TaWduYXR1cmVzOiB0aGlzLnNpZ25hdHVyZS5sZW5ndGgsXG4gICAgICBpbnN0cnVjdGlvbnNEYXRhOiBpbnN0cnVjdGlvbkRhdGEsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbm9uY2UgZnJvbSB0aGUgU29sYW5hIFRyYW5zYWN0aW9uXG4gICAqIFRocm93cyBpZiBub3Qgc2V0XG4gICAqL1xuICBwcml2YXRlIGdldE5vbmNlKCk6IEJsb2NraGFzaCB7XG4gICAgaWYgKHRoaXMuX3NvbFRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvbFRyYW5zYWN0aW9uLm5vbmNlSW5mbykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NvbFRyYW5zYWN0aW9uLm5vbmNlSW5mby5ub25jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdOb25jZSBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zb2xUcmFuc2FjdGlvbiB8fCB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5wdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25QYXJhbXMgPSBpbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkoXG4gICAgICB0aGlzLnR5cGUsXG4gICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMsXG4gICAgICB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhLFxuICAgICAgdGhpcy5fdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25QYXJhbXMpIHtcbiAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZU5vbmNlQWNjb3VudDpcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlcjpcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLnRvQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRva2VuVHJhbnNmZXI6XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLmZyb21BZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9BZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ucGFyYW1zLnN0YWtpbmdUeXBlICE9PSBTb2xTdGFraW5nVHlwZUVudW0uSklUTykge1xuICAgICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy51bnN0YWtpbmdBZGRyZXNzICYmXG4gICAgICAgICAgICBpbnN0cnVjdGlvbi5wYXJhbXMuc3Rha2luZ1R5cGUgIT09IFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5zdGFraW5nQWRkcmVzcyxcbiAgICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLnVuc3Rha2luZ0FkZHJlc3MsXG4gICAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5zdGFraW5nQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nQXV0aG9yaXplOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdEZWxlZ2F0ZTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRDb21wdXRlVW5pdExpbWl0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkN1c3RvbUluc3RydWN0aW9uOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9vdXRwdXRzID0gb3V0cHV0cztcbiAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIC8vIFRlc3RuZXQgdXNlcyBXQVNNLWJhc2VkIHBhcnNpbmcgKG5vIEBzb2xhbmEvd2ViMy5qcyBkZXBlbmRlbmN5KS5cbiAgICAvLyBUaGlzIHZhbGlkYXRlcyB0aGUgV0FTTSBwYXRoIGFnYWluc3QgcHJvZHVjdGlvbiB0cmFmZmljIGJlZm9yZVxuICAgIC8vIHJlcGxhY2luZyB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIGZvciBhbGwgbmV0d29ya3MuXG4gICAgaWYgKHRoaXMuX2NvaW5Db25maWcubmFtZSA9PT0gJ3Rzb2wnKSB7XG4gICAgICAvLyBleHBsYWluVHJhbnNhY3Rpb24gc2hvdWxkIHdvcmsgb24gdW5zaWduZWQvcGFydGlhbGx5LXNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgICAgIC8vIChlLmcuLCBkdXJpbmcgcGFyc2VUcmFuc2FjdGlvbiByb3VuZC10cmlwcyB3aGVyZSBudWxsIHNpZ25hdHVyZXMgYmVjb21lXG4gICAgICAvLyB6ZXJvLWZpbGxlZCBidWZmZXJzKS4gVXNlIHNlcmlhbGl6ZSB3aXRob3V0IHNpZ25hdHVyZSB2YWxpZGF0aW9uIHNpbmNlXG4gICAgICAvLyB3ZSBvbmx5IG5lZWQgdG8gcmVhZCB0aGUgdHJhbnNhY3Rpb24sIG5vdCBicm9hZGNhc3QgaXQuXG4gICAgICBjb25zdCB0eEJhc2U2NCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbi5zZXJpYWxpemUoeyB2ZXJpZnlTaWduYXR1cmVzOiBmYWxzZSwgcmVxdWlyZUFsbFNpZ25hdHVyZXM6IGZhbHNlIH0pXG4gICAgICApLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIHJldHVybiBleHBsYWluU29sVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEJhc2U2NCxcbiAgICAgICAgZmVlSW5mbzogdGhpcy5fbGFtcG9ydHNQZXJTaWduYXR1cmUgPyB7IGZlZTogdGhpcy5fbGFtcG9ydHNQZXJTaWduYXR1cmUudG9TdHJpbmcoKSB9IDogdW5kZWZpbmVkLFxuICAgICAgICB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50LFxuICAgICAgICBjb2luTmFtZTogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlUmF3TXNnSW5zdHJ1Y3Rpb24odGhpcy5fc29sVHJhbnNhY3Rpb24uaW5zdHJ1Y3Rpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblJhd01zZ0F1dGhvcml6ZVRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvblBhcmFtc0ZhY3RvcnkoXG4gICAgICB0aGlzLl90eXBlLFxuICAgICAgdGhpcy5fc29sVHJhbnNhY3Rpb24uaW5zdHJ1Y3Rpb25zLFxuICAgICAgdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSxcbiAgICAgIHRoaXMuX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZVxuICAgICk7XG5cbiAgICBsZXQgbWVtbzogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBkdXJhYmxlTm9uY2U6IER1cmFibGVOb25jZVBhcmFtcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGxldCBvdXRwdXRBbW91bnQgPSBuZXcgQmlnTnVtYmVyKDApO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcbiAgICAvLyBDcmVhdGUgYSBzZXBhcmF0ZSBhcnJheSBmb3IgdG9rZW4gZW5hYmxlbWVudHNcbiAgICBjb25zdCB0b2tlbkVuYWJsZW1lbnRzOiBJVG9rZW5FbmFibGVtZW50W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgZGVjb2RlZEluc3RydWN0aW9ucykge1xuICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlOlxuICAgICAgICAgIGR1cmFibGVOb25jZSA9IChpbnN0cnVjdGlvbiBhcyBOb25jZSkucGFyYW1zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW86XG4gICAgICAgICAgbWVtbyA9IChpbnN0cnVjdGlvbiBhcyBNZW1vKS5wYXJhbXMubWVtbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlcjpcbiAgICAgICAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24gYXMgVHJhbnNmZXI7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRyYW5zZmVySW5zdHJ1Y3Rpb24ucGFyYW1zLnRvQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dEFtb3VudCA9IG91dHB1dEFtb3VudC5wbHVzKHRyYW5zZmVySW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlcjpcbiAgICAgICAgICBjb25zdCB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbiBhcyBUb2tlblRyYW5zZmVyO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24ucGFyYW1zLnRvQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdG9rZW5UcmFuc2Zlckluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZU5vbmNlQWNjb3VudDpcbiAgICAgICAgICBjb25zdCBjcmVhdGVJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uIGFzIFdhbGxldEluaXQ7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGNyZWF0ZUluc3RydWN0aW9uLnBhcmFtcy5ub25jZUFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IGNyZWF0ZUluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50LnBsdXMoY3JlYXRlSW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgICAgIGNvbnN0IHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24gYXMgU3Rha2luZ0FjdGl2YXRlO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBzdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbi5wYXJhbXMuc3Rha2luZ0FkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50LnBsdXMoc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgICAgIGNvbnN0IHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24gYXMgU3Rha2luZ1dpdGhkcmF3O1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50LnBsdXMoc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgICAvLyBQcm9jZXNzIHRva2VuIGVuYWJsZW1lbnQgaW5zdHJ1Y3Rpb25zIGFuZCBjb2xsZWN0IHRoZW0gaW4gdGhlIHRva2VuRW5hYmxlbWVudHMgYXJyYXlcbiAgICAgICAgICBjb25zdCBhdGFJbml0ID0gaW5zdHJ1Y3Rpb24gYXMgQXRhSW5pdDtcbiAgICAgICAgICB0b2tlbkVuYWJsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogYXRhSW5pdC5wYXJhbXMuYXRhQWRkcmVzcyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogYXRhSW5pdC5wYXJhbXMudG9rZW5OYW1lLFxuICAgICAgICAgICAgdG9rZW5BZGRyZXNzOiBhdGFJbml0LnBhcmFtcy5taW50QWRkcmVzcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DdXN0b21JbnN0cnVjdGlvbjpcbiAgICAgICAgICAvLyBDdXN0b20gaW5zdHJ1Y3Rpb25zIGFyZSBhcmJpdHJhcnkgYW5kIGNhbm5vdCBiZSBleHBsYWluZWRcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQWZ0ZXIgZGVzZXJpYWxpemluZyBhIHRyYW5zYWN0aW9uLCBkdXJhYmxlIG5vbmNlIGRldGFpbHMgYXJlIHBvcHVsYXRlZCBpbiB0aGUgbm9uY2VJbmZvIGZpZWxkXG4gICAgICBpZiAoIWR1cmFibGVOb25jZSAmJiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5ub25jZUluZm8pIHtcbiAgICAgICAgY29uc3Qgbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoXG4gICAgICAgICAgdGhpcy5fc29sVHJhbnNhY3Rpb24ubm9uY2VJbmZvLm5vbmNlSW5zdHJ1Y3Rpb25cbiAgICAgICAgKTtcbiAgICAgICAgZHVyYWJsZU5vbmNlID0ge1xuICAgICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBub25jZUFkdmFuY2VJbnN0cnVjdGlvbi5hdXRob3JpemVkUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFkdmFuY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEV4cGxhaW5lZFRyYW5zYWN0aW9uKG91dHB1dEFtb3VudCwgb3V0cHV0cywgbWVtbywgZHVyYWJsZU5vbmNlLCB0b2tlbkVuYWJsZW1lbnRzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlRmVlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubGFtcG9ydHNQZXJTaWduYXR1cmUgfHwgdGhpcy50b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KSB7XG4gICAgICBjb25zdCBzaWduYXR1cmVGZWVzID0gdGhpcy5sYW1wb3J0c1BlclNpZ25hdHVyZVxuICAgICAgICA/IG5ldyBCaWdOdW1iZXIodGhpcy5sYW1wb3J0c1BlclNpZ25hdHVyZSkubXVsdGlwbGllZEJ5KHRoaXMubnVtYmVyT2ZSZXF1aXJlZFNpZ25hdHVyZXMpLnRvRml4ZWQoMClcbiAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcmVudEZlZXMgPSB0aGlzLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnRcbiAgICAgICAgPyBuZXcgQmlnTnVtYmVyKHRoaXMudG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCkubXVsdGlwbGllZEJ5KHRoaXMubnVtYmVyT2ZBVEFDcmVhdGlvbkluc3RydWN0aW9ucykudG9GaXhlZCgwKVxuICAgICAgICA6IDA7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihzaWduYXR1cmVGZWVzKS5wbHVzKHJlbnRGZWVzKS50b0ZpeGVkKDApO1xuICAgIH1cbiAgICByZXR1cm4gVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFeHBsYWluZWRUcmFuc2FjdGlvbihcbiAgICBvdXRwdXRBbW91bnQ6IEJpZ051bWJlcixcbiAgICBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdLFxuICAgIG1lbW86IHVuZGVmaW5lZCB8IHN0cmluZyA9IHVuZGVmaW5lZCxcbiAgICBkdXJhYmxlTm9uY2U6IHVuZGVmaW5lZCB8IER1cmFibGVOb25jZVBhcmFtcyA9IHVuZGVmaW5lZCxcbiAgICB0b2tlbkVuYWJsZW1lbnRzOiBJVG9rZW5FbmFibGVtZW50W10gPSBbXVxuICApOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBmZWVTdHJpbmcgPSB0aGlzLmNhbGN1bGF0ZUZlZSgpO1xuXG4gICAgLy8gQ3JlYXRlIGRpc3BsYXlPcmRlciB3aXRoIHRva2VuRW5hYmxlbWVudHMgYWx3YXlzIGluY2x1ZGVkXG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdibG9ja2hhc2gnLFxuICAgICAgJ2R1cmFibGVOb25jZScsXG4gICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgJ291dHB1dHMnLFxuICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgJ3Rva2VuRW5hYmxlbWVudHMnLFxuICAgICAgJ2ZlZScsXG4gICAgICAnbWVtbycsXG4gICAgXTtcblxuICAgIC8vIENyZWF0ZSB0aGUgYmFzZSBleHBsYW5hdGlvbiBvYmplY3Qgd2l0aCB0b2tlbkVuYWJsZW1lbnRzIGFsd2F5cyBpbmNsdWRlZFxuICAgIGNvbnN0IGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVbdGhpcy50eXBlXS50b1N0cmluZygpLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LnRvRml4ZWQoMCksXG4gICAgICBvdXRwdXRzOiBvdXRwdXRzLFxuICAgICAgZmVlOiB7XG4gICAgICAgIGZlZTogZmVlU3RyaW5nLFxuICAgICAgICBmZWVSYXRlOiB0aGlzLmxhbXBvcnRzUGVyU2lnbmF0dXJlLFxuICAgICAgfSxcbiAgICAgIG1lbW86IG1lbW8sXG4gICAgICBibG9ja2hhc2g6IHRoaXMuZ2V0Tm9uY2UoKSxcbiAgICAgIGR1cmFibGVOb25jZTogZHVyYWJsZU5vbmNlLFxuICAgICAgdG9rZW5FbmFibGVtZW50czogdG9rZW5FbmFibGVtZW50cyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGV4cGxhbmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBsYWluUmF3TXNnQXV0aG9yaXplVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgeyBpbnN0cnVjdGlvbnMgfSA9IHRoaXMuX3NvbFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IG5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UoaW5zdHJ1Y3Rpb25zWzBdKTtcbiAgICBjb25zdCBkdXJhYmxlTm9uY2UgPSB7XG4gICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBub25jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICB9O1xuICAgIGNvbnN0IGRhdGEgPSBpbnN0cnVjdGlvbnNbMV0uZGF0YS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgc3Rha2luZ0F1dGhvcml6ZVBhcmFtczogU3Rha2luZ0F1dGhvcml6ZVBhcmFtcyA9XG4gICAgICBkYXRhID09PSB2YWxpZEluc3RydWN0aW9uRGF0YVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiBpbnN0cnVjdGlvbnNbMV0ua2V5c1swXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG9sZFdpdGhkcmF3QWRkcmVzczogaW5zdHJ1Y3Rpb25zWzFdLmtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBuZXdXaXRoZHJhd0FkZHJlc3M6IGluc3RydWN0aW9uc1sxXS5rZXlzWzNdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgY3VzdG9kaWFuQWRkcmVzczogaW5zdHJ1Y3Rpb25zWzFdLmtleXNbNF0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHN0YWtpbmdBZGRyZXNzOiBpbnN0cnVjdGlvbnNbMV0ua2V5c1swXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG9sZFdpdGhkcmF3QWRkcmVzczogJycsXG4gICAgICAgICAgICBuZXdXaXRoZHJhd0FkZHJlc3M6ICcnLFxuICAgICAgICAgICAgb2xkU3Rha2luZ0F1dGhvcml0eUFkZHJlc3M6IGluc3RydWN0aW9uc1sxXS5rZXlzWzJdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgbmV3U3Rha2luZ0F1dGhvcml0eUFkZHJlc3M6IGluc3RydWN0aW9uc1sxXS5rZXlzWzNdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgY29uc3QgZmVlU3RyaW5nID0gdGhpcy5jYWxjdWxhdGVGZWUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyOiBbXG4gICAgICAgICdpZCcsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ2Jsb2NraGFzaCcsXG4gICAgICAgICdkdXJhYmxlTm9uY2UnLFxuICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAgICdvdXRwdXRzJyxcbiAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAndG9rZW5FbmFibGVtZW50cycsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAnbWVtbycsXG4gICAgICBdLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVbdGhpcy50eXBlXS50b1N0cmluZygpLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIG91dHB1dEFtb3VudDogMCxcbiAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgZmVlOiB7XG4gICAgICAgIGZlZTogZmVlU3RyaW5nLFxuICAgICAgICBmZWVSYXRlOiB0aGlzLmxhbXBvcnRzUGVyU2lnbmF0dXJlLFxuICAgICAgfSxcbiAgICAgIGJsb2NraGFzaDogdGhpcy5nZXROb25jZSgpLFxuICAgICAgZHVyYWJsZU5vbmNlOiBkdXJhYmxlTm9uY2UsXG4gICAgICBzdGFraW5nQXV0aG9yaXplOiBzdGFraW5nQXV0aG9yaXplUGFyYW1zLFxuICAgICAgdG9rZW5FbmFibGVtZW50czogW10sIC8vIEFsd2F5cyBpbmNsdWRlIHRva2VuRW5hYmxlbWVudHMgYXMgYW4gZW1wdHkgYXJyYXkgZm9yIGNvbnNpc3RlbmN5XG4gICAgfTtcbiAgfVxufVxuIl19
684
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxlQUFlLEVBRWYsdUJBQXVCLEVBRXZCLHFCQUFxQixFQUNyQixZQUFZLEVBRVosZUFBZSxHQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxJQUFJLGNBQWMsRUFDN0IsaUJBQWlCLEdBRWxCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUscUJBQXFCLEVBQVcsTUFBTSxHQUFHLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLHlCQUF5QixHQUMxQixNQUFNLGFBQWEsQ0FBQztBQWlCckIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQix5QkFBeUIsR0FDMUIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsTUFBTSxPQUFPLFdBQVksU0FBUSxlQUFlO0lBWTlDLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBUlgsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQUM5Qyw4QkFBeUIsR0FBRyxLQUFLLENBQUM7SUFRMUMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEVBQWtCO1FBQ25DLElB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Q25DO1lBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDMUIsWUFBWSxFQUFFLFlBQVk7WUFDMUIsZ0JBQWdCLEVBQUUsc0JBQXNCO1lBQ3hDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxvRUFBb0U7U0FDM0YsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEVudHJ5LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgSVRva2VuRW5hYmxlbWVudCxcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJsb2NraGFzaCxcbiAgUHVibGljS2V5LFxuICBTaWduZXIsXG4gIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLFxuICBTeXN0ZW1JbnN0cnVjdGlvbixcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgZXhwbGFpblNvbFRyYW5zYWN0aW9uLCBLZXlQYWlyIH0gZnJvbSAnLic7XG5pbXBvcnQge1xuICBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcyxcbiAgVU5BVkFJTEFCTEVfVEVYVCxcbiAgdmFsaWRJbnN0cnVjdGlvbkRhdGEsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0sXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEF0YUluaXQsXG4gIER1cmFibGVOb25jZVBhcmFtcyxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIE5vbmNlLFxuICBTdGFraW5nQWN0aXZhdGUsXG4gIFN0YWtpbmdBdXRob3JpemVQYXJhbXMsXG4gIFN0YWtpbmdXaXRoZHJhdyxcbiAgVG9rZW5UcmFuc2ZlcixcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNmZXIsXG4gIFR4RGF0YSxcbiAgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhLFxuICBXYWxsZXRJbml0LFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeSB9IGZyb20gJy4vaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5JztcbmltcG9ydCB7XG4gIGdldEluc3RydWN0aW9uVHlwZSxcbiAgZ2V0VHJhbnNhY3Rpb25UeXBlLFxuICBpc1ZhbGlkUmF3VHJhbnNhY3Rpb24sXG4gIHJlcXVpcmVzQWxsU2lnbmF0dXJlcyxcbiAgdmFsaWRhdGVSYXdNc2dJbnN0cnVjdGlvbixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTb2xTdGFraW5nVHlwZUVudW0gfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9zb2xUcmFuc2FjdGlvbjogU29sVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX2xhbXBvcnRzUGVyU2lnbmF0dXJlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHByb3RlY3RlZCBfaW5zdHJ1Y3Rpb25zRGF0YTogSW5zdHJ1Y3Rpb25QYXJhbXNbXSA9IFtdO1xuICBwcml2YXRlIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmVyc2lvbmVkVHJhbnNhY3Rpb246IFZlcnNpb25lZFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF92ZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGE6IFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfdjFUcmFuc2FjdGlvbkJ5dGVzOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF92MU1lc3NhZ2VCeXRlczogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc29sVHJhbnNhY3Rpb24oKTogU29sVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9zb2xUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCBzb2xUcmFuc2FjdGlvbih0eDogU29sVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbnVtYmVyT2ZSZXF1aXJlZFNpZ25hdHVyZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc29sVHJhbnNhY3Rpb24uY29tcGlsZU1lc3NhZ2UoKS5oZWFkZXIubnVtUmVxdWlyZWRTaWduYXR1cmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbnVtYmVyT2ZBVEFDcmVhdGlvbkluc3RydWN0aW9ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGluc3RydWN0aW9uKSA9PiBnZXRJbnN0cnVjdGlvblR5cGUoaW5zdHJ1Y3Rpb24pID09PSBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkluaXRpYWxpemVBc3NvY2lhdGVkVG9rZW5BY2NvdW50XG4gICAgKS5sZW5ndGg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLl92MU1lc3NhZ2VCeXRlcykge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3YxTWVzc2FnZUJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24ubWVzc2FnZS5zZXJpYWxpemUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5zZXJpYWxpemVNZXNzYWdlKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIC8vIFNvbGFuYSB0cmFuc2FjdGlvbiBJRCA9PT0gZmlyc3Qgc2lnbmF0dXJlOiBodHRwczovL2RvY3Muc29sYW5hLmNvbS90ZXJtaW5vbG9neSN0cmFuc2FjdGlvbi1pZFxuICAgIGlmICh0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXMpIHtcbiAgICAgIC8vIHYxIHdpcmUgZm9ybWF0OiBtZXNzYWdlQnl0ZXMgZm9sbG93ZWQgYnkgNjQtYnl0ZSBzaWduYXR1cmVzOyB0aGUgZmlyc3Qgc2lnbmF0dXJlIGlzIHRoZSB0eCBpZFxuICAgICAgY29uc3QgbnVtUmVxdWlyZWQgPSB0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXNbMV07XG4gICAgICBjb25zdCBzaWdTdGFydCA9IHRoaXMuX3YxVHJhbnNhY3Rpb25CeXRlcy5sZW5ndGggLSBudW1SZXF1aXJlZCAqIDY0O1xuICAgICAgaWYgKG51bVJlcXVpcmVkID4gMCAmJiBzaWdTdGFydCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHNpZyA9IHRoaXMuX3YxVHJhbnNhY3Rpb25CeXRlcy5zbGljZShzaWdTdGFydCwgc2lnU3RhcnQgKyA2NCk7XG4gICAgICAgIGlmIChzaWcuc29tZSgoYnl0ZSkgPT4gYnl0ZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gYmFzZTU4LmVuY29kZShzaWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICBjb25zdCBzaWcgPSB0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbi5zaWduYXR1cmVzPy5bMF07XG4gICAgICAvLyBDaGVjayBpZiBzaWduYXR1cmUgZXhpc3RzIGFuZCBpcyBub3QgYSBwbGFjZWhvbGRlciBzaWduYXR1cmUgKGFsbCB6ZXJvcylcbiAgICAgIGlmIChzaWcgJiYgc2lnLnNvbWUoKGJ5dGUpID0+IGJ5dGUgIT09IDApKSB7XG4gICAgICAgIHJldHVybiBiYXNlNTguZW5jb2RlKHNpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIGJhc2U1OC5lbmNvZGUodGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIGdldCBsYW1wb3J0c1BlclNpZ25hdHVyZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZTtcbiAgfVxuXG4gIHNldCBsYW1wb3J0c1BlclNpZ25hdHVyZShsYW1wb3J0c1BlclNpZ25hdHVyZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFtcG9ydHNQZXJTaWduYXR1cmUgPSBsYW1wb3J0c1BlclNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldCB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ7XG4gIH1cblxuICBzZXQgdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCh0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50ID0gdG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzaWduYXR1cmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICAvLyBIYW5kbGUgVmVyc2lvbmVkVHJhbnNhY3Rpb24gc2lnbmF0dXJlc1xuICAgICAgZm9yIChjb25zdCBzaWcgb2YgdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlcykge1xuICAgICAgICAvLyBGaWx0ZXJzIG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzXG4gICAgICAgIGlmIChzaWcgJiYgc2lnLnNvbWUoKGIpID0+IGIgIT09IDApKSB7XG4gICAgICAgICAgc2lnbmF0dXJlcy5wdXNoKGJhc2U1OC5lbmNvZGUoc2lnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIGxlZ2FjeSB0cmFuc2FjdGlvbiBzaWduYXR1cmVzXG4gICAgICBmb3IgKGNvbnN0IHNvbFNpZ25hdHVyZSBvZiB0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmVzKSB7XG4gICAgICAgIGlmIChzb2xTaWduYXR1cmUuc2lnbmF0dXJlKSB7XG4gICAgICAgICAgc2lnbmF0dXJlcy5wdXNoKGJhc2U1OC5lbmNvZGUoc29sU2lnbmF0dXJlLnNpZ25hdHVyZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbnN0cnVjdGlvbkRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5zdHJ1Y3Rpb25QYXJhbXNbXX0gaW5zdHJ1Y3Rpb25EYXRhIFRoZSBpbnN0cnVjdGlvbiBkYXRhIHRvIGJlIHNldC5cbiAgICovXG4gIHNldEluc3RydWN0aW9uc0RhdGEoaW5zdHJ1Y3Rpb25EYXRhOiBJbnN0cnVjdGlvblBhcmFtc1tdKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IGluc3RydWN0aW9uRGF0YTtcbiAgfVxuXG4gIGdldCB1c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZTtcbiAgfVxuXG4gIHNldFVzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3VzZVRva2VuQWRkcmVzc1Rva2VuTmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgdHJhbnNhY3Rpb24gaXMgYSBWZXJzaW9uZWRUcmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIGlzIGEgVmVyc2lvbmVkVHJhbnNhY3Rpb25cbiAgICovXG4gIGlzVmVyc2lvbmVkVHJhbnNhY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb24gfHwgISF0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgfHwgISF0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZXJpYWxpemVkIHYxIHdpcmUgdHJhbnNhY3Rpb24gYnl0ZXMgKG1lc3NhZ2UgKyBzaWduYXR1cmVzKSwgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyB2MVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheSB8IHVuZGVmaW5lZH0gVGhlIHYxIHdpcmUgYnl0ZXMgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXQgdjFUcmFuc2FjdGlvbkJ5dGVzKCk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzZXJpYWxpemVkIHYxIHdpcmUgdHJhbnNhY3Rpb24gYnl0ZXMgKG1lc3NhZ2UgKyBzaWduYXR1cmVzKVxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXkgfCB1bmRlZmluZWR9IGJ5dGVzIFRoZSB2MSB3aXJlIGJ5dGVzIHRvIHN0b3JlLCBvciB1bmRlZmluZWQgdG8gY2xlYXJcbiAgICovXG4gIHNldCB2MVRyYW5zYWN0aW9uQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92MVRyYW5zYWN0aW9uQnl0ZXMgPSBieXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlcmlhbGl6ZWQgdjEgbWVzc2FnZSBieXRlcyAod2l0aG91dCBzaWduYXR1cmVzKSwgaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyB2MVxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheSB8IHVuZGVmaW5lZH0gVGhlIHYxIG1lc3NhZ2UgYnl0ZXMgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXQgdjFNZXNzYWdlQnl0ZXMoKTogVWludDhBcnJheSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3YxTWVzc2FnZUJ5dGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2VyaWFsaXplZCB2MSBtZXNzYWdlIGJ5dGVzICh3aXRob3V0IHNpZ25hdHVyZXMpXG4gICAqIEBwYXJhbSB7VWludDhBcnJheSB8IHVuZGVmaW5lZH0gYnl0ZXMgVGhlIHYxIG1lc3NhZ2UgYnl0ZXMgdG8gc3RvcmUsIG9yIHVuZGVmaW5lZCB0byBjbGVhclxuICAgKi9cbiAgc2V0IHYxTWVzc2FnZUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdjFNZXNzYWdlQnl0ZXMgPSBieXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yaWdpbmFsIFZlcnNpb25lZFRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb24gd2FzIHBhcnNlZCBmcm9tIG9uZVxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IFRoZSBWZXJzaW9uZWRUcmFuc2FjdGlvbiBvciB1bmRlZmluZWRcbiAgICovXG4gIGdldCB2ZXJzaW9uZWRUcmFuc2FjdGlvbigpOiBWZXJzaW9uZWRUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGJ1aWx0IFZlcnNpb25lZFRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VmVyc2lvbmVkVHJhbnNhY3Rpb259IHZlcnNpb25lZFR4IFRoZSBWZXJzaW9uZWRUcmFuc2FjdGlvbiB0byBzZXRcbiAgICovXG4gIHNldCB2ZXJzaW9uZWRUcmFuc2FjdGlvbih2ZXJzaW9uZWRUeDogVmVyc2lvbmVkVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbiA9IHZlcnNpb25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RvcmVkIFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YVxuICAgKiBAcmV0dXJucyB7VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkfSBUaGUgc3RvcmVkIGRhdGEgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoKTogVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIGZvciB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkfSBkYXRhIFRoZSB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZGF0YSB0byBzdG9yZSwgb3IgdW5kZWZpbmVkIHRvIGNsZWFyXG4gICAqL1xuICBzZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEoZGF0YTogVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fdmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaWduYXR1cmUgcHJvZHVjZWQgYnkgdGhlIGZlZSBwYXllciBvZiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBUaGUgZmVlIHBheWVyIGlzIGFjY291bnQgMCBvZiB0aGUgdHJhbnNhY3Rpb24gbWVzc2FnZSwgc28gaXRzIHNpZ25hdHVyZSBiZWxvbmdzIGluIHNsb3QgMC5cbiAgICogVXNlIHRoaXMgZm9yIHNpZ25hdHVyZXMgcHJvZHVjZWQgYnkgdGhlIGVudGVycHJpc2UgZmVlIGFkZHJlc3Mga2V5IChIU00gc2luZ2xlLXNpZykgb2YgYVxuICAgKiBzcG9uc29yZWQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZVB1YmxpY0tleX0gcHVibGljS2V5IFRoZSBwdWJsaWMga2V5IG9mIHRoZSBmZWUgcGF5ZXI7IG11c3QgYmUgYWNjb3VudCAwIG9mIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSBvZiB0aGUgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKi9cbiAgYWRkRmVlUGF5ZXJTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbikge1xuICAgICAgY29uc3QgYWNjb3VudDAgPSB0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbi5tZXNzYWdlLnN0YXRpY0FjY291bnRLZXlzWzBdPy50b0Jhc2U1OCgpO1xuICAgICAgaWYgKHB1YmxpY0tleS5wdWIgIT09IGFjY291bnQwKSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoYEZlZSBwYXllciBzaWduYXR1cmUgbXVzdCBjb21lIGZyb20gYWNjb3VudCAwIG9mIHRoZSBtZXNzYWdlLCBnb3Q6ICR7cHVibGljS2V5LnB1Yn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShuZXcgUHVibGljS2V5KHB1YmxpY0tleS5wdWIpLCBzaWduYXR1cmUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb2xUcmFuc2FjdGlvbikge1xuICAgICAgLy8gRm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMgQHNvbGFuYS93ZWIzLmpzIHBsYWNlcyB0aGUgZmVlIHBheWVyIGZpcnN0IGluIHRoZSBtZXNzYWdlXG4gICAgICBjb25zdCBmZWVQYXllciA9IHRoaXMuX3NvbFRyYW5zYWN0aW9uLmZlZVBheWVyPy50b0Jhc2U1OCgpO1xuICAgICAgaWYgKHB1YmxpY0tleS5wdWIgIT09IGZlZVBheWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoYEZlZSBwYXllciBzaWduYXR1cmUgbXVzdCBjb21lIGZyb20gYWNjb3VudCAwIG9mIHRoZSBtZXNzYWdlLCBnb3Q6ICR7cHVibGljS2V5LnB1Yn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NvbFRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShuZXcgUHVibGljS2V5KHB1YmxpY0tleS5wdWIpLCBzaWduYXR1cmUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ZlZSBwYXllciBzaWduYXR1cmUgcmVxdWlyZXMgYSBidWlsdCB0cmFuc2FjdGlvbicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciBTaWduZXIga2V5cy5cbiAgICovXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcltdIHwgS2V5UGFpcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENvbnZlcnQgdG8gYXJyYXkgYW5kIGJ1aWxkIHNpZ25lcnMgbGlzdFxuICAgIGNvbnN0IGtleVBhaXJzID0ga2V5UGFpciBpbnN0YW5jZW9mIEFycmF5ID8ga2V5UGFpciA6IFtrZXlQYWlyXTtcbiAgICBjb25zdCBzaWduZXJzOiBTaWduZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga3Agb2Yga2V5UGFpcnMpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBrcC5nZXRLZXlzKHRydWUpO1xuICAgICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgICB9XG4gICAgICBzaWduZXJzLnB1c2goeyBwdWJsaWNLZXk6IG5ldyBQdWJsaWNLZXkoa2V5cy5wdWIpLCBzZWNyZXRLZXk6IGtleXMucHJ2IGFzIFVpbnQ4QXJyYXkgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAoIXRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uLm1lc3NhZ2UucmVjZW50QmxvY2toYXNoKSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ05vbmNlIGlzIHJlcXVpcmVkIGJlZm9yZSBzaWduaW5nJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl92ZXJzaW9uZWRUcmFuc2FjdGlvbi5zaWduKHNpZ25lcnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc29sVHJhbnNhY3Rpb24gfHwgIXRoaXMuX3NvbFRyYW5zYWN0aW9uLnJlY2VudEJsb2NraGFzaCkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTm9uY2UgaXMgcmVxdWlyZWQgYmVmb3JlIHNpZ25pbmcnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb2xUcmFuc2FjdGlvbiB8fCAhdGhpcy5fc29sVHJhbnNhY3Rpb24uZmVlUGF5ZXIpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ2ZlZVBheWVyIGlzIHJlcXVpcmVkIGJlZm9yZSBzaWduaW5nJyk7XG4gICAgfVxuICAgIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnBhcnRpYWxTaWduKC4uLnNpZ25lcnMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3YxVHJhbnNhY3Rpb25CeXRlcykge1xuICAgICAgLy8gdjEgd2lyZSBmb3JtYXQgaXMgbWVzc2FnZS1maXJzdCB3aXRoIHNpZ25hdHVyZXMgYXBwZW5kZWQgKG5vIGxlbmd0aCBwcmVmaXgpXG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fdjFUcmFuc2FjdGlvbkJ5dGVzKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uKSB7XG4gICAgICAvLyBWZXJzaW9uZWRUcmFuc2FjdGlvbi5zZXJpYWxpemUoKSBkb2Vzbid0IG5lZWQgcmVxdWlyZUFsbFNpZ25hdHVyZXMgcGFyYW1ldGVyXG4gICAgICAvLyBJdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgd2hhdGV2ZXIgc2lnbmF0dXJlcyBhcmUgcHJlc2VudFxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuX3ZlcnNpb25lZFRyYW5zYWN0aW9uLnNlcmlhbGl6ZSgpKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zb2xUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgLy8gVGhlIHNpZ25hdHVyZXMgY2FuIGhhdmUgbnVsbCBzaWduYXR1cmVzICh3aGljaCBtZWFucyB0aGV5IGFyZSByZXF1aXJlZCBidXQgeWV0IHVuc2lnbmVkKVxuICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gc2VyaWFsaXplciB0aGUgdHhzLCB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgcmVxdWlyZUFsbFNpZ25hdHVyZXMgYmFzZWRcbiAgICAvLyBvbiBpZiB0aGUgVFggaXMgZnVsbHkgc2lnbmVkIG9yIG5vdFxuICAgIGNvbnN0IHJlcXVpcmVBbGxTaWduYXR1cmVzID0gcmVxdWlyZXNBbGxTaWduYXR1cmVzKHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNpZ25hdHVyZXMpO1xuICAgIC8vIEJhc2VkIG9uIHRoZSByZWNvbWVuZGF0aW9uIGVuY29kaW5nIGZvdW5kIGhlcmUgaHR0cHM6Ly9kb2NzLnNvbGFuYS5jb20vZGV2ZWxvcGluZy9jbGllbnRzL2pzb25ycGMtYXBpI3NlbmR0cmFuc2FjdGlvblxuICAgIC8vIFdlIHVzZSBiYXNlNjQgZW5jb2RpbmdcbiAgICByZXR1cm4gdGhpcy5fc29sVHJhbnNhY3Rpb24uc2VyaWFsaXplKHsgcmVxdWlyZUFsbFNpZ25hdHVyZXMgfSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3NvbFRyYW5zYWN0aW9uID0gU29sVHJhbnNhY3Rpb24uZnJvbShCdWZmZXIuZnJvbShyYXdUcmFuc2FjdGlvbiwgJ2Jhc2U2NCcpKTtcbiAgICAgIGlmICh0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy5fc29sVHJhbnNhY3Rpb24uc2lnbmF0dXJlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2lkID0gYmFzZTU4LmVuY29kZSh0aGlzLl9zb2xUcmFuc2FjdGlvbi5zaWduYXR1cmUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25UeXBlID0gZ2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMuX3NvbFRyYW5zYWN0aW9uKTtcbiAgICAgIHN3aXRjaCAodHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBdXRob3JpemU6XG4gICAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBdXRob3JpemUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplUmF3OlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQXV0aG9yaXplUmF3KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlbGVnYXRlOlxuICAgICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVsZWdhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db25maWRlbnRpYWxUcmFuc2ZlcjpcbiAgICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQ29uZmlkZW50aWFsVHJhbnNmZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uVHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBdXRob3JpemVSYXcpIHtcbiAgICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fc29sVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgbGV0IGR1cmFibGVOb25jZTogRHVyYWJsZU5vbmNlUGFyYW1zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLl9zb2xUcmFuc2FjdGlvbi5ub25jZUluZm8pIHtcbiAgICAgIGNvbnN0IG5vbmNlSW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUFkdmFuY2UodGhpcy5fc29sVHJhbnNhY3Rpb24ubm9uY2VJbmZvLm5vbmNlSW5zdHJ1Y3Rpb24pO1xuICAgICAgZHVyYWJsZU5vbmNlID0ge1xuICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlSW5zdHJ1Y3Rpb24ubm9uY2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IG5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhID0gaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5KFxuICAgICAgdGhpcy5fdHlwZSxcbiAgICAgIHRoaXMuX3NvbFRyYW5zYWN0aW9uLmluc3RydWN0aW9ucyxcbiAgICAgIHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIHRoaXMuX2luc3RydWN0aW9uc0RhdGEsXG4gICAgICB0aGlzLl91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWVcbiAgICApO1xuICAgIGlmICh0aGlzLl90eXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFkdXJhYmxlTm9uY2UgJiZcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhWzBdLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk5vbmNlQWR2YW5jZVxuICAgICAgKSB7XG4gICAgICAgIGR1cmFibGVOb25jZSA9IGluc3RydWN0aW9uRGF0YVswXS5wYXJhbXM7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNpZ25hdHVyZSA/IHRoaXMuaWQgOiB1bmRlZmluZWQsXG4gICAgICBmZWVQYXllcjogdGhpcy5fc29sVHJhbnNhY3Rpb24uZmVlUGF5ZXI/LnRvU3RyaW5nKCksXG4gICAgICBsYW1wb3J0c1BlclNpZ25hdHVyZTogdGhpcy5sYW1wb3J0c1BlclNpZ25hdHVyZSxcbiAgICAgIG5vbmNlOiB0aGlzLmdldE5vbmNlKCksXG4gICAgICBkdXJhYmxlTm9uY2U6IGR1cmFibGVOb25jZSxcbiAgICAgIG51bVNpZ25hdHVyZXM6IHRoaXMuc2lnbmF0dXJlLmxlbmd0aCxcbiAgICAgIGluc3RydWN0aW9uc0RhdGE6IGluc3RydWN0aW9uRGF0YSxcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBub25jZSBmcm9tIHRoZSBTb2xhbmEgVHJhbnNhY3Rpb25cbiAgICogVGhyb3dzIGlmIG5vdCBzZXRcbiAgICovXG4gIHByaXZhdGUgZ2V0Tm9uY2UoKTogQmxvY2toYXNoIHtcbiAgICBpZiAodGhpcy5fc29sVHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc29sVHJhbnNhY3Rpb24ucmVjZW50QmxvY2toYXNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fc29sVHJhbnNhY3Rpb24ubm9uY2VJbmZvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc29sVHJhbnNhY3Rpb24ubm9uY2VJbmZvLm5vbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ05vbmNlIGlzIG5vdCBzZXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3NvbFRyYW5zYWN0aW9uIHx8IHRoaXMuX3NvbFRyYW5zYWN0aW9uLmluc3RydWN0aW9ucz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnN0cnVjdGlvblBhcmFtcyA9IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgICAgIHRoaXMudHlwZSxcbiAgICAgIHRoaXMuX3NvbFRyYW5zYWN0aW9uLmluc3RydWN0aW9ucyxcbiAgICAgIHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIHRoaXMuX2luc3RydWN0aW9uc0RhdGEsXG4gICAgICB0aGlzLl91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWVcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvblBhcmFtcykge1xuICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlTm9uY2VBY2NvdW50OlxuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRyYW5zZmVyOlxuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9BZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVG9rZW5UcmFuc2ZlcjpcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy50b0FkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi5wYXJhbXMuc3Rha2luZ1R5cGUgIT09IFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuc3Rha2luZ0FkZHJlc3MsXG4gICAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCAmJlxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnVuc3Rha2luZ0FkZHJlc3MgJiZcbiAgICAgICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy5zdGFraW5nVHlwZSAhPT0gU29sU3Rha2luZ1R5cGVFbnVtLkpJVE9cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgICAgICB2YWx1ZTogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMudW5zdGFraW5nQWRkcmVzcyxcbiAgICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLnN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBpbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlN0YWtpbmdBdXRob3JpemU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlbGVnYXRlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldENvbXB1dGVVbml0TGltaXQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU2V0UHJpb3JpdHlGZWU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3VzdG9tSW5zdHJ1Y3Rpb246XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgLy8gVGVzdG5ldCB1c2VzIFdBU00tYmFzZWQgcGFyc2luZyAobm8gQHNvbGFuYS93ZWIzLmpzIGRlcGVuZGVuY3kpLlxuICAgIC8vIFRoaXMgdmFsaWRhdGVzIHRoZSBXQVNNIHBhdGggYWdhaW5zdCBwcm9kdWN0aW9uIHRyYWZmaWMgYmVmb3JlXG4gICAgLy8gcmVwbGFjaW5nIHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZm9yIGFsbCBuZXR3b3Jrcy5cbiAgICBpZiAodGhpcy5fY29pbkNvbmZpZy5uYW1lID09PSAndHNvbCcpIHtcbiAgICAgIC8vIGV4cGxhaW5UcmFuc2FjdGlvbiBzaG91bGQgd29yayBvbiB1bnNpZ25lZC9wYXJ0aWFsbHktc2lnbmVkIHRyYW5zYWN0aW9uc1xuICAgICAgLy8gKGUuZy4sIGR1cmluZyBwYXJzZVRyYW5zYWN0aW9uIHJvdW5kLXRyaXBzIHdoZXJlIG51bGwgc2lnbmF0dXJlcyBiZWNvbWVcbiAgICAgIC8vIHplcm8tZmlsbGVkIGJ1ZmZlcnMpLiBVc2Ugc2VyaWFsaXplIHdpdGhvdXQgc2lnbmF0dXJlIHZhbGlkYXRpb24gc2luY2VcbiAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byByZWFkIHRoZSB0cmFuc2FjdGlvbiwgbm90IGJyb2FkY2FzdCBpdC5cbiAgICAgIGNvbnN0IHR4QmFzZTY0ID0gQnVmZmVyLmZyb20oXG4gICAgICAgIHRoaXMuX3NvbFRyYW5zYWN0aW9uLnNlcmlhbGl6ZSh7IHZlcmlmeVNpZ25hdHVyZXM6IGZhbHNlLCByZXF1aXJlQWxsU2lnbmF0dXJlczogZmFsc2UgfSlcbiAgICAgICkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgcmV0dXJuIGV4cGxhaW5Tb2xUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4QmFzZTY0LFxuICAgICAgICBmZWVJbmZvOiB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZSA/IHsgZmVlOiB0aGlzLl9sYW1wb3J0c1BlclNpZ25hdHVyZS50b1N0cmluZygpIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIHRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQ6IHRoaXMuX3Rva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQsXG4gICAgICAgIGNvaW5OYW1lOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVSYXdNc2dJbnN0cnVjdGlvbih0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHBsYWluUmF3TXNnQXV0aG9yaXplVHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZEluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uUGFyYW1zRmFjdG9yeShcbiAgICAgIHRoaXMuX3R5cGUsXG4gICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbi5pbnN0cnVjdGlvbnMsXG4gICAgICB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhLFxuICAgICAgdGhpcy5fdXNlVG9rZW5BZGRyZXNzVG9rZW5OYW1lXG4gICAgKTtcblxuICAgIGxldCBtZW1vOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGR1cmFibGVOb25jZTogRHVyYWJsZU5vbmNlUGFyYW1zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgbGV0IG91dHB1dEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuICAgIC8vIENyZWF0ZSBhIHNlcGFyYXRlIGFycmF5IGZvciB0b2tlbiBlbmFibGVtZW50c1xuICAgIGNvbnN0IHRva2VuRW5hYmxlbWVudHM6IElUb2tlbkVuYWJsZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBkZWNvZGVkSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2U6XG4gICAgICAgICAgZHVyYWJsZU5vbmNlID0gKGluc3RydWN0aW9uIGFzIE5vbmNlKS5wYXJhbXM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTWVtbzpcbiAgICAgICAgICBtZW1vID0gKGluc3RydWN0aW9uIGFzIE1lbW8pLnBhcmFtcy5tZW1vO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRyYW5zZmVyOlxuICAgICAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbiBhcyBUcmFuc2ZlcjtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogdHJhbnNmZXJJbnN0cnVjdGlvbi5wYXJhbXMudG9BZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0cmFuc2Zlckluc3RydWN0aW9uLnBhcmFtcy5hbW91bnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50LnBsdXModHJhbnNmZXJJbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ub2tlblRyYW5zZmVyOlxuICAgICAgICAgIGNvbnN0IHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uIGFzIFRva2VuVHJhbnNmZXI7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRva2VuVHJhbnNmZXJJbnN0cnVjdGlvbi5wYXJhbXMudG9BZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiB0b2tlblRyYW5zZmVySW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICAgIHRva2VuTmFtZTogdG9rZW5UcmFuc2Zlckluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlTm9uY2VBY2NvdW50OlxuICAgICAgICAgIGNvbnN0IGNyZWF0ZUluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24gYXMgV2FsbGV0SW5pdDtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogY3JlYXRlSW5zdHJ1Y3Rpb24ucGFyYW1zLm5vbmNlQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogY3JlYXRlSW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQucGx1cyhjcmVhdGVJbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgICAgY29uc3Qgc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbiBhcyBTdGFraW5nQWN0aXZhdGU7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uLnBhcmFtcy5zdGFraW5nQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQucGx1cyhzdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgICAgY29uc3Qgc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbiBhcyBTdGFraW5nV2l0aGRyYXc7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb24ucGFyYW1zLmFtb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQucGx1cyhzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbi5wYXJhbXMuYW1vdW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50OlxuICAgICAgICAgIC8vIFByb2Nlc3MgdG9rZW4gZW5hYmxlbWVudCBpbnN0cnVjdGlvbnMgYW5kIGNvbGxlY3QgdGhlbSBpbiB0aGUgdG9rZW5FbmFibGVtZW50cyBhcnJheVxuICAgICAgICAgIGNvbnN0IGF0YUluaXQgPSBpbnN0cnVjdGlvbiBhcyBBdGFJbml0O1xuICAgICAgICAgIHRva2VuRW5hYmxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBhdGFJbml0LnBhcmFtcy5hdGFBZGRyZXNzLFxuICAgICAgICAgICAgdG9rZW5OYW1lOiBhdGFJbml0LnBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgICAgICB0b2tlbkFkZHJlc3M6IGF0YUluaXQucGFyYW1zLm1pbnRBZGRyZXNzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkN1c3RvbUluc3RydWN0aW9uOlxuICAgICAgICAgIC8vIEN1c3RvbSBpbnN0cnVjdGlvbnMgYXJlIGFyYml0cmFyeSBhbmQgY2Fubm90IGJlIGV4cGxhaW5lZFxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciBkZXNlcmlhbGl6aW5nIGEgdHJhbnNhY3Rpb24sIGR1cmFibGUgbm9uY2UgZGV0YWlscyBhcmUgcG9wdWxhdGVkIGluIHRoZSBub25jZUluZm8gZmllbGRcbiAgICAgIGlmICghZHVyYWJsZU5vbmNlICYmIHRoaXMuX3NvbFRyYW5zYWN0aW9uLm5vbmNlSW5mbykge1xuICAgICAgICBjb25zdCBub25jZUFkdmFuY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShcbiAgICAgICAgICB0aGlzLl9zb2xUcmFuc2FjdGlvbi5ub25jZUluZm8ubm9uY2VJbnN0cnVjdGlvblxuICAgICAgICApO1xuICAgICAgICBkdXJhYmxlTm9uY2UgPSB7XG4gICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IG5vbmNlQWR2YW5jZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWR2YW5jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RXhwbGFpbmVkVHJhbnNhY3Rpb24ob3V0cHV0QW1vdW50LCBvdXRwdXRzLCBtZW1vLCBkdXJhYmxlTm9uY2UsIHRva2VuRW5hYmxlbWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVGZWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5sYW1wb3J0c1BlclNpZ25hdHVyZSB8fCB0aGlzLnRva2VuQWNjb3VudFJlbnRFeGVtcHRBbW91bnQpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUZlZXMgPSB0aGlzLmxhbXBvcnRzUGVyU2lnbmF0dXJlXG4gICAgICAgID8gbmV3IEJpZ051bWJlcih0aGlzLmxhbXBvcnRzUGVyU2lnbmF0dXJlKS5tdWx0aXBsaWVkQnkodGhpcy5udW1iZXJPZlJlcXVpcmVkU2lnbmF0dXJlcykudG9GaXhlZCgwKVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCByZW50RmVlcyA9IHRoaXMudG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudFxuICAgICAgICA/IG5ldyBCaWdOdW1iZXIodGhpcy50b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KS5tdWx0aXBsaWVkQnkodGhpcy5udW1iZXJPZkFUQUNyZWF0aW9uSW5zdHJ1Y3Rpb25zKS50b0ZpeGVkKDApXG4gICAgICAgIDogMDtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHNpZ25hdHVyZUZlZXMpLnBsdXMocmVudEZlZXMpLnRvRml4ZWQoMCk7XG4gICAgfVxuICAgIHJldHVybiBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEV4cGxhaW5lZFRyYW5zYWN0aW9uKFxuICAgIG91dHB1dEFtb3VudDogQmlnTnVtYmVyLFxuICAgIG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10sXG4gICAgbWVtbzogdW5kZWZpbmVkIHwgc3RyaW5nID0gdW5kZWZpbmVkLFxuICAgIGR1cmFibGVOb25jZTogdW5kZWZpbmVkIHwgRHVyYWJsZU5vbmNlUGFyYW1zID0gdW5kZWZpbmVkLFxuICAgIHRva2VuRW5hYmxlbWVudHM6IElUb2tlbkVuYWJsZW1lbnRbXSA9IFtdXG4gICk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IGZlZVN0cmluZyA9IHRoaXMuY2FsY3VsYXRlRmVlKCk7XG5cbiAgICAvLyBDcmVhdGUgZGlzcGxheU9yZGVyIHdpdGggdG9rZW5FbmFibGVtZW50cyBhbHdheXMgaW5jbHVkZWRcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ3R5cGUnLFxuICAgICAgJ2Jsb2NraGFzaCcsXG4gICAgICAnZHVyYWJsZU5vbmNlJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAndG9rZW5FbmFibGVtZW50cycsXG4gICAgICAnZmVlJyxcbiAgICAgICdtZW1vJyxcbiAgICBdO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBiYXNlIGV4cGxhbmF0aW9uIG9iamVjdCB3aXRoIHRva2VuRW5hYmxlbWVudHMgYWx3YXlzIGluY2x1ZGVkXG4gICAgY29uc3QgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZVt0aGlzLnR5cGVdLnRvU3RyaW5nKCksXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgb3V0cHV0QW1vdW50OiBvdXRwdXRBbW91bnQudG9GaXhlZCgwKSxcbiAgICAgIG91dHB1dHM6IG91dHB1dHMsXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiBmZWVTdHJpbmcsXG4gICAgICAgIGZlZVJhdGU6IHRoaXMubGFtcG9ydHNQZXJTaWduYXR1cmUsXG4gICAgICB9LFxuICAgICAgbWVtbzogbWVtbyxcbiAgICAgIGJsb2NraGFzaDogdGhpcy5nZXROb25jZSgpLFxuICAgICAgZHVyYWJsZU5vbmNlOiBkdXJhYmxlTm9uY2UsXG4gICAgICB0b2tlbkVuYWJsZW1lbnRzOiB0b2tlbkVuYWJsZW1lbnRzLFxuICAgIH07XG5cbiAgICByZXR1cm4gZXhwbGFuYXRpb247XG4gIH1cblxuICBwcml2YXRlIGV4cGxhaW5SYXdNc2dBdXRob3JpemVUcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCB7IGluc3RydWN0aW9ucyB9ID0gdGhpcy5fc29sVHJhbnNhY3Rpb247XG4gICAgY29uc3Qgbm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbnNbMF0pO1xuICAgIGNvbnN0IGR1cmFibGVOb25jZSA9IHtcbiAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IG5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgIH07XG4gICAgY29uc3QgZGF0YSA9IGluc3RydWN0aW9uc1sxXS5kYXRhLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBzdGFraW5nQXV0aG9yaXplUGFyYW1zOiBTdGFraW5nQXV0aG9yaXplUGFyYW1zID1cbiAgICAgIGRhdGEgPT09IHZhbGlkSW5zdHJ1Y3Rpb25EYXRhXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IGluc3RydWN0aW9uc1sxXS5rZXlzWzBdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgb2xkV2l0aGRyYXdBZGRyZXNzOiBpbnN0cnVjdGlvbnNbMV0ua2V5c1syXS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG5ld1dpdGhkcmF3QWRkcmVzczogaW5zdHJ1Y3Rpb25zWzFdLmtleXNbM10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjdXN0b2RpYW5BZGRyZXNzOiBpbnN0cnVjdGlvbnNbMV0ua2V5c1s0XS5wdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IGluc3RydWN0aW9uc1sxXS5rZXlzWzBdLnB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgb2xkV2l0aGRyYXdBZGRyZXNzOiAnJyxcbiAgICAgICAgICAgIG5ld1dpdGhkcmF3QWRkcmVzczogJycsXG4gICAgICAgICAgICBvbGRTdGFraW5nQXV0aG9yaXR5QWRkcmVzczogaW5zdHJ1Y3Rpb25zWzFdLmtleXNbMl0ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBuZXdTdGFraW5nQXV0aG9yaXR5QWRkcmVzczogaW5zdHJ1Y3Rpb25zWzFdLmtleXNbM10ucHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgfTtcbiAgICBjb25zdCBmZWVTdHJpbmcgPSB0aGlzLmNhbGN1bGF0ZUZlZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXI6IFtcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAnYmxvY2toYXNoJyxcbiAgICAgICAgJ2R1cmFibGVOb25jZScsXG4gICAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAgICd0b2tlbkVuYWJsZW1lbnRzJyxcbiAgICAgICAgJ2ZlZScsXG4gICAgICAgICdtZW1vJyxcbiAgICAgIF0sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZVt0aGlzLnR5cGVdLnRvU3RyaW5nKCksXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgb3V0cHV0QW1vdW50OiAwLFxuICAgICAgb3V0cHV0czogW10sXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiBmZWVTdHJpbmcsXG4gICAgICAgIGZlZVJhdGU6IHRoaXMubGFtcG9ydHNQZXJTaWduYXR1cmUsXG4gICAgICB9LFxuICAgICAgYmxvY2toYXNoOiB0aGlzLmdldE5vbmNlKCksXG4gICAgICBkdXJhYmxlTm9uY2U6IGR1cmFibGVOb25jZSxcbiAgICAgIHN0YWtpbmdBdXRob3JpemU6IHN0YWtpbmdBdXRob3JpemVQYXJhbXMsXG4gICAgICB0b2tlbkVuYWJsZW1lbnRzOiBbXSwgLy8gQWx3YXlzIGluY2x1ZGUgdG9rZW5FbmFibGVtZW50cyBhcyBhbiBlbXB0eSBhcnJheSBmb3IgY29uc2lzdGVuY3lcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -18,6 +18,8 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
18
18
  protected _memo?: string;
19
19
  protected _feePayer?: string;
20
20
  protected _priorityFee: number;
21
+ /** Explicit compute-unit limit requested for the transaction, in compute units */
22
+ protected _computeUnitLimit?: number;
21
23
  /** Optional override for the zk-elgamal-proof program id (used by CT instruction builders) */
22
24
  protected _zkProofProgramId?: string;
23
25
  constructor(_coinConfig: Readonly<CoinConfig>);
@@ -69,6 +71,21 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
69
71
  * @returns {Signature[]} The list of external signatures
70
72
  */
71
73
  protected getAdditionalSignatures(): Signature[];
74
+ /**
75
+ * Add a signature produced by the fee payer of the transaction being built.
76
+ * The fee payer is account 0 of the transaction message, so its signature belongs in slot 0.
77
+ * Use this for signatures produced by the enterprise fee address key (HSM single-sig) of a
78
+ * sponsored transaction; the key must match account 0.
79
+ *
80
+ * @param {BasePublicKey} publicKey The public key of the fee payer; must be account 0 of the message
81
+ * @param {Buffer} signature The signature of the transaction payload
82
+ */
83
+ addFeePayerSignature(publicKey: BasePublicKey, signature: Buffer): void;
84
+ /**
85
+ * The account 0 key of the message being built, i.e. the fee payer: the first static account
86
+ * key of a versioned transaction, or the fee payer of a legacy transaction.
87
+ */
88
+ private getFeePayerAccountKey;
72
89
  /**
73
90
  * Sets the sender of this transaction.
74
91
  * This account will be responsible for paying transaction fees.
@@ -95,6 +112,22 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
95
112
  memo(memo: string): this;
96
113
  fee(feeOptions: FeeOptions): this;
97
114
  setPriorityFee(feeOptions: FeeOptions): this;
115
+ /**
116
+ * Set an explicit compute-unit limit for this transaction.
117
+ *
118
+ * The priority fee is charged on the requested compute-unit limit rather than the
119
+ * units actually consumed, so every sponsored transaction must set an intent-sized
120
+ * limit. When set, the built transaction prepends a SetComputeUnitLimit instruction
121
+ * ahead of all other instructions (after the durable-nonce AdvanceNonceAccount):
122
+ * [AdvanceNonce?, SetComputeUnitLimit, SetComputeUnitPrice?, ...]. When unset, the
123
+ * built transaction bytes are unchanged.
124
+ *
125
+ * @param {number} units the requested compute-unit limit, an integer between
126
+ * 1 and 1,400,000 (the on-chain per-transaction maximum)
127
+ * @returns {TransactionBuilder} This transaction builder
128
+ */
129
+ setComputeUnitLimit(units: number): this;
130
+ private validateComputeUnitLimit;
98
131
  feePayer(feePayer: string): this;
99
132
  /**
100
133
  * Used to set the minimum rent exempt amount for an ATA
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}