@bitgo/sdk-coin-tempo 1.6.1 → 1.7.0

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.
@@ -35,6 +35,22 @@ export interface Tip20TransactionRequest {
35
35
  /** Optional TIP-20 token to use for paying fees */
36
36
  feeToken?: Address;
37
37
  }
38
+ export interface TxData {
39
+ type: number | string;
40
+ chainId: number;
41
+ nonce: number;
42
+ maxFeePerGas: string;
43
+ maxPriorityFeePerGas: string;
44
+ gas: string;
45
+ callCount: number;
46
+ feeToken?: string;
47
+ operations: Tip20Operation[];
48
+ signature?: {
49
+ r: Hex;
50
+ s: Hex;
51
+ yParity: number;
52
+ };
53
+ }
38
54
  export declare class Tip20Transaction extends BaseTransaction {
39
55
  private txRequest;
40
56
  private _operations;
@@ -110,8 +126,9 @@ export declare class Tip20Transaction extends BaseTransaction {
110
126
  s: Hex;
111
127
  yParity: number;
112
128
  } | undefined;
113
- toJson(): Record<string, unknown>;
129
+ toJson(): TxData;
114
130
  toBroadcastFormat(): Promise<string>;
131
+ /** @inheritdoc */
115
132
  get id(): string;
116
133
  toString(): string;
117
134
  canBroadcast(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,KAAK,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAsC;gBAE7C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,UAAU,GAAE,cAAc,EAAO;IAMlH,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,OAAO,IAAI,OAAO;IAIZ,SAAS,CAAC,SAAS,CAAC,EAAE;QAAE,CAAC,EAAE,GAAG,CAAC;QAAC,CAAC,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAK9E;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAY5B,aAAa,IAAI,cAAc,EAAE;IAIjC,WAAW,IAAI,OAAO,GAAG,SAAS;IAIlC,iBAAiB,IAAI,MAAM;IAI3B,OAAO,IAAI,OAAO;IAIlB,YAAY,CAAC,SAAS,EAAE;QAAE,CAAC,EAAE,GAAG,CAAC;QAAC,CAAC,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIlE,YAAY,IAAI;QAAE,CAAC,EAAE,GAAG,CAAC;QAAC,CAAC,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAI/D,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAe3B,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,OAAO;CAGxB"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.Tip20Transaction = void 0;
10
10
  const sdk_core_1 = require("@bitgo/sdk-core");
11
11
  const ethers_1 = require("ethers");
12
+ const utils_1 = require("./utils");
12
13
  class Tip20Transaction extends sdk_core_1.BaseTransaction {
13
14
  constructor(_coinConfig, request, operations = []) {
14
15
  super(_coinConfig);
15
16
  this.txRequest = request;
16
17
  this._operations = operations;
18
+ this._outputs = operations.map((op) => ({
19
+ address: op.to,
20
+ value: (0, utils_1.amountToTip20Units)(op.amount).toString(),
21
+ coin: op.token,
22
+ }));
23
+ const totalUnits = operations.reduce((sum, op) => sum + (0, utils_1.amountToTip20Units)(op.amount), 0n);
24
+ this._inputs = [{ address: '', value: totalUnits.toString(), coin: _coinConfig.name }];
17
25
  }
18
26
  get type() {
19
27
  return sdk_core_1.TransactionType.Send;
@@ -159,8 +167,15 @@ class Tip20Transaction extends sdk_core_1.BaseTransaction {
159
167
  async toBroadcastFormat() {
160
168
  return await this.serialize(this._signature);
161
169
  }
170
+ /** @inheritdoc */
162
171
  get id() {
163
- return 'pending';
172
+ try {
173
+ const serialized = this.serializeTransaction(this._signature);
174
+ return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.arrayify(serialized));
175
+ }
176
+ catch {
177
+ return 'pending';
178
+ }
164
179
  }
165
180
  toString() {
166
181
  return JSON.stringify(this.toJson(), null, 2);
@@ -170,4 +185,4 @@ class Tip20Transaction extends sdk_core_1.BaseTransaction {
170
185
  }
171
186
  }
172
187
  exports.Tip20Transaction = Tip20Transaction;
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsOENBQTBGO0FBRTFGLG1DQUFnQztBQTRCaEMsTUFBYSxnQkFBaUIsU0FBUSwwQkFBZTtJQUtuRCxZQUFZLFdBQWlDLEVBQUUsT0FBZ0MsRUFBRSxhQUErQixFQUFFO1FBQ2hILEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBK0M7UUFDN0QsTUFBTSxHQUFHLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQjtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENB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b0IsQ0FBQyxRQUFRLEVBQUU7WUFDcEUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN0QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBekxELDRDQXlMQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVElQLTIwIFRyYW5zYWN0aW9uXG4gKlxuICogUmVwcmVzZW50cyBhIFRlbXBvIEFjY291bnQgQWJzdHJhY3Rpb24gKEFBKSB0cmFuc2FjdGlvbiAodHlwZSAweDc2KVxuICogU3VwcG9ydHMgc2luZ2xlIG9yIGJhdGNoIFRJUC0yMCB0b2tlbiB0cmFuc2ZlcnMgd2l0aCBtZW1vc1xuICovXG5cbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgUGFyc2VUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBBZGRyZXNzLCBIZXgsIFRpcDIwT3BlcmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVElQLTIwIFRyYW5zYWN0aW9uIFJlcXVlc3QgU3RydWN0dXJlXG4gKiBSZXByZXNlbnRzIHRoZSByYXcgdHJhbnNhY3Rpb24gZGF0YSBmb3IgVGVtcG8gQWNjb3VudCBBYnN0cmFjdGlvbiAoRUlQLTc3MDIpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlwMjBUcmFuc2FjdGlvblJlcXVlc3Qge1xuICAvKiogVHJhbnNhY3Rpb24gdHlwZSAoMHg3NiBmb3IgVGVtcG8gQUEpICovXG4gIHR5cGU6IG51bWJlciB8IHN0cmluZztcbiAgLyoqIENoYWluIElEIGZvciB0aGUgVGVtcG8gbmV0d29yayAqL1xuICBjaGFpbklkOiBudW1iZXI7XG4gIC8qKiBUcmFuc2FjdGlvbiBub25jZSAqL1xuICBub25jZTogbnVtYmVyO1xuICAvKiogTWF4aW11bSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpICovXG4gIG1heEZlZVBlckdhczogYmlnaW50O1xuICAvKiogTWF4aW11bSBwcmlvcml0eSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpICovXG4gIG1heFByaW9yaXR5RmVlUGVyR2FzOiBiaWdpbnQ7XG4gIC8qKiBHYXMgbGltaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiAqL1xuICBnYXM6IGJpZ2ludDtcbiAgLyoqIEFycmF5IG9mIGNhbGxzIHRvIGV4ZWN1dGUgaW4gdGhpcyB0cmFuc2FjdGlvbiAqL1xuICBjYWxsczogeyB0bzogQWRkcmVzczsgZGF0YTogSGV4OyB2YWx1ZTogYmlnaW50IH1bXTtcbiAgLyoqIEFjY2VzcyBsaXN0IChvcHRpb25hbCwgdHlwaWNhbGx5IGVtcHR5IGZvciBUSVAtMjApICovXG4gIGFjY2Vzc0xpc3Q/OiB1bmtub3duW107XG4gIC8qKiBPcHRpb25hbCBUSVAtMjAgdG9rZW4gdG8gdXNlIGZvciBwYXlpbmcgZmVlcyAqL1xuICBmZWVUb2tlbj86IEFkZHJlc3M7XG59XG5cbmV4cG9ydCBjbGFzcyBUaXAyMFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSB0eFJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0O1xuICBwcml2YXRlIF9vcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdO1xuICBwcml2YXRlIF9zaWduYXR1cmU/OiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0LCBvcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdID0gW10pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50eFJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuX29wZXJhdGlvbnMgPSBvcGVyYXRpb25zO1xuICB9XG5cbiAgZ2V0IHR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cblxuICBjYW5TaWduKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2VyaWFsaXplKHNpZ25hdHVyZT86IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9KTogUHJvbWlzZTxIZXg+IHtcbiAgICBjb25zdCBzaWcgPSBzaWduYXR1cmUgfHwgdGhpcy5fc2lnbmF0dXJlO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uKHNpZyk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIGNhbGxzIGFzIFJMUCB0dXBsZXMgZm9yIGF0b21pYyBiYXRjaCBleGVjdXRpb25cbiAgICogQHJldHVybnMgQXJyYXkgb2YgW3RvLCB2YWx1ZSwgZGF0YV0gdHVwbGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGVuY29kZUNhbGxzQXNUdXBsZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5jYWxscy5tYXAoKGNhbGwpID0+IFtjYWxsLnRvLCB0aGlzLmJpZ2ludFRvSGV4KGNhbGwudmFsdWUpLCBjYWxsLmRhdGFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgRUlQLTI5MzAgYWNjZXNzIGxpc3QgYXMgUkxQIHR1cGxlc1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBbYWRkcmVzcywgc3RvcmFnZUtleXNbXV0gdHVwbGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGVuY29kZUFjY2Vzc0xpc3QoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy50eFJlcXVlc3QuYWNjZXNzTGlzdCA/PyBbXSkubWFwKChpdGVtOiBhbnkpID0+IFtpdGVtLmFkZHJlc3MsIGl0ZW0uc3RvcmFnZUtleXMgfHwgW11dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGJpZ2ludCB0byBoZXggc3RyaW5nIGZvciBSTFAgZW5jb2RpbmdcbiAgICogQHBhcmFtIHZhbHVlIGJpZ2ludCB2YWx1ZSB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIEhleCBzdHJpbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYmlnaW50VG9IZXgodmFsdWU6IGJpZ2ludCk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSAwbikge1xuICAgICAgcmV0dXJuICcweCc7XG4gICAgfVxuICAgIGNvbnN0IGhleCA9IHZhbHVlLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gJzB4JyArIChoZXgubGVuZ3RoICUgMiA/ICcwJyA6ICcnKSArIGhleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBiYXNlIFJMUCBkYXRhIGFycmF5IHBlciBUZW1wbyBFSVAtNzcwMiBzcGVjaWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjYWxsc1R1cGxlcyBFbmNvZGVkIGNhbGxzXG4gICAqIEBwYXJhbSBhY2Nlc3NUdXBsZXMgRW5jb2RlZCBhY2Nlc3MgbGlzdFxuICAgKiBAcmV0dXJucyBSTFAtcmVhZHkgYXJyYXkgb2YgdHJhbnNhY3Rpb24gZmllbGRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQmFzZVJscERhdGEoY2FsbHNUdXBsZXM6IGFueVtdLCBhY2Nlc3NUdXBsZXM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBbXG4gICAgICBldGhlcnMudXRpbHMuaGV4bGlmeSh0aGlzLnR4UmVxdWVzdC5jaGFpbklkKSxcbiAgICAgIHRoaXMudHhSZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzID8gdGhpcy5iaWdpbnRUb0hleCh0aGlzLnR4UmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcykgOiAnMHgnLFxuICAgICAgdGhpcy5iaWdpbnRUb0hleCh0aGlzLnR4UmVxdWVzdC5tYXhGZWVQZXJHYXMpLFxuICAgICAgdGhpcy5iaWdpbnRUb0hleCh0aGlzLnR4UmVxdWVzdC5nYXMpLFxuICAgICAgY2FsbHNUdXBsZXMsXG4gICAgICBhY2Nlc3NUdXBsZXMsXG4gICAgICAnMHgnLCAvLyBub25jZUtleSAocmVzZXJ2ZWQgZm9yIDJEIG5vbmNlIHN5c3RlbSlcbiAgICAgIGV0aGVycy51dGlscy5oZXhsaWZ5KHRoaXMudHhSZXF1ZXN0Lm5vbmNlKSxcbiAgICAgICcweCcsIC8vIHZhbGlkQmVmb3JlIChyZXNlcnZlZCBmb3IgdGltZSBib3VuZHMpXG4gICAgICAnMHgnLCAvLyB2YWxpZEFmdGVyIChyZXNlcnZlZCBmb3IgdGltZSBib3VuZHMpXG4gICAgICB0aGlzLnR4UmVxdWVzdC5mZWVUb2tlbiB8fCAnMHgnLFxuICAgICAgJzB4JywgLy8gZmVlUGF5ZXJTaWduYXR1cmUgKHJlc2VydmVkIGZvciBzcG9uc29yc2hpcClcbiAgICAgIFtdLCAvLyBhdXRob3JpemF0aW9uTGlzdCAoRUlQLTc3MDIpXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgc2VjcDI1NmsxIHNpZ25hdHVyZSBhcyA2NS1ieXRlIGVudmVsb3BlXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgRUNEU0Egc2lnbmF0dXJlIGNvbXBvbmVudHNcbiAgICogQHJldHVybnMgSGV4IHN0cmluZyBvZiBjb25jYXRlbmF0ZWQgciAoMzIpICsgcyAoMzIpICsgdiAoMSkgYnl0ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZTogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHYgPSBzaWduYXR1cmUueVBhcml0eSArIDI3O1xuICAgIGNvbnN0IHNpZ25hdHVyZUJ5dGVzID0gZXRoZXJzLnV0aWxzLmNvbmNhdChbXG4gICAgICBldGhlcnMudXRpbHMuemVyb1BhZChzaWduYXR1cmUuciwgMzIpLFxuICAgICAgZXRoZXJzLnV0aWxzLnplcm9QYWQoc2lnbmF0dXJlLnMsIDMyKSxcbiAgICAgIGV0aGVycy51dGlscy5oZXhsaWZ5KHYpLFxuICAgIF0pO1xuICAgIHJldHVybiBldGhlcnMudXRpbHMuaGV4bGlmeShzaWduYXR1cmVCeXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogUkxQIGVuY29kZSBhbmQgcHJlcGVuZCB0cmFuc2FjdGlvbiB0eXBlIGJ5dGVcbiAgICogQHBhcmFtIHJscERhdGEgVHJhbnNhY3Rpb24gZmllbGRzIGFycmF5XG4gICAqIEByZXR1cm5zIEhleCBzdHJpbmcgd2l0aCAweDc2IHByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBybHBFbmNvZGVXaXRoVHlwZVByZWZpeChybHBEYXRhOiBhbnlbXSk6IEhleCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBldGhlcnMudXRpbHMuUkxQLmVuY29kZShybHBEYXRhKTtcbiAgICAgIHJldHVybiAoJzB4NzYnICsgZW5jb2RlZC5zbGljZSgyKSkgYXMgSGV4O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gUkxQIGVuY29kZSB0cmFuc2FjdGlvbjogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIFRlbXBvIEFBIHRyYW5zYWN0aW9uICh0eXBlIDB4NzYpIHBlciBFSVAtNzcwMiBzcGVjaWZpY2F0aW9uXG4gICAqIEZvcm1hdDogMHg3NiB8fCBSTFAoW2NoYWluSWQsIGZlZXMsIGdhcywgY2FsbHMsIGFjY2Vzc0xpc3QsIG5vbmNlIGZpZWxkcywgZmVlVG9rZW4sIHNwb25zb3JzaGlwLCBhdXRoTGlzdCwgc2lnbmF0dXJlP10pXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgT3B0aW9uYWwgRUNEU0Egc2lnbmF0dXJlIChvbWl0IGZvciB1bnNpZ25lZCB0cmFuc2FjdGlvbnMpXG4gICAqIEByZXR1cm5zIFJMUC1lbmNvZGVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplVHJhbnNhY3Rpb24oc2lnbmF0dXJlPzogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0pOiBIZXgge1xuICAgIGNvbnN0IGNhbGxzVHVwbGVzID0gdGhpcy5lbmNvZGVDYWxsc0FzVHVwbGVzKCk7XG4gICAgY29uc3QgYWNjZXNzVHVwbGVzID0gdGhpcy5lbmNvZGVBY2Nlc3NMaXN0KCk7XG4gICAgY29uc3QgcmxwRGF0YSA9IHRoaXMuYnVpbGRCYXNlUmxwRGF0YShjYWxsc1R1cGxlcywgYWNjZXNzVHVwbGVzKTtcblxuICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgIHJscERhdGEucHVzaCh0aGlzLmVuY29kZVNpZ25hdHVyZShzaWduYXR1cmUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ybHBFbmNvZGVXaXRoVHlwZVByZWZpeChybHBEYXRhKTtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbnMoKTogVGlwMjBPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9vcGVyYXRpb25zXTtcbiAgfVxuXG4gIGdldEZlZVRva2VuKCk6IEFkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5mZWVUb2tlbjtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmNhbGxzLmxlbmd0aDtcbiAgfVxuXG4gIGlzQmF0Y2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmNhbGxzLmxlbmd0aCA+IDE7XG4gIH1cblxuICBzZXRTaWduYXR1cmUoc2lnbmF0dXJlOiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpOiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMudHhSZXF1ZXN0LnR5cGUsXG4gICAgICBjaGFpbklkOiB0aGlzLnR4UmVxdWVzdC5jaGFpbklkLFxuICAgICAgbm9uY2U6IHRoaXMudHhSZXF1ZXN0Lm5vbmNlLFxuICAgICAgbWF4RmVlUGVyR2FzOiB0aGlzLnR4UmVxdWVzdC5tYXhGZWVQZXJHYXMudG9TdHJpbmcoKSxcbiAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0aGlzLnR4UmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgZ2FzOiB0aGlzLnR4UmVxdWVzdC5nYXMudG9TdHJpbmcoKSxcbiAgICAgIGNhbGxDb3VudDogdGhpcy50eFJlcXVlc3QuY2FsbHMubGVuZ3RoLFxuICAgICAgZmVlVG9rZW46IHRoaXMudHhSZXF1ZXN0LmZlZVRva2VuLFxuICAgICAgb3BlcmF0aW9uczogdGhpcy5fb3BlcmF0aW9ucyxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy5fc2lnbmF0dXJlLFxuICAgIH07XG4gIH1cblxuICBhc3luYyB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcmlhbGl6ZSh0aGlzLl9zaWduYXR1cmUpO1xuICB9XG5cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdwZW5kaW5nJztcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKCksIG51bGwsIDIpO1xuICB9XG5cbiAgY2FuQnJvYWRjYXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5jYWxscy5sZW5ndGggPiAwICYmIHRoaXMudHhSZXF1ZXN0LmNoYWluSWQgPiAwO1xuICB9XG59XG4iXX0=
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsOENBQTBGO0FBRTFGLG1DQUFnQztBQUVoQyxtQ0FBNkM7QUF3QzdDLE1BQWEsZ0JBQWlCLFNBQVEsMEJBQWU7SUFLbkQsWUFBWSxXQUFpQyxFQUFFLE9BQWdDLEVBQUUsYUFBK0IsRUFBRTtRQUNoSCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNkLEtBQUssRUFBRSxJQUFBLDBCQUFrQixFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDL0MsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLO1NBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUEsMEJBQWtCLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sMEJBQWUsQ0FBQyxJ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SCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlELE9BQU8sZUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQXRNRCw0Q0FzTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRJUC0yMCBUcmFuc2FjdGlvblxuICpcbiAqIFJlcHJlc2VudHMgYSBUZW1wbyBBY2NvdW50IEFic3RyYWN0aW9uIChBQSkgdHJhbnNhY3Rpb24gKHR5cGUgMHg3NilcbiAqIFN1cHBvcnRzIHNpbmdsZSBvciBiYXRjaCBUSVAtMjAgdG9rZW4gdHJhbnNmZXJzIHdpdGggbWVtb3NcbiAqL1xuXG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb24sIFBhcnNlVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgQWRkcmVzcywgSGV4LCBUaXAyME9wZXJhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYW1vdW50VG9UaXAyMFVuaXRzIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogVElQLTIwIFRyYW5zYWN0aW9uIFJlcXVlc3QgU3RydWN0dXJlXG4gKiBSZXByZXNlbnRzIHRoZSByYXcgdHJhbnNhY3Rpb24gZGF0YSBmb3IgVGVtcG8gQWNjb3VudCBBYnN0cmFjdGlvbiAoRUlQLTc3MDIpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlwMjBUcmFuc2FjdGlvblJlcXVlc3Qge1xuICAvKiogVHJhbnNhY3Rpb24gdHlwZSAoMHg3NiBmb3IgVGVtcG8gQUEpICovXG4gIHR5cGU6IG51bWJlciB8IHN0cmluZztcbiAgLyoqIENoYWluIElEIGZvciB0aGUgVGVtcG8gbmV0d29yayAqL1xuICBjaGFpbklkOiBudW1iZXI7XG4gIC8qKiBUcmFuc2FjdGlvbiBub25jZSAqL1xuICBub25jZTogbnVtYmVyO1xuICAvKiogTWF4aW11bSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpICovXG4gIG1heEZlZVBlckdhczogYmlnaW50O1xuICAvKiogTWF4aW11bSBwcmlvcml0eSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpICovXG4gIG1heFByaW9yaXR5RmVlUGVyR2FzOiBiaWdpbnQ7XG4gIC8qKiBHYXMgbGltaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiAqL1xuICBnYXM6IGJpZ2ludDtcbiAgLyoqIEFycmF5IG9mIGNhbGxzIHRvIGV4ZWN1dGUgaW4gdGhpcyB0cmFuc2FjdGlvbiAqL1xuICBjYWxsczogeyB0bzogQWRkcmVzczsgZGF0YTogSGV4OyB2YWx1ZTogYmlnaW50IH1bXTtcbiAgLyoqIEFjY2VzcyBsaXN0IChvcHRpb25hbCwgdHlwaWNhbGx5IGVtcHR5IGZvciBUSVAtMjApICovXG4gIGFjY2Vzc0xpc3Q/OiB1bmtub3duW107XG4gIC8qKiBPcHRpb25hbCBUSVAtMjAgdG9rZW4gdG8gdXNlIGZvciBwYXlpbmcgZmVlcyAqL1xuICBmZWVUb2tlbj86IEFkZHJlc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHhEYXRhIHtcbiAgdHlwZTogbnVtYmVyIHwgc3RyaW5nO1xuICBjaGFpbklkOiBudW1iZXI7XG4gIG5vbmNlOiBudW1iZXI7XG4gIG1heEZlZVBlckdhczogc3RyaW5nO1xuICBtYXhQcmlvcml0eUZlZVBlckdhczogc3RyaW5nO1xuICBnYXM6IHN0cmluZztcbiAgY2FsbENvdW50OiBudW1iZXI7XG4gIGZlZVRva2VuPzogc3RyaW5nO1xuICBvcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdO1xuICBzaWduYXR1cmU/OiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpcDIwVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIHR4UmVxdWVzdDogVGlwMjBUcmFuc2FjdGlvblJlcXVlc3Q7XG4gIHByaXZhdGUgX29wZXJhdGlvbnM6IFRpcDIwT3BlcmF0aW9uW107XG4gIHByaXZhdGUgX3NpZ25hdHVyZT86IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9O1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPiwgcmVxdWVzdDogVGlwMjBUcmFuc2FjdGlvblJlcXVlc3QsIG9wZXJhdGlvbnM6IFRpcDIwT3BlcmF0aW9uW10gPSBbXSkge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnR4UmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5fb3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG9wZXJhdGlvbnMubWFwKChvcCkgPT4gKHtcbiAgICAgIGFkZHJlc3M6IG9wLnRvLFxuICAgICAgdmFsdWU6IGFtb3VudFRvVGlwMjBVbml0cyhvcC5hbW91bnQpLnRvU3RyaW5nKCksXG4gICAgICBjb2luOiBvcC50b2tlbixcbiAgICB9KSk7XG4gICAgY29uc3QgdG90YWxVbml0cyA9IG9wZXJhdGlvbnMucmVkdWNlKChzdW0sIG9wKSA9PiBzdW0gKyBhbW91bnRUb1RpcDIwVW5pdHMob3AuYW1vdW50KSwgMG4pO1xuICAgIHRoaXMuX2lucHV0cyA9IFt7IGFkZHJlc3M6ICcnLCB2YWx1ZTogdG90YWxVbml0cy50b1N0cmluZygpLCBjb2luOiBfY29pbkNvbmZpZy5uYW1lIH1dO1xuICB9XG5cbiAgZ2V0IHR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cblxuICBjYW5TaWduKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2VyaWFsaXplKHNpZ25hdHVyZT86IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9KTogUHJvbWlzZTxIZXg+IHtcbiAgICBjb25zdCBzaWcgPSBzaWduYXR1cmUgfHwgdGhpcy5fc2lnbmF0dXJlO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uKHNpZyk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIGNhbGxzIGFzIFJMUCB0dXBsZXMgZm9yIGF0b21pYyBiYXRjaCBleGVjdXRpb25cbiAgICogQHJldHVybnMgQXJyYXkgb2YgW3RvLCB2YWx1ZSwgZGF0YV0gdHVwbGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGVuY29kZUNhbGxzQXNUdXBsZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5jYWxscy5tYXAoKGNhbGwpID0+IFtjYWxsLnRvLCB0aGlzLmJpZ2ludFRvSGV4KGNhbGwudmFsdWUpLCBjYWxsLmRhdGFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgRUlQLTI5MzAgYWNjZXNzIGxpc3QgYXMgUkxQIHR1cGxlc1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBbYWRkcmVzcywgc3RvcmFnZUtleXNbXV0gdHVwbGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGVuY29kZUFjY2Vzc0xpc3QoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy50eFJlcXVlc3QuYWNjZXNzTGlzdCA/PyBbXSkubWFwKChpdGVtOiBhbnkpID0+IFtpdGVtLmFkZHJlc3MsIGl0ZW0uc3RvcmFnZUtleXMgfHwgW11dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGJpZ2ludCB0byBoZXggc3RyaW5nIGZvciBSTFAgZW5jb2RpbmdcbiAgICogQHBhcmFtIHZhbHVlIGJpZ2ludCB2YWx1ZSB0byBjb252ZXJ0XG4gICAqIEByZXR1cm5zIEhleCBzdHJpbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYmlnaW50VG9IZXgodmFsdWU6IGJpZ2ludCk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSAwbikge1xuICAgICAgcmV0dXJuICcweCc7XG4gICAgfVxuICAgIGNvbnN0IGhleCA9IHZhbHVlLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gJzB4JyArIChoZXgubGVuZ3RoICUgMiA/ICcwJyA6ICcnKSArIGhleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBiYXNlIFJMUCBkYXRhIGFycmF5IHBlciBUZW1wbyBFSVAtNzcwMiBzcGVjaWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjYWxsc1R1cGxlcyBFbmNvZGVkIGNhbGxzXG4gICAqIEBwYXJhbSBhY2Nlc3NUdXBsZXMgRW5jb2RlZCBhY2Nlc3MgbGlzdFxuICAgKiBAcmV0dXJucyBSTFAtcmVhZHkgYXJyYXkgb2YgdHJhbnNhY3Rpb24gZmllbGRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQmFzZVJscERhdGEoY2FsbHNUdXBsZXM6IGFueVtdLCBhY2Nlc3NUdXBsZXM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBbXG4gICAgICBldGhlcnMudXRpbHMuaGV4bGlmeSh0aGlzLnR4UmVxdWVzdC5jaGFpbklkKSxcbiAgICAgIHRoaXMudHhSZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzID8gdGhpcy5iaWdpbnRUb0hleCh0aGlzLnR4UmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcykgOiAnMHgnLFxuICAgICAgdGhpcy5iaWdpbnRUb0hleCh0aGlzLnR4UmVxdWVzdC5tYXhGZWVQZXJHYXMpLFxuICAgICAgdGhpcy5iaWdpbnRUb0hleCh0aGlzLnR4UmVxdWVzdC5nYXMpLFxuICAgICAgY2FsbHNUdXBsZXMsXG4gICAgICBhY2Nlc3NUdXBsZXMsXG4gICAgICAnMHgnLCAvLyBub25jZUtleSAocmVzZXJ2ZWQgZm9yIDJEIG5vbmNlIHN5c3RlbSlcbiAgICAgIGV0aGVycy51dGlscy5oZXhsaWZ5KHRoaXMudHhSZXF1ZXN0Lm5vbmNlKSxcbiAgICAgICcweCcsIC8vIHZhbGlkQmVmb3JlIChyZXNlcnZlZCBmb3IgdGltZSBib3VuZHMpXG4gICAgICAnMHgnLCAvLyB2YWxpZEFmdGVyIChyZXNlcnZlZCBmb3IgdGltZSBib3VuZHMpXG4gICAgICB0aGlzLnR4UmVxdWVzdC5mZWVUb2tlbiB8fCAnMHgnLFxuICAgICAgJzB4JywgLy8gZmVlUGF5ZXJTaWduYXR1cmUgKHJlc2VydmVkIGZvciBzcG9uc29yc2hpcClcbiAgICAgIFtdLCAvLyBhdXRob3JpemF0aW9uTGlzdCAoRUlQLTc3MDIpXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgc2VjcDI1NmsxIHNpZ25hdHVyZSBhcyA2NS1ieXRlIGVudmVsb3BlXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgRUNEU0Egc2lnbmF0dXJlIGNvbXBvbmVudHNcbiAgICogQHJldHVybnMgSGV4IHN0cmluZyBvZiBjb25jYXRlbmF0ZWQgciAoMzIpICsgcyAoMzIpICsgdiAoMSkgYnl0ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZTogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHYgPSBzaWduYXR1cmUueVBhcml0eSArIDI3O1xuICAgIGNvbnN0IHNpZ25hdHVyZUJ5dGVzID0gZXRoZXJzLnV0aWxzLmNvbmNhdChbXG4gICAgICBldGhlcnMudXRpbHMuemVyb1BhZChzaWduYXR1cmUuciwgMzIpLFxuICAgICAgZXRoZXJzLnV0aWxzLnplcm9QYWQoc2lnbmF0dXJlLnMsIDMyKSxcbiAgICAgIGV0aGVycy51dGlscy5oZXhsaWZ5KHYpLFxuICAgIF0pO1xuICAgIHJldHVybiBldGhlcnMudXRpbHMuaGV4bGlmeShzaWduYXR1cmVCeXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogUkxQIGVuY29kZSBhbmQgcHJlcGVuZCB0cmFuc2FjdGlvbiB0eXBlIGJ5dGVcbiAgICogQHBhcmFtIHJscERhdGEgVHJhbnNhY3Rpb24gZmllbGRzIGFycmF5XG4gICAqIEByZXR1cm5zIEhleCBzdHJpbmcgd2l0aCAweDc2IHByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBybHBFbmNvZGVXaXRoVHlwZVByZWZpeChybHBEYXRhOiBhbnlbXSk6IEhleCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBldGhlcnMudXRpbHMuUkxQLmVuY29kZShybHBEYXRhKTtcbiAgICAgIHJldHVybiAoJzB4NzYnICsgZW5jb2RlZC5zbGljZSgyKSkgYXMgSGV4O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gUkxQIGVuY29kZSB0cmFuc2FjdGlvbjogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIFRlbXBvIEFBIHRyYW5zYWN0aW9uICh0eXBlIDB4NzYpIHBlciBFSVAtNzcwMiBzcGVjaWZpY2F0aW9uXG4gICAqIEZvcm1hdDogMHg3NiB8fCBSTFAoW2NoYWluSWQsIGZlZXMsIGdhcywgY2FsbHMsIGFjY2Vzc0xpc3QsIG5vbmNlIGZpZWxkcywgZmVlVG9rZW4sIHNwb25zb3JzaGlwLCBhdXRoTGlzdCwgc2lnbmF0dXJlP10pXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgT3B0aW9uYWwgRUNEU0Egc2lnbmF0dXJlIChvbWl0IGZvciB1bnNpZ25lZCB0cmFuc2FjdGlvbnMpXG4gICAqIEByZXR1cm5zIFJMUC1lbmNvZGVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplVHJhbnNhY3Rpb24oc2lnbmF0dXJlPzogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0pOiBIZXgge1xuICAgIGNvbnN0IGNhbGxzVHVwbGVzID0gdGhpcy5lbmNvZGVDYWxsc0FzVHVwbGVzKCk7XG4gICAgY29uc3QgYWNjZXNzVHVwbGVzID0gdGhpcy5lbmNvZGVBY2Nlc3NMaXN0KCk7XG4gICAgY29uc3QgcmxwRGF0YSA9IHRoaXMuYnVpbGRCYXNlUmxwRGF0YShjYWxsc1R1cGxlcywgYWNjZXNzVHVwbGVzKTtcblxuICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgIHJscERhdGEucHVzaCh0aGlzLmVuY29kZVNpZ25hdHVyZShzaWduYXR1cmUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ybHBFbmNvZGVXaXRoVHlwZVByZWZpeChybHBEYXRhKTtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbnMoKTogVGlwMjBPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9vcGVyYXRpb25zXTtcbiAgfVxuXG4gIGdldEZlZVRva2VuKCk6IEFkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5mZWVUb2tlbjtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmNhbGxzLmxlbmd0aDtcbiAgfVxuXG4gIGlzQmF0Y2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmNhbGxzLmxlbmd0aCA+IDE7XG4gIH1cblxuICBzZXRTaWduYXR1cmUoc2lnbmF0dXJlOiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpOiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0aGlzLnR4UmVxdWVzdC50eXBlLFxuICAgICAgY2hhaW5JZDogdGhpcy50eFJlcXVlc3QuY2hhaW5JZCxcbiAgICAgIG5vbmNlOiB0aGlzLnR4UmVxdWVzdC5ub25jZSxcbiAgICAgIG1heEZlZVBlckdhczogdGhpcy50eFJlcXVlc3QubWF4RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdGhpcy50eFJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMudG9TdHJpbmcoKSxcbiAgICAgIGdhczogdGhpcy50eFJlcXVlc3QuZ2FzLnRvU3RyaW5nKCksXG4gICAgICBjYWxsQ291bnQ6IHRoaXMudHhSZXF1ZXN0LmNhbGxzLmxlbmd0aCxcbiAgICAgIGZlZVRva2VuOiB0aGlzLnR4UmVxdWVzdC5mZWVUb2tlbixcbiAgICAgIG9wZXJhdGlvbnM6IHRoaXMuX29wZXJhdGlvbnMsXG4gICAgICBzaWduYXR1cmU6IHRoaXMuX3NpZ25hdHVyZSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdG9Ccm9hZGNhc3RGb3JtYXQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJpYWxpemUodGhpcy5fc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplVHJhbnNhY3Rpb24odGhpcy5fc2lnbmF0dXJlKTtcbiAgICAgIHJldHVybiBldGhlcnMudXRpbHMua2VjY2FrMjU2KGV0aGVycy51dGlscy5hcnJheWlmeShzZXJpYWxpemVkKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKCksIG51bGwsIDIpO1xuICB9XG5cbiAgY2FuQnJvYWRjYXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5jYWxscy5sZW5ndGggPiAwICYmIHRoaXMudHhSZXF1ZXN0LmNoYWluSWQgPiAwO1xuICB9XG59XG4iXX0=
@@ -7,7 +7,7 @@
7
7
  * - Custom fee token selection
8
8
  * - EIP-7702 Account Abstraction (type 0x76)
9
9
  */
10
- import { TransactionBuilder as AbstractTransactionBuilder, TransferBuilder } from '@bitgo/abstract-eth';
10
+ import { Transaction as EthTransaction, TransactionBuilder as AbstractTransactionBuilder, TransferBuilder } from '@bitgo/abstract-eth';
11
11
  import { BaseTransaction } from '@bitgo/sdk-core';
12
12
  import { BaseCoin as CoinConfig } from '@bitgo/statics';
13
13
  import { Address, Tip20Operation } from './types';
@@ -22,6 +22,7 @@ export declare class Tip20TransactionBuilder extends AbstractTransactionBuilder
22
22
  private _gas?;
23
23
  private _maxFeePerGas?;
24
24
  private _maxPriorityFeePerGas?;
25
+ private _restoredSignature?;
25
26
  constructor(_coinConfig: Readonly<CoinConfig>);
26
27
  /**
27
28
  * Implement the transfer method from abstract class
@@ -36,8 +37,23 @@ export declare class Tip20TransactionBuilder extends AbstractTransactionBuilder
36
37
  * @throws BuildTransactionError if validation fails
37
38
  */
38
39
  validateTransaction(): void;
40
+ /** @inheritdoc */
41
+ validateRawTransaction(rawTransaction: any): void;
42
+ /** @inheritdoc */
43
+ protected fromImplementation(rawTransaction: string, isFirstSigner?: boolean): EthTransaction;
44
+ /**
45
+ * Deserialize a type 0x76 transaction and restore builder state.
46
+ * RLP field layout mirrors buildBaseRlpData() in transaction.ts.
47
+ */
48
+ private fromTip20Transaction;
49
+ /**
50
+ * Decode a single AA call's data back into a Tip20Operation.
51
+ * Expects the call data to encode transferWithMemo(address, uint256, bytes32).
52
+ */
53
+ private decodeCallToOperation;
39
54
  /**
40
55
  * Build the transaction from configured TIP-20 operations and transaction parameters.
56
+ * Signs with _sourceKeyPair if it has been set via sign({ key }).
41
57
  */
42
58
  protected buildImplementation(): Promise<BaseTransaction>;
43
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,IAAI,0BAA0B,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAO,cAAc,EAAE,MAAM,SAAS,CAAC;AAKvD;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,0BAA0B;IACrE,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAS;gBAE3B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,eAAe;IASjE;;;;;;OAMG;IACH,mBAAmB,IAAI,IAAI;IAsB3B;;OAEG;cACa,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAoC/D;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAM7C;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQpC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAS/B;;;;;OAKG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjD;;;;;OAKG;IACH,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjE;;;OAGG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;;OAGG;IACH,WAAW,IAAI,OAAO,GAAG,SAAS;IAIlC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAUxB"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,WAAW,IAAI,cAAc,EAC7B,kBAAkB,IAAI,0BAA0B,EAChD,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,eAAe,EAIhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,OAAO,EAAO,cAAc,EAAE,MAAM,SAAS,CAAC;AAcvD;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,0BAA0B;IACrE,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAsC;gBAErD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,eAAe;IASjE;;;;;;OAMG;IACH,mBAAmB,IAAI,IAAI;IAsB3B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAYjD,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,cAAc;IAU7F;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAyE5B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;OAGG;cACa,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAqD/D;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAM7C;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQpC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAS/B;;;;;OAKG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjD;;;;;OAKG;IACH,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjE;;;OAGG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;;OAGG;IACH,WAAW,IAAI,OAAO,GAAG,SAAS;IAIlC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAUxB"}
@@ -12,8 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.Tip20TransactionBuilder = void 0;
13
13
  const abstract_eth_1 = require("@bitgo/abstract-eth");
14
14
  const sdk_core_1 = require("@bitgo/sdk-core");
15
+ const ethers_1 = require("ethers");
15
16
  const transaction_1 = require("./transaction");
16
17
  const utils_1 = require("./utils");
18
+ const tip20Abi_1 = require("./tip20Abi");
17
19
  const constants_1 = require("./constants");
18
20
  /**
19
21
  * Transaction Builder for TIP-20 tokens on Tempo blockchain
@@ -60,8 +62,120 @@ class Tip20TransactionBuilder extends abstract_eth_1.TransactionBuilder {
60
62
  throw new sdk_core_1.BuildTransactionError('maxPriorityFeePerGas is required to build a transaction');
61
63
  }
62
64
  }
65
+ /** @inheritdoc */
66
+ validateRawTransaction(rawTransaction) {
67
+ if (typeof rawTransaction === 'string' && (0, utils_1.isTip20Transaction)(rawTransaction)) {
68
+ try {
69
+ ethers_1.ethers.utils.RLP.decode('0x' + rawTransaction.slice(4));
70
+ return;
71
+ }
72
+ catch (e) {
73
+ throw new sdk_core_1.ParseTransactionError(`Failed to RLP decode TIP-20 transaction: ${e}`);
74
+ }
75
+ }
76
+ super.validateRawTransaction(rawTransaction);
77
+ }
78
+ /** @inheritdoc */
79
+ fromImplementation(rawTransaction, isFirstSigner) {
80
+ if (!rawTransaction) {
81
+ throw new sdk_core_1.InvalidTransactionError('Raw transaction is empty');
82
+ }
83
+ if ((0, utils_1.isTip20Transaction)(rawTransaction)) {
84
+ return this.fromTip20Transaction(rawTransaction);
85
+ }
86
+ return super.fromImplementation(rawTransaction, isFirstSigner);
87
+ }
88
+ /**
89
+ * Deserialize a type 0x76 transaction and restore builder state.
90
+ * RLP field layout mirrors buildBaseRlpData() in transaction.ts.
91
+ */
92
+ fromTip20Transaction(rawTransaction) {
93
+ try {
94
+ const rlpHex = '0x' + rawTransaction.slice(4);
95
+ const decoded = ethers_1.ethers.utils.RLP.decode(rlpHex);
96
+ if (!Array.isArray(decoded) || decoded.length < 13) {
97
+ throw new sdk_core_1.ParseTransactionError('Invalid TIP-20 transaction: unexpected RLP structure');
98
+ }
99
+ const parseBigInt = (hex) => (!hex || hex === '0x' ? 0n : BigInt(hex));
100
+ const parseHexInt = (hex) => (!hex || hex === '0x' ? 0 : parseInt(hex, 16));
101
+ const chainId = parseHexInt(decoded[0]);
102
+ const maxPriorityFeePerGas = parseBigInt(decoded[1]);
103
+ const maxFeePerGas = parseBigInt(decoded[2]);
104
+ const gas = parseBigInt(decoded[3]);
105
+ const callsTuples = decoded[4];
106
+ const nonce = parseHexInt(decoded[7]);
107
+ const feeTokenRaw = decoded[10];
108
+ const calls = callsTuples.map((tuple) => ({
109
+ to: tuple[0],
110
+ value: parseBigInt(tuple[1]),
111
+ data: tuple[2],
112
+ }));
113
+ const operations = calls.map((call) => this.decodeCallToOperation(call));
114
+ let signature;
115
+ if (decoded.length >= 14 && decoded[13] && decoded[13].length > 2) {
116
+ const sigBytes = ethers_1.ethers.utils.arrayify(decoded[13]);
117
+ if (sigBytes.length === 65) {
118
+ const r = ethers_1.ethers.utils.hexlify(sigBytes.slice(0, 32));
119
+ const s = ethers_1.ethers.utils.hexlify(sigBytes.slice(32, 64));
120
+ const v = sigBytes[64];
121
+ const yParity = v > 1 ? v - 27 : v;
122
+ signature = { r, s, yParity };
123
+ }
124
+ }
125
+ const feeToken = feeTokenRaw && feeTokenRaw !== '0x' ? feeTokenRaw : undefined;
126
+ const txRequest = {
127
+ type: constants_1.AA_TRANSACTION_TYPE,
128
+ chainId,
129
+ nonce,
130
+ maxFeePerGas,
131
+ maxPriorityFeePerGas,
132
+ gas,
133
+ calls,
134
+ accessList: [],
135
+ feeToken,
136
+ };
137
+ this._nonce = nonce;
138
+ this._gas = gas;
139
+ this._maxFeePerGas = maxFeePerGas;
140
+ this._maxPriorityFeePerGas = maxPriorityFeePerGas;
141
+ this._feeToken = feeToken;
142
+ this.operations = operations;
143
+ this._restoredSignature = signature;
144
+ const tx = new transaction_1.Tip20Transaction(this._coinConfig, txRequest, operations);
145
+ if (signature) {
146
+ tx.setSignature(signature);
147
+ }
148
+ return tx;
149
+ }
150
+ catch (e) {
151
+ if (e instanceof sdk_core_1.ParseTransactionError)
152
+ throw e;
153
+ throw new sdk_core_1.ParseTransactionError(`Failed to deserialize TIP-20 transaction: ${e}`);
154
+ }
155
+ }
156
+ /**
157
+ * Decode a single AA call's data back into a Tip20Operation.
158
+ * Expects the call data to encode transferWithMemo(address, uint256, bytes32).
159
+ */
160
+ decodeCallToOperation(call) {
161
+ const iface = new ethers_1.ethers.utils.Interface(tip20Abi_1.TIP20_TRANSFER_WITH_MEMO_ABI);
162
+ try {
163
+ const decoded = iface.decodeFunctionData('transferWithMemo', call.data);
164
+ const toAddress = decoded[0];
165
+ const amountUnits = BigInt(decoded[1].toString());
166
+ const memoBytes32 = decoded[2];
167
+ const amount = (0, utils_1.tip20UnitsToAmount)(amountUnits);
168
+ const stripped = ethers_1.ethers.utils.stripZeros(memoBytes32);
169
+ const memo = stripped.length > 0 ? ethers_1.ethers.utils.toUtf8String(stripped) : undefined;
170
+ return { token: call.to, to: toAddress, amount, memo };
171
+ }
172
+ catch {
173
+ return { token: call.to, to: call.to, amount: (0, utils_1.tip20UnitsToAmount)(call.value) };
174
+ }
175
+ }
63
176
  /**
64
177
  * Build the transaction from configured TIP-20 operations and transaction parameters.
178
+ * Signs with _sourceKeyPair if it has been set via sign({ key }).
65
179
  */
66
180
  async buildImplementation() {
67
181
  if (this._nonce === undefined ||
@@ -90,7 +204,23 @@ class Tip20TransactionBuilder extends abstract_eth_1.TransactionBuilder {
90
204
  accessList: [],
91
205
  feeToken: this._feeToken,
92
206
  };
93
- return new transaction_1.Tip20Transaction(this._coinConfig, txRequest, this.operations);
207
+ const tx = new transaction_1.Tip20Transaction(this._coinConfig, txRequest, this.operations);
208
+ if (this._sourceKeyPair && this._sourceKeyPair.getKeys().prv) {
209
+ const prv = this._sourceKeyPair.getKeys().prv;
210
+ const unsignedHex = await tx.serialize();
211
+ const msgHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.arrayify(unsignedHex));
212
+ const signingKey = new ethers_1.ethers.utils.SigningKey('0x' + prv);
213
+ const sig = signingKey.signDigest(ethers_1.ethers.utils.arrayify(msgHash));
214
+ tx.setSignature({
215
+ r: sig.r,
216
+ s: sig.s,
217
+ yParity: sig.recoveryParam ?? 0,
218
+ });
219
+ }
220
+ else if (this._restoredSignature) {
221
+ tx.setSignature(this._restoredSignature);
222
+ }
223
+ return tx;
94
224
  }
95
225
  /**
96
226
  * Add a single operation to the transaction
@@ -202,12 +332,8 @@ class Tip20TransactionBuilder extends abstract_eth_1.TransactionBuilder {
202
332
  if (!(0, utils_1.isValidTip20Amount)(operation.amount)) {
203
333
  throw new sdk_core_1.BuildTransactionError(`Invalid amount: ${operation.amount}`);
204
334
  }
205
- // Validate memo byte length (handles multi-byte UTF-8 characters)
206
- if (operation.memo) {
207
- const memoByteLength = new TextEncoder().encode(operation.memo).length;
208
- if (memoByteLength > 32) {
209
- throw new sdk_core_1.BuildTransactionError(`Memo too long: ${memoByteLength} bytes. Maximum 32 bytes.`);
210
- }
335
+ if (operation.memo !== undefined && !(0, utils_1.isValidMemoId)(operation.memo)) {
336
+ throw new sdk_core_1.BuildTransactionError(`Invalid memo: must be a non-negative integer`);
211
337
  }
212
338
  }
213
339
  /**
@@ -224,4 +350,4 @@ class Tip20TransactionBuilder extends abstract_eth_1.TransactionBuilder {
224
350
  }
225
351
  }
226
352
  exports.Tip20TransactionBuilder = Tip20TransactionBuilder;
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCxzREFBd0c7QUFDeEcsOENBQXlFO0FBR3pFLCtDQUEwRTtBQUMxRSxtQ0FBOEc7QUFDOUcsMkNBQWtEO0FBRWxEOzs7R0FHRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsaUNBQTBCO0lBUXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBUmIsZUFBVSxHQUFxQixFQUFFLENBQUM7SUFTMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxJQUFhLEVBQUUsYUFBdUI7UUFDN0MsTUFBTSxlQUFlLEdBQUcsSUFBSSw4QkFBZSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7UUFDakMsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksZ0NB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O0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsRUFBa0I7UUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBa0IsRUFBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEUsT0FBTztZQUNMLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSztZQUNaLElBQUk7WUFDSixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1T0QsMERBNE9DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUSVAtMjAgVHJhbnNhY3Rpb24gQnVpbGRlclxuICpcbiAqIFVuaWZpZWQgYnVpbGRlciBmb3IgVElQLTIwIHRyYW5zYWN0aW9ucyBzdXBwb3J0aW5nOlxuICogLSBTaW5nbGUgb3IgYmF0Y2ggb3BlcmF0aW9uc1xuICogLSBQZXItb3BlcmF0aW9uIG1lbW9zIGZvciB0cmFja2luZ1xuICogLSBDdXN0b20gZmVlIHRva2VuIHNlbGVjdGlvblxuICogLSBFSVAtNzcwMiBBY2NvdW50IEFic3RyYWN0aW9uICh0eXBlIDB4NzYpXG4gKi9cblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIGFzIEFic3RyYWN0VHJhbnNhY3Rpb25CdWlsZGVyLCBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICdAYml0Z28vYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBBZGRyZXNzLCBIZXgsIFRpcDIwT3BlcmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uLCBUaXAyMFRyYW5zYWN0aW9uUmVxdWVzdCB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgYW1vdW50VG9UaXAyMFVuaXRzLCBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8sIGlzVmFsaWRBZGRyZXNzLCBpc1ZhbGlkVGlwMjBBbW91bnQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEFBX1RSQU5TQUNUSU9OX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gQnVpbGRlciBmb3IgVElQLTIwIHRva2VucyBvbiBUZW1wbyBibG9ja2NoYWluXG4gKiBFeHRlbmRzIGFic3RyYWN0LWV0aCBUcmFuc2FjdGlvbkJ1aWxkZXIgd2l0aCBUZW1wby1zcGVjaWZpYyBmZWF0dXJlc1xuICovXG5leHBvcnQgY2xhc3MgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBBYnN0cmFjdFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgb3BlcmF0aW9uczogVGlwMjBPcGVyYXRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9mZWVUb2tlbj86IEFkZHJlc3M7XG4gIHByaXZhdGUgX25vbmNlPzogbnVtYmVyO1xuICBwcml2YXRlIF9nYXM/OiBiaWdpbnQ7XG4gIHByaXZhdGUgX21heEZlZVBlckdhcz86IGJpZ2ludDtcbiAgcHJpdmF0ZSBfbWF4UHJpb3JpdHlGZWVQZXJHYXM/OiBiaWdpbnQ7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudCB0aGUgdHJhbnNmZXIgbWV0aG9kIGZyb20gYWJzdHJhY3QgY2xhc3NcbiAgICogTm90ZTogRm9yIFRJUC0yMCB0cmFuc2FjdGlvbnMsIHVzZSBhZGRPcGVyYXRpb24oKSBpbnN0ZWFkXG4gICAqL1xuICB0cmFuc2ZlcihkYXRhPzogc3RyaW5nLCBpc0ZpcnN0U2lnbmVyPzogYm9vbGVhbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgY29uc3QgdHJhbnNmZXJCdWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcih1bmRlZmluZWQsIGlzRmlyc3RTaWduZXIpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIuZGF0YShkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNmZXIgPSB0cmFuc2ZlckJ1aWxkZXI7XG4gICAgcmV0dXJuIHRyYW5zZmVyQnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgdHJhbnNhY3Rpb24gaGFzIGFsbCByZXF1aXJlZCBmaWVsZHMgZm9yIFRlbXBvIEFBIHRyYW5zYWN0aW9ucy5cbiAgICogT3ZlcnJpZGVzIHBhcmVudCBjbGFzcyB2YWxpZGF0aW9uIHNpbmNlIEFBIHRyYW5zYWN0aW9ucyB1c2UgYSBkaWZmZXJlbnQgbW9kZWxcbiAgICogKG9wZXJhdGlvbnMtYmFzZWQgcmF0aGVyIHRoYW4gc2luZ2xlIGNvbnRyYWN0IGFkZHJlc3MpLlxuICAgKlxuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgb3BlcmF0aW9uIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbm9uY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTm9uY2UgaXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9nYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignR2FzIGxpbWl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWF4RmVlUGVyR2FzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ21heEZlZVBlckdhcyBpcyByZXF1aXJlZCB0byBidWlsZCBhIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21heFByaW9yaXR5RmVlUGVyR2FzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ21heFByaW9yaXR5RmVlUGVyR2FzIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHRyYW5zYWN0aW9uIGZyb20gY29uZmlndXJlZCBUSVAtMjAgb3BlcmF0aW9ucyBhbmQgdHJhbnNhY3Rpb24gcGFyYW1ldGVycy5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fbm9uY2UgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZ2FzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX21heEZlZVBlckdhcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9tYXhQcmlvcml0eUZlZVBlckdhcyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogbWlzc2luZyByZXF1aXJlZCBmaWVsZHMnKTtcbiAgICB9XG5cbiAgICB0aGlzLmZlZSh7XG4gICAgICBmZWU6IHRoaXMuX21heEZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgZ2FzTGltaXQ6IHRoaXMuX2dhcy50b1N0cmluZygpLFxuICAgICAgZWlwMTU1OToge1xuICAgICAgICBtYXhGZWVQZXJHYXM6IHRoaXMuX21heEZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdGhpcy5fbWF4UHJpb3JpdHlGZWVQZXJHYXMudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjYWxscyA9IHRoaXMub3BlcmF0aW9ucy5tYXAoKG9wKSA9PiB0aGlzLm9wZXJhdGlvblRvQ2FsbChvcCkpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUaXAyMFRyYW5zYWN0aW9uUmVxdWVzdCA9IHtcbiAgICAgIHR5cGU6IEFBX1RSQU5TQUNUSU9OX1RZUEUsXG4gICAgICBjaGFpbklkOiB0aGlzLl9jb21tb24uY2hhaW5JZEJOKCkudG9OdW1iZXIoKSxcbiAgICAgIG5vbmNlOiB0aGlzLl9ub25jZSxcbiAgICAgIG1heEZlZVBlckdhczogdGhpcy5fbWF4RmVlUGVyR2FzLFxuICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRoaXMuX21heFByaW9yaXR5RmVlUGVyR2FzLFxuICAgICAgZ2FzOiB0aGlzLl9nYXMsXG4gICAgICBjYWxscyxcbiAgICAgIGFjY2Vzc0xpc3Q6IFtdLFxuICAgICAgZmVlVG9rZW46IHRoaXMuX2ZlZVRva2VuLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFRpcDIwVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHhSZXF1ZXN0LCB0aGlzLm9wZXJhdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBvcGVyYXRpb24gdG8gdGhlIHRyYW5zYWN0aW9uXG4gICAqIENhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gY3JlYXRlIGJhdGNoIHRyYW5zYWN0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gVElQLTIwIG9wZXJhdGlvbiB3aXRoIHRva2VuLCByZWNpcGllbnQsIGFtb3VudCwgYW5kIG9wdGlvbmFsIG1lbW9cbiAgICogQHJldHVybnMgdGhpcyBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkT3BlcmF0aW9uKG9wZXJhdGlvbjogVGlwMjBPcGVyYXRpb24pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgdGhpcy5vcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgd2hpY2ggVElQLTIwIHRva2VuIHdpbGwgYmUgdXNlZCB0byBwYXkgdHJhbnNhY3Rpb24gZmVlc1xuICAgKiBUaGlzIGlzIGEgZ2xvYmFsIHNldHRpbmcgZm9yIHRoZSBlbnRpcmUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHRva2VuQWRkcmVzcyAtIEFkZHJlc3Mgb2YgdGhlIFRJUC0yMCB0b2tlbiB0byB1c2UgZm9yIGZlZXNcbiAgICogQHJldHVybnMgdGhpcyBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgZmVlVG9rZW4odG9rZW5BZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKHRva2VuQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgZmVlIHRva2VuIGFkZHJlc3M6ICR7dG9rZW5BZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9mZWVUb2tlbiA9IHRva2VuQWRkcmVzcyBhcyBBZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gbm9uY2VcbiAgICpcbiAgICogQHBhcmFtIG5vbmNlIC0gVHJhbnNhY3Rpb24gbm9uY2VcbiAgICogQHJldHVybnMgdGhpcyBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgbm9uY2Uobm9uY2U6IG51bWJlcik6IHRoaXMge1xuICAgIGlmIChub25jZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgbm9uY2U6ICR7bm9uY2V9YCk7XG4gICAgfVxuICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBnYXMgbGltaXQgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ2FzIC0gR2FzIGxpbWl0XG4gICAqIEByZXR1cm5zIHRoaXMgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGdhcyhnYXM6IHN0cmluZyB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IGdhc1ZhbHVlID0gdHlwZW9mIGdhcyA9PT0gJ3N0cmluZycgPyBCaWdJbnQoZ2FzKSA6IGdhcztcbiAgICBpZiAoZ2FzVmFsdWUgPD0gMG4pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgZ2FzIGxpbWl0OiAke2dhc31gKTtcbiAgICB9XG4gICAgdGhpcy5fZ2FzID0gZ2FzVmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtYXhpbXVtIGZlZSBwZXIgZ2FzIChFSVAtMTU1OSlcbiAgICpcbiAgICogQHBhcmFtIG1heEZlZVBlckdhcyAtIE1heGltdW0gZmVlIHBlciBnYXMgaW4gd2VpXG4gICAqIEByZXR1cm5zIHRoaXMgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIG1heEZlZVBlckdhcyhtYXhGZWVQZXJHYXM6IHN0cmluZyB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IGZlZVZhbHVlID0gdHlwZW9mIG1heEZlZVBlckdhcyA9PT0gJ3N0cmluZycgPyBCaWdJbnQobWF4RmVlUGVyR2FzKSA6IG1heEZlZVBlckdhcztcbiAgICBpZiAoZmVlVmFsdWUgPCAwbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBtYXhGZWVQZXJHYXM6ICR7bWF4RmVlUGVyR2FzfWApO1xuICAgIH1cbiAgICB0aGlzLl9tYXhGZWVQZXJHYXMgPSBmZWVWYWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1heGltdW0gcHJpb3JpdHkgZmVlIHBlciBnYXMgKEVJUC0xNTU5KVxuICAgKlxuICAgKiBAcGFyYW0gbWF4UHJpb3JpdHlGZWVQZXJHYXMgLSBNYXhpbXVtIHByaW9yaXR5IGZlZSBwZXIgZ2FzIGluIHdlaVxuICAgKiBAcmV0dXJucyB0aGlzIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gICAqL1xuICBtYXhQcmlvcml0eUZlZVBlckdhcyhtYXhQcmlvcml0eUZlZVBlckdhczogc3RyaW5nIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgZmVlVmFsdWUgPSB0eXBlb2YgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPT09ICdzdHJpbmcnID8gQmlnSW50KG1heFByaW9yaXR5RmVlUGVyR2FzKSA6IG1heFByaW9yaXR5RmVlUGVyR2FzO1xuICAgIGlmIChmZWVWYWx1ZSA8IDBuKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIG1heFByaW9yaXR5RmVlUGVyR2FzOiAke21heFByaW9yaXR5RmVlUGVyR2FzfWApO1xuICAgIH1cbiAgICB0aGlzLl9tYXhQcmlvcml0eUZlZVBlckdhcyA9IGZlZVZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgb3BlcmF0aW9ucyBpbiB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIFRJUC0yMCBvcGVyYXRpb25zXG4gICAqL1xuICBnZXRPcGVyYXRpb25zKCk6IFRpcDIwT3BlcmF0aW9uW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5vcGVyYXRpb25zXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZlZSB0b2tlbiBhZGRyZXNzIGlmIHNldFxuICAgKiBAcmV0dXJucyBGZWUgdG9rZW4gYWRkcmVzcyBvciB1bmRlZmluZWRcbiAgICovXG4gIGdldEZlZVRva2VuKCk6IEFkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mZWVUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIHNpbmdsZSBvcGVyYXRpb25cbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIE9wZXJhdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlT3BlcmF0aW9uKG9wZXJhdGlvbjogVGlwMjBPcGVyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKG9wZXJhdGlvbi50b2tlbikpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdG9rZW4gYWRkcmVzczogJHtvcGVyYXRpb24udG9rZW59YCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhvcGVyYXRpb24udG8pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHJlY2lwaWVudCBhZGRyZXNzOiAke29wZXJhdGlvbi50b31gKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWRUaXAyMEFtb3VudChvcGVyYXRpb24uYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBhbW91bnQ6ICR7b3BlcmF0aW9uLmFtb3VudH1gKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vIGJ5dGUgbGVuZ3RoIChoYW5kbGVzIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVycylcbiAgICBpZiAob3BlcmF0aW9uLm1lbW8pIHtcbiAgICAgIGNvbnN0IG1lbW9CeXRlTGVuZ3RoID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG9wZXJhdGlvbi5tZW1vKS5sZW5ndGg7XG4gICAgICBpZiAobWVtb0J5dGVMZW5ndGggPiAzMikge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBNZW1vIHRvbyBsb25nOiAke21lbW9CeXRlTGVuZ3RofSBieXRlcy4gTWF4aW11bSAzMiBieXRlcy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIFRJUC0yMCBvcGVyYXRpb24gdG8gYW4gQUEgY2FsbFxuICAgKi9cbiAgcHJpdmF0ZSBvcGVyYXRpb25Ub0NhbGwob3A6IFRpcDIwT3BlcmF0aW9uKTogeyB0bzogQWRkcmVzczsgZGF0YTogSGV4OyB2YWx1ZTogYmlnaW50IH0ge1xuICAgIGNvbnN0IGFtb3VudEluVW5pdHMgPSBhbW91bnRUb1RpcDIwVW5pdHMob3AuYW1vdW50KTtcbiAgICBjb25zdCBkYXRhID0gZW5jb2RlVGlwMjBUcmFuc2ZlcldpdGhNZW1vKG9wLnRvLCBhbW91bnRJblVuaXRzLCBvcC5tZW1vKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0bzogb3AudG9rZW4sXG4gICAgICBkYXRhLFxuICAgICAgdmFsdWU6IDBuLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCxzREFJNkI7QUFDN0IsOENBS3lCO0FBRXpCLG1DQUFnQztBQUVoQywrQ0FBMEU7QUFDMUUsbUNBUWlCO0FBQ2pCLHlDQUEwRDtBQUMxRCwyQ0FBa0Q7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxpQ0FBMEI7SUFTckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFUYixlQUFVLEdBQXFCLEVBQUUsQ0FBQztJQVUxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLElBQWEsRUFBRSxhQUF1QjtRQUM3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLDhCQUFlLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztRQUNqQyxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksZ0NBQXFCLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFB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QUNaLElBQUk7WUFDSixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2WEQsMERBdVhDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUSVAtMjAgVHJhbnNhY3Rpb24gQnVpbGRlclxuICpcbiAqIFVuaWZpZWQgYnVpbGRlciBmb3IgVElQLTIwIHRyYW5zYWN0aW9ucyBzdXBwb3J0aW5nOlxuICogLSBTaW5nbGUgb3IgYmF0Y2ggb3BlcmF0aW9uc1xuICogLSBQZXItb3BlcmF0aW9uIG1lbW9zIGZvciB0cmFja2luZ1xuICogLSBDdXN0b20gZmVlIHRva2VuIHNlbGVjdGlvblxuICogLSBFSVAtNzcwMiBBY2NvdW50IEFic3RyYWN0aW9uICh0eXBlIDB4NzYpXG4gKi9cblxuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb24gYXMgRXRoVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uQnVpbGRlciBhcyBBYnN0cmFjdFRyYW5zYWN0aW9uQnVpbGRlcixcbiAgVHJhbnNmZXJCdWlsZGVyLFxufSBmcm9tICdAYml0Z28vYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7XG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBBZGRyZXNzLCBIZXgsIFRpcDIwT3BlcmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uLCBUaXAyMFRyYW5zYWN0aW9uUmVxdWVzdCB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgYW1vdW50VG9UaXAyMFVuaXRzLFxuICBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8sXG4gIGlzVGlwMjBUcmFuc2FjdGlvbixcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRNZW1vSWQsXG4gIGlzVmFsaWRUaXAyMEFtb3VudCxcbiAgdGlwMjBVbml0c1RvQW1vdW50LFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRJUDIwX1RSQU5TRkVSX1dJVEhfTUVNT19BQkkgfSBmcm9tICcuL3RpcDIwQWJpJztcbmltcG9ydCB7IEFBX1RSQU5TQUNUSU9OX1RZUEUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gQnVpbGRlciBmb3IgVElQLTIwIHRva2VucyBvbiBUZW1wbyBibG9ja2NoYWluXG4gKiBFeHRlbmRzIGFic3RyYWN0LWV0aCBUcmFuc2FjdGlvbkJ1aWxkZXIgd2l0aCBUZW1wby1zcGVjaWZpYyBmZWF0dXJlc1xuICovXG5leHBvcnQgY2xhc3MgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBBYnN0cmFjdFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgb3BlcmF0aW9uczogVGlwMjBPcGVyYXRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9mZWVUb2tlbj86IEFkZHJlc3M7XG4gIHByaXZhdGUgX25vbmNlPzogbnVtYmVyO1xuICBwcml2YXRlIF9nYXM/OiBiaWdpbnQ7XG4gIHByaXZhdGUgX21heEZlZVBlckdhcz86IGJpZ2ludDtcbiAgcHJpdmF0ZSBfbWF4UHJpb3JpdHlGZWVQZXJHYXM/OiBiaWdpbnQ7XG4gIHByaXZhdGUgX3Jlc3RvcmVkU2lnbmF0dXJlPzogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH07XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudCB0aGUgdHJhbnNmZXIgbWV0aG9kIGZyb20gYWJzdHJhY3QgY2xhc3NcbiAgICogTm90ZTogRm9yIFRJUC0yMCB0cmFuc2FjdGlvbnMsIHVzZSBhZGRPcGVyYXRpb24oKSBpbnN0ZWFkXG4gICAqL1xuICB0cmFuc2ZlcihkYXRhPzogc3RyaW5nLCBpc0ZpcnN0U2lnbmVyPzogYm9vbGVhbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgY29uc3QgdHJhbnNmZXJCdWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcih1bmRlZmluZWQsIGlzRmlyc3RTaWduZXIpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXIuZGF0YShkYXRhKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNmZXIgPSB0cmFuc2ZlckJ1aWxkZXI7XG4gICAgcmV0dXJuIHRyYW5zZmVyQnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgdHJhbnNhY3Rpb24gaGFzIGFsbCByZXF1aXJlZCBmaWVsZHMgZm9yIFRlbXBvIEFBIHRyYW5zYWN0aW9ucy5cbiAgICogT3ZlcnJpZGVzIHBhcmVudCBjbGFzcyB2YWxpZGF0aW9uIHNpbmNlIEFBIHRyYW5zYWN0aW9ucyB1c2UgYSBkaWZmZXJlbnQgbW9kZWxcbiAgICogKG9wZXJhdGlvbnMtYmFzZWQgcmF0aGVyIHRoYW4gc2luZ2xlIGNvbnRyYWN0IGFkZHJlc3MpLlxuICAgKlxuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgb3BlcmF0aW9uIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbm9uY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTm9uY2UgaXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9nYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignR2FzIGxpbWl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWF4RmVlUGVyR2FzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ21heEZlZVBlckdhcyBpcyByZXF1aXJlZCB0byBidWlsZCBhIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21heFByaW9yaXR5RmVlUGVyR2FzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ21heFByaW9yaXR5RmVlUGVyR2FzIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycgJiYgaXNUaXAyMFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXRoZXJzLnV0aWxzLlJMUC5kZWNvZGUoJzB4JyArIHJhd1RyYW5zYWN0aW9uLnNsaWNlKDQpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gUkxQIGRlY29kZSBUSVAtMjAgdHJhbnNhY3Rpb246ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nLCBpc0ZpcnN0U2lnbmVyPzogYm9vbGVhbik6IEV0aFRyYW5zYWN0aW9uIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBpZiAoaXNUaXAyMFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZnJvbVRpcDIwVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pIGFzIHVua25vd24gYXMgRXRoVHJhbnNhY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24sIGlzRmlyc3RTaWduZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGEgdHlwZSAweDc2IHRyYW5zYWN0aW9uIGFuZCByZXN0b3JlIGJ1aWxkZXIgc3RhdGUuXG4gICAqIFJMUCBmaWVsZCBsYXlvdXQgbWlycm9ycyBidWlsZEJhc2VSbHBEYXRhKCkgaW4gdHJhbnNhY3Rpb24udHMuXG4gICAqL1xuICBwcml2YXRlIGZyb21UaXAyMFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUaXAyMFRyYW5zYWN0aW9uIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmxwSGV4ID0gJzB4JyArIHJhd1RyYW5zYWN0aW9uLnNsaWNlKDQpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGV0aGVycy51dGlscy5STFAuZGVjb2RlKHJscEhleCkgYXMgYW55W107XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGVkKSB8fCBkZWNvZGVkLmxlbmd0aCA8IDEzKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgVElQLTIwIHRyYW5zYWN0aW9uOiB1bmV4cGVjdGVkIFJMUCBzdHJ1Y3R1cmUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VCaWdJbnQgPSAoaGV4OiBzdHJpbmcpOiBiaWdpbnQgPT4gKCFoZXggfHwgaGV4ID09PSAnMHgnID8gMG4gOiBCaWdJbnQoaGV4KSk7XG4gICAgICBjb25zdCBwYXJzZUhleEludCA9IChoZXg6IHN0cmluZyk6IG51bWJlciA9PiAoIWhleCB8fCBoZXggPT09ICcweCcgPyAwIDogcGFyc2VJbnQoaGV4LCAxNikpO1xuXG4gICAgICBjb25zdCBjaGFpbklkID0gcGFyc2VIZXhJbnQoZGVjb2RlZFswXSBhcyBzdHJpbmcpO1xuICAgICAgY29uc3QgbWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBwYXJzZUJpZ0ludChkZWNvZGVkWzFdIGFzIHN0cmluZyk7XG4gICAgICBjb25zdCBtYXhGZWVQZXJHYXMgPSBwYXJzZUJpZ0ludChkZWNvZGVkWzJdIGFzIHN0cmluZyk7XG4gICAgICBjb25zdCBnYXMgPSBwYXJzZUJpZ0ludChkZWNvZGVkWzNdIGFzIHN0cmluZyk7XG4gICAgICBjb25zdCBjYWxsc1R1cGxlcyA9IGRlY29kZWRbNF0gYXMgc3RyaW5nW11bXTtcbiAgICAgIGNvbnN0IG5vbmNlID0gcGFyc2VIZXhJbnQoZGVjb2RlZFs3XSBhcyBzdHJpbmcpO1xuICAgICAgY29uc3QgZmVlVG9rZW5SYXcgPSBkZWNvZGVkWzEwXSBhcyBzdHJpbmc7XG5cbiAgICAgIGNvbnN0IGNhbGxzOiB7IHRvOiBBZGRyZXNzOyBkYXRhOiBIZXg7IHZhbHVlOiBiaWdpbnQgfVtdID0gY2FsbHNUdXBsZXMubWFwKCh0dXBsZSkgPT4gKHtcbiAgICAgICAgdG86IHR1cGxlWzBdIGFzIEFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiBwYXJzZUJpZ0ludCh0dXBsZVsxXSBhcyBzdHJpbmcpLFxuICAgICAgICBkYXRhOiB0dXBsZVsyXSBhcyBIZXgsXG4gICAgICB9KSk7XG5cbiAgICAgIGNvbnN0IG9wZXJhdGlvbnM6IFRpcDIwT3BlcmF0aW9uW10gPSBjYWxscy5tYXAoKGNhbGwpID0+IHRoaXMuZGVjb2RlQ2FsbFRvT3BlcmF0aW9uKGNhbGwpKTtcblxuICAgICAgbGV0IHNpZ25hdHVyZTogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGVjb2RlZC5sZW5ndGggPj0gMTQgJiYgZGVjb2RlZFsxM10gJiYgKGRlY29kZWRbMTNdIGFzIHN0cmluZykubGVuZ3RoID4gMikge1xuICAgICAgICBjb25zdCBzaWdCeXRlcyA9IGV0aGVycy51dGlscy5hcnJheWlmeShkZWNvZGVkWzEzXSBhcyBzdHJpbmcpO1xuICAgICAgICBpZiAoc2lnQnl0ZXMubGVuZ3RoID09PSA2NSkge1xuICAgICAgICAgIGNvbnN0IHIgPSBldGhlcnMudXRpbHMuaGV4bGlmeShzaWdCeXRlcy5zbGljZSgwLCAzMikpIGFzIEhleDtcbiAgICAgICAgICBjb25zdCBzID0gZXRoZXJzLnV0aWxzLmhleGxpZnkoc2lnQnl0ZXMuc2xpY2UoMzIsIDY0KSkgYXMgSGV4O1xuICAgICAgICAgIGNvbnN0IHYgPSBzaWdCeXRlc1s2NF07XG4gICAgICAgICAgY29uc3QgeVBhcml0eSA9IHYgPiAxID8gdiAtIDI3IDogdjtcbiAgICAgICAgICBzaWduYXR1cmUgPSB7IHIsIHMsIHlQYXJpdHkgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmZWVUb2tlbiA9IGZlZVRva2VuUmF3ICYmIGZlZVRva2VuUmF3ICE9PSAnMHgnID8gKGZlZVRva2VuUmF3IGFzIEFkZHJlc3MpIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCB0eFJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0ID0ge1xuICAgICAgICB0eXBlOiBBQV9UUkFOU0FDVElPTl9UWVBFLFxuICAgICAgICBjaGFpbklkLFxuICAgICAgICBub25jZSxcbiAgICAgICAgbWF4RmVlUGVyR2FzLFxuICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhcyxcbiAgICAgICAgZ2FzLFxuICAgICAgICBjYWxscyxcbiAgICAgICAgYWNjZXNzTGlzdDogW10sXG4gICAgICAgIGZlZVRva2VuLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fbm9uY2UgPSBub25jZTtcbiAgICAgIHRoaXMuX2dhcyA9IGdhcztcbiAgICAgIHRoaXMuX21heEZlZVBlckdhcyA9IG1heEZlZVBlckdhcztcbiAgICAgIHRoaXMuX21heFByaW9yaXR5RmVlUGVyR2FzID0gbWF4UHJpb3JpdHlGZWVQZXJHYXM7XG4gICAgICB0aGlzLl9mZWVUb2tlbiA9IGZlZVRva2VuO1xuICAgICAgdGhpcy5vcGVyYXRpb25zID0gb3BlcmF0aW9ucztcbiAgICAgIHRoaXMuX3Jlc3RvcmVkU2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXG4gICAgICBjb25zdCB0eCA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHR4UmVxdWVzdCwgb3BlcmF0aW9ucyk7XG4gICAgICBpZiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHR4LnNldFNpZ25hdHVyZShzaWduYXR1cmUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR4O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgUGFyc2VUcmFuc2FjdGlvbkVycm9yKSB0aHJvdyBlO1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgRmFpbGVkIHRvIGRlc2VyaWFsaXplIFRJUC0yMCB0cmFuc2FjdGlvbjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgYSBzaW5nbGUgQUEgY2FsbCdzIGRhdGEgYmFjayBpbnRvIGEgVGlwMjBPcGVyYXRpb24uXG4gICAqIEV4cGVjdHMgdGhlIGNhbGwgZGF0YSB0byBlbmNvZGUgdHJhbnNmZXJXaXRoTWVtbyhhZGRyZXNzLCB1aW50MjU2LCBieXRlczMyKS5cbiAgICovXG4gIHByaXZhdGUgZGVjb2RlQ2FsbFRvT3BlcmF0aW9uKGNhbGw6IHsgdG86IEFkZHJlc3M7IGRhdGE6IEhleDsgdmFsdWU6IGJpZ2ludCB9KTogVGlwMjBPcGVyYXRpb24ge1xuICAgIGNvbnN0IGlmYWNlID0gbmV3IGV0aGVycy51dGlscy5JbnRlcmZhY2UoVElQMjBfVFJBTlNGRVJfV0lUSF9NRU1PX0FCSSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBpZmFjZS5kZWNvZGVGdW5jdGlvbkRhdGEoJ3RyYW5zZmVyV2l0aE1lbW8nLCBjYWxsLmRhdGEpO1xuICAgICAgY29uc3QgdG9BZGRyZXNzID0gZGVjb2RlZFswXSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBhbW91bnRVbml0cyA9IEJpZ0ludChkZWNvZGVkWzFdLnRvU3RyaW5nKCkpO1xuICAgICAgY29uc3QgbWVtb0J5dGVzMzIgPSBkZWNvZGVkWzJdIGFzIHN0cmluZztcblxuICAgICAgY29uc3QgYW1vdW50ID0gdGlwMjBVbml0c1RvQW1vdW50KGFtb3VudFVuaXRzKTtcblxuICAgICAgY29uc3Qgc3RyaXBwZWQgPSBldGhlcnMudXRpbHMuc3RyaXBaZXJvcyhtZW1vQnl0ZXMzMik7XG4gICAgICBjb25zdCBtZW1vID0gc3RyaXBwZWQubGVuZ3RoID4gMCA/IGV0aGVycy51dGlscy50b1V0ZjhTdHJpbmcoc3RyaXBwZWQpIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4geyB0b2tlbjogY2FsbC50bywgdG86IHRvQWRkcmVzcywgYW1vdW50LCBtZW1vIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyB0b2tlbjogY2FsbC50bywgdG86IGNhbGwudG8sIGFtb3VudDogdGlwMjBVbml0c1RvQW1vdW50KGNhbGwudmFsdWUpIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSB0cmFuc2FjdGlvbiBmcm9tIGNvbmZpZ3VyZWQgVElQLTIwIG9wZXJhdGlvbnMgYW5kIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnMuXG4gICAqIFNpZ25zIHdpdGggX3NvdXJjZUtleVBhaXIgaWYgaXQgaGFzIGJlZW4gc2V0IHZpYSBzaWduKHsga2V5IH0pLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl9ub25jZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9nYXMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fbWF4RmVlUGVyR2FzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX21heFByaW9yaXR5RmVlUGVyR2FzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkcycpO1xuICAgIH1cblxuICAgIHRoaXMuZmVlKHtcbiAgICAgIGZlZTogdGhpcy5fbWF4RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICBnYXNMaW1pdDogdGhpcy5fZ2FzLnRvU3RyaW5nKCksXG4gICAgICBlaXAxNTU5OiB7XG4gICAgICAgIG1heEZlZVBlckdhczogdGhpcy5fbWF4RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiB0aGlzLl9tYXhQcmlvcml0eUZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhbGxzID0gdGhpcy5vcGVyYXRpb25zLm1hcCgob3ApID0+IHRoaXMub3BlcmF0aW9uVG9DYWxsKG9wKSk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0ID0ge1xuICAgICAgdHlwZTogQUFfVFJBTlNBQ1RJT05fVFlQRSxcbiAgICAgIGNoYWluSWQ6IHRoaXMuX2NvbW1vbi5jaGFpbklkQk4oKS50b051bWJlcigpLFxuICAgICAgbm9uY2U6IHRoaXMuX25vbmNlLFxuICAgICAgbWF4RmVlUGVyR2FzOiB0aGlzLl9tYXhGZWVQZXJHYXMsXG4gICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogdGhpcy5fbWF4UHJpb3JpdHlGZWVQZXJHYXMsXG4gICAgICBnYXM6IHRoaXMuX2dhcyxcbiAgICAgIGNhbGxzLFxuICAgICAgYWNjZXNzTGlzdDogW10sXG4gICAgICBmZWVUb2tlbjogdGhpcy5fZmVlVG9rZW4sXG4gICAgfTtcblxuICAgIGNvbnN0IHR4ID0gbmV3IFRpcDIwVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHhSZXF1ZXN0LCB0aGlzLm9wZXJhdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuX3NvdXJjZUtleVBhaXIgJiYgdGhpcy5fc291cmNlS2V5UGFpci5nZXRLZXlzKCkucHJ2KSB7XG4gICAgICBjb25zdCBwcnYgPSB0aGlzLl9zb3VyY2VLZXlQYWlyLmdldEtleXMoKS5wcnYhO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcbiAgICAgIGNvbnN0IG1zZ0hhc2ggPSBldGhlcnMudXRpbHMua2VjY2FrMjU2KGV0aGVycy51dGlscy5hcnJheWlmeSh1bnNpZ25lZEhleCkpO1xuICAgICAgY29uc3Qgc2lnbmluZ0tleSA9IG5ldyBldGhlcnMudXRpbHMuU2lnbmluZ0tleSgnMHgnICsgcHJ2KTtcbiAgICAgIGNvbnN0IHNpZyA9IHNpZ25pbmdLZXkuc2lnbkRpZ2VzdChldGhlcnMudXRpbHMuYXJyYXlpZnkobXNnSGFzaCkpO1xuICAgICAgdHguc2V0U2lnbmF0dXJlKHtcbiAgICAgICAgcjogc2lnLnIgYXMgSGV4LFxuICAgICAgICBzOiBzaWcucyBhcyBIZXgsXG4gICAgICAgIHlQYXJpdHk6IHNpZy5yZWNvdmVyeVBhcmFtID8/IDAsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Jlc3RvcmVkU2lnbmF0dXJlKSB7XG4gICAgICB0eC5zZXRTaWduYXR1cmUodGhpcy5fcmVzdG9yZWRTaWduYXR1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgb3BlcmF0aW9uIHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGNyZWF0ZSBiYXRjaCB0cmFuc2FjdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIFRJUC0yMCBvcGVyYXRpb24gd2l0aCB0b2tlbiwgcmVjaXBpZW50LCBhbW91bnQsIGFuZCBvcHRpb25hbCBtZW1vXG4gICAqIEByZXR1cm5zIHRoaXMgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZE9wZXJhdGlvbihvcGVyYXRpb246IFRpcDIwT3BlcmF0aW9uKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZU9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgIHRoaXMub3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHdoaWNoIFRJUC0yMCB0b2tlbiB3aWxsIGJlIHVzZWQgdG8gcGF5IHRyYW5zYWN0aW9uIGZlZXNcbiAgICogVGhpcyBpcyBhIGdsb2JhbCBzZXR0aW5nIGZvciB0aGUgZW50aXJlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbkFkZHJlc3MgLSBBZGRyZXNzIG9mIHRoZSBUSVAtMjAgdG9rZW4gdG8gdXNlIGZvciBmZWVzXG4gICAqIEByZXR1cm5zIHRoaXMgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGZlZVRva2VuKHRva2VuQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyh0b2tlbkFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIGZlZSB0b2tlbiBhZGRyZXNzOiAke3Rva2VuQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy5fZmVlVG9rZW4gPSB0b2tlbkFkZHJlc3MgYXMgQWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIG5vbmNlXG4gICAqXG4gICAqIEBwYXJhbSBub25jZSAtIFRyYW5zYWN0aW9uIG5vbmNlXG4gICAqIEByZXR1cm5zIHRoaXMgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIG5vbmNlKG5vbmNlOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAobm9uY2UgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIG5vbmNlOiAke25vbmNlfWApO1xuICAgIH1cbiAgICB0aGlzLl9ub25jZSA9IG5vbmNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZ2FzIGxpbWl0IGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIGdhcyAtIEdhcyBsaW1pdFxuICAgKiBAcmV0dXJucyB0aGlzIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gICAqL1xuICBnYXMoZ2FzOiBzdHJpbmcgfCBiaWdpbnQpOiB0aGlzIHtcbiAgICBjb25zdCBnYXNWYWx1ZSA9IHR5cGVvZiBnYXMgPT09ICdzdHJpbmcnID8gQmlnSW50KGdhcykgOiBnYXM7XG4gICAgaWYgKGdhc1ZhbHVlIDw9IDBuKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIGdhcyBsaW1pdDogJHtnYXN9YCk7XG4gICAgfVxuICAgIHRoaXMuX2dhcyA9IGdhc1ZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbWF4aW11bSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpXG4gICAqXG4gICAqIEBwYXJhbSBtYXhGZWVQZXJHYXMgLSBNYXhpbXVtIGZlZSBwZXIgZ2FzIGluIHdlaVxuICAgKiBAcmV0dXJucyB0aGlzIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gICAqL1xuICBtYXhGZWVQZXJHYXMobWF4RmVlUGVyR2FzOiBzdHJpbmcgfCBiaWdpbnQpOiB0aGlzIHtcbiAgICBjb25zdCBmZWVWYWx1ZSA9IHR5cGVvZiBtYXhGZWVQZXJHYXMgPT09ICdzdHJpbmcnID8gQmlnSW50KG1heEZlZVBlckdhcykgOiBtYXhGZWVQZXJHYXM7XG4gICAgaWYgKGZlZVZhbHVlIDwgMG4pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgbWF4RmVlUGVyR2FzOiAke21heEZlZVBlckdhc31gKTtcbiAgICB9XG4gICAgdGhpcy5fbWF4RmVlUGVyR2FzID0gZmVlVmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtYXhpbXVtIHByaW9yaXR5IGZlZSBwZXIgZ2FzIChFSVAtMTU1OSlcbiAgICpcbiAgICogQHBhcmFtIG1heFByaW9yaXR5RmVlUGVyR2FzIC0gTWF4aW11bSBwcmlvcml0eSBmZWUgcGVyIGdhcyBpbiB3ZWlcbiAgICogQHJldHVybnMgdGhpcyBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgbWF4UHJpb3JpdHlGZWVQZXJHYXMobWF4UHJpb3JpdHlGZWVQZXJHYXM6IHN0cmluZyB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IGZlZVZhbHVlID0gdHlwZW9mIG1heFByaW9yaXR5RmVlUGVyR2FzID09PSAnc3RyaW5nJyA/IEJpZ0ludChtYXhQcmlvcml0eUZlZVBlckdhcykgOiBtYXhQcmlvcml0eUZlZVBlckdhcztcbiAgICBpZiAoZmVlVmFsdWUgPCAwbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBtYXhQcmlvcml0eUZlZVBlckdhczogJHttYXhQcmlvcml0eUZlZVBlckdhc31gKTtcbiAgICB9XG4gICAgdGhpcy5fbWF4UHJpb3JpdHlGZWVQZXJHYXMgPSBmZWVWYWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIG9wZXJhdGlvbnMgaW4gdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBUSVAtMjAgb3BlcmF0aW9uc1xuICAgKi9cbiAgZ2V0T3BlcmF0aW9ucygpOiBUaXAyME9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMub3BlcmF0aW9uc107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmZWUgdG9rZW4gYWRkcmVzcyBpZiBzZXRcbiAgICogQHJldHVybnMgRmVlIHRva2VuIGFkZHJlc3Mgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRGZWVUb2tlbigpOiBBZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmVlVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBzaW5nbGUgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBPcGVyYXRpb24gdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wZXJhdGlvbihvcGVyYXRpb246IFRpcDIwT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhvcGVyYXRpb24udG9rZW4pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRva2VuIGFkZHJlc3M6ICR7b3BlcmF0aW9uLnRva2VufWApO1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZEFkZHJlc3Mob3BlcmF0aW9uLnRvKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCByZWNpcGllbnQgYWRkcmVzczogJHtvcGVyYXRpb24udG99YCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkVGlwMjBBbW91bnQob3BlcmF0aW9uLmFtb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgYW1vdW50OiAke29wZXJhdGlvbi5hbW91bnR9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbi5tZW1vICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRNZW1vSWQob3BlcmF0aW9uLm1lbW8pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIG1lbW86IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgVElQLTIwIG9wZXJhdGlvbiB0byBhbiBBQSBjYWxsXG4gICAqL1xuICBwcml2YXRlIG9wZXJhdGlvblRvQ2FsbChvcDogVGlwMjBPcGVyYXRpb24pOiB7IHRvOiBBZGRyZXNzOyBkYXRhOiBIZXg7IHZhbHVlOiBiaWdpbnQgfSB7XG4gICAgY29uc3QgYW1vdW50SW5Vbml0cyA9IGFtb3VudFRvVGlwMjBVbml0cyhvcC5hbW91bnQpO1xuICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8ob3AudG8sIGFtb3VudEluVW5pdHMsIG9wLm1lbW8pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvOiBvcC50b2tlbixcbiAgICAgIGRhdGEsXG4gICAgICB2YWx1ZTogMG4sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -58,6 +58,14 @@ export declare function encodeTip20TransferWithMemo(to: Address, amount: bigint,
58
58
  * @returns true if valid, false otherwise
59
59
  */
60
60
  export declare function isValidTip20Amount(amount: string): boolean;
61
+ /**
62
+ * Check if a raw transaction string is a Tempo AA transaction (type 0x76)
63
+ */
64
+ export declare function isTip20Transaction(raw: string): boolean;
65
+ /**
66
+ * Validate that a memoId is a valid non-negative integer string
67
+ */
68
+ export declare function isValidMemoId(memoId: string): boolean;
61
69
  declare const utils: {
62
70
  isValidAddress: typeof isValidAddress;
63
71
  isValidPublicKey: typeof isValidPublicKey;
@@ -67,6 +75,8 @@ declare const utils: {
67
75
  stringToBytes32: typeof stringToBytes32;
68
76
  encodeTip20TransferWithMemo: typeof encodeTip20TransferWithMemo;
69
77
  isValidTip20Amount: typeof isValidTip20Amount;
78
+ isTip20Transaction: typeof isTip20Transaction;
79
+ isValidMemoId: typeof isValidMemoId;
70
80
  };
71
81
  export default utils;
72
82
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,KAAK,OAAO,GAAG,MAAM,CAAC;AACtB,KAAK,GAAG,GAAG,MAAM,CAAC;AAElB;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAU3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAU7D;AAED;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAOjD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAK3F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAc1D;AAED,QAAA,MAAM,KAAK;;;;;;;;;CASV,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,KAAK,OAAO,GAAG,MAAM,CAAC;AACtB,KAAK,GAAG,GAAG,MAAM,CAAC;AAElB;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAU3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAU7D;AAED;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAOjD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAK3F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAc1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;CAWV,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -13,10 +13,13 @@ exports.tip20UnitsToAmount = tip20UnitsToAmount;
13
13
  exports.stringToBytes32 = stringToBytes32;
14
14
  exports.encodeTip20TransferWithMemo = encodeTip20TransferWithMemo;
15
15
  exports.isValidTip20Amount = isValidTip20Amount;
16
+ exports.isTip20Transaction = isTip20Transaction;
17
+ exports.isValidMemoId = isValidMemoId;
16
18
  const secp256k1_1 = require("@bitgo/secp256k1");
17
19
  const ethers_1 = require("ethers");
18
20
  const constants_1 = require("./constants");
19
21
  const tip20Abi_1 = require("./tip20Abi");
22
+ const AA_TX_HEX_REGEX = new RegExp(`^${constants_1.AA_TRANSACTION_TYPE}[0-9a-f]*$`, 'i');
20
23
  /**
21
24
  * Check if address is valid Ethereum-style address
22
25
  * Uses ethers.js isAddress for proper validation including checksum
@@ -132,6 +135,18 @@ function isValidTip20Amount(amount) {
132
135
  return false;
133
136
  }
134
137
  }
138
+ /**
139
+ * Check if a raw transaction string is a Tempo AA transaction (type 0x76)
140
+ */
141
+ function isTip20Transaction(raw) {
142
+ return AA_TX_HEX_REGEX.test(raw);
143
+ }
144
+ /**
145
+ * Validate that a memoId is a valid non-negative integer string
146
+ */
147
+ function isValidMemoId(memoId) {
148
+ return typeof memoId === 'string' && /^(0|[1-9]\d*)$/.test(memoId);
149
+ }
135
150
  const utils = {
136
151
  isValidAddress,
137
152
  isValidPublicKey,
@@ -141,6 +156,8 @@ const utils = {
141
156
  stringToBytes32,
142
157
  encodeTip20TransferWithMemo,
143
158
  isValidTip20Amount,
159
+ isTip20Transaction,
160
+ isValidMemoId,
144
161
  };
145
162
  exports.default = utils;
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOztBQWNILHdDQUtDO0FBTUQsNENBVUM7QUFNRCw4Q0FVQztBQVlELGdEQU1DO0FBUUQsZ0RBRUM7QUFRRCwwQ0FPQztBQVNELGtFQUtDO0FBT0QsZ0RBY0M7QUEvSEQsZ0RBQXlDO0FBQ3pDLG1DQUFnQztBQUNoQywyQ0FBNkM7QUFDN0MseUNBQTBEO0FBSzFEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxlQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLGlCQUFLLENBQUMsVUFB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SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLDJCQUEyQjtJQUMzQixrQkFBa0I7Q0FDbkIsQ0FBQztBQUVGLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcG8gVXRpbGl0eSBGdW5jdGlvbnNcbiAqXG4gKiBTaW5jZSBUZW1wbyBpcyBFVk0tY29tcGF0aWJsZSwgd2UgY2FuIHJldXNlIEV0aGVyZXVtIHV0aWxpdGllc1xuICovXG5cbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgVElQMjBfREVDSU1BTFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUSVAyMF9UUkFOU0ZFUl9XSVRIX01FTU9fQUJJIH0gZnJvbSAnLi90aXAyMEFiaSc7XG5cbnR5cGUgQWRkcmVzcyA9IHN0cmluZztcbnR5cGUgSGV4ID0gc3RyaW5nO1xuXG4vKipcbiAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQgRXRoZXJldW0tc3R5bGUgYWRkcmVzc1xuICogVXNlcyBldGhlcnMuanMgaXNBZGRyZXNzIGZvciBwcm9wZXIgdmFsaWRhdGlvbiBpbmNsdWRpbmcgY2hlY2tzdW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBldGhlcnMudXRpbHMuaXNBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHB1YmxpYyBrZXkgaXMgdmFsaWQgKEJJUDMyIHhwdWIgZm9ybWF0KVxuICogVE9ETzogUmVwbGFjZSB3aXRoIEVUSCB1dGlscyB3aGVuIGltcGxlbWVudGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHB1YmxpY0tleSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KHB1YmxpY0tleSk7XG4gICAgcmV0dXJuIGhkTm9kZS5pc05ldXRlcmVkKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBwcml2YXRlIGtleSBpcyB2YWxpZCAoQklQMzIgeHBydiBmb3JtYXQpXG4gKiBUT0RPOiBSZXBsYWNlIHdpdGggRVRIIHV0aWxzIHdoZW4gaW1wbGVtZW50aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBwcml2YXRlS2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocHJpdmF0ZUtleSk7XG4gICAgcmV0dXJuICFoZE5vZGUuaXNOZXV0ZXJlZCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVElQLTIwIFV0aWxpdHkgRnVuY3Rpb25zXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0IGh1bWFuLXJlYWRhYmxlIGFtb3VudCB0byBUSVAtMjAgdW5pdHMgKDYgZGVjaW1hbHMpXG4gKiBAcGFyYW0gYW1vdW50IC0gSHVtYW4tcmVhZGFibGUgYW1vdW50IChlLmcuLCBcIjEuNVwiKVxuICogQHJldHVybnMgQW1vdW50IGluIFRJUC0yMCBzbWFsbGVzdCB1bml0cyBhcyBiaWdpbnRcbiAqIEBleGFtcGxlIGFtb3VudFRvVGlwMjBVbml0cyhcIjEuNVwiKSA9PiAxNTAwMDAwblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW1vdW50VG9UaXAyMFVuaXRzKGFtb3VudDogc3RyaW5nKTogYmlnaW50IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQmlnSW50KGV0aGVycy51dGlscy5wYXJzZVVuaXRzKGFtb3VudCwgVElQMjBfREVDSU1BTFMpLnRvU3RyaW5nKCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbW91bnQgZm9ybWF0OiAke2Ftb3VudH0uIEV4cGVjdGVkIGRlY2ltYWwgc3RyaW5nLmApO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBUSVAtMjAgdW5pdHMgKDYgZGVjaW1hbHMpIHRvIGh1bWFuLXJlYWRhYmxlIGFtb3VudFxuICogQHBhcmFtIHVuaXRzIC0gQW1vdW50IGluIFRJUC0yMCBzbWFsbGVzdCB1bml0c1xuICogQHJldHVybnMgSHVtYW4tcmVhZGFibGUgYW1vdW50IHN0cmluZ1xuICogQGV4YW1wbGUgdGlwMjBVbml0c1RvQW1vdW50KDE1MDAwMDBuKSA9PiBcIjEuNVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aXAyMFVuaXRzVG9BbW91bnQodW5pdHM6IGJpZ2ludCk6IHN0cmluZyB7XG4gIHJldHVybiBldGhlcnMudXRpbHMuZm9ybWF0VW5pdHModW5pdHMudG9TdHJpbmcoKSwgVElQMjBfREVDSU1BTFMpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIHRvIGJ5dGVzMzIgZm9yIG1lbW8gZmllbGRcbiAqIEBwYXJhbSBtZW1vIC0gTWVtbyBzdHJpbmcgdG8gZW5jb2RlXG4gKiBAcmV0dXJucyBIZXgtZW5jb2RlZCBieXRlczMyIHZhbHVlXG4gKiBAZXhhbXBsZSBzdHJpbmdUb0J5dGVzMzIoXCJJTlZPSUNFLTAwMVwiKSA9PiBcIjB4NDk0ZTU2NGY0OTQzNDUyZDMwMzAzMTAwLi4uXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMzMihtZW1vOiBzdHJpbmcpOiBIZXgge1xuICBjb25zdCBtZW1vQnl0ZUxlbmd0aCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZW1vKS5sZW5ndGg7XG4gIGlmIChtZW1vQnl0ZUxlbmd0aCA+IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNZW1vIHRvbyBsb25nOiAke21lbW9CeXRlTGVuZ3RofSBieXRlcy4gTWF4aW11bSAzMiBieXRlcy5gKTtcbiAgfVxuICBjb25zdCBoZXhTdHJpbmcgPSBldGhlcnMudXRpbHMuaGV4bGlmeShldGhlcnMudXRpbHMudG9VdGY4Qnl0ZXMobWVtbykpO1xuICByZXR1cm4gZXRoZXJzLnV0aWxzLmhleFplcm9QYWQoaGV4U3RyaW5nLCAzMik7XG59XG5cbi8qKlxuICogRW5jb2RlIFRJUC0yMCB0cmFuc2ZlcldpdGhNZW1vIGZ1bmN0aW9uIGNhbGwgdXNpbmcgZXRoZXJzLmpzXG4gKiBAcGFyYW0gdG8gLSBSZWNpcGllbnQgYWRkcmVzc1xuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCBpbiBUSVAtMjAgdW5pdHMgKGJpZ2ludClcbiAqIEBwYXJhbSBtZW1vIC0gT3B0aW9uYWwgbWVtbyBzdHJpbmdcbiAqIEByZXR1cm5zIEVuY29kZWQgZnVuY3Rpb24gY2FsbCBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8odG86IEFkZHJlc3MsIGFtb3VudDogYmlnaW50LCBtZW1vPzogc3RyaW5nKTogSGV4IHtcbiAgY29uc3QgbWVtb0J5dGVzID0gbWVtbyA/IHN0cmluZ1RvQnl0ZXMzMihtZW1vKSA6IGV0aGVycy51dGlscy5oZXhaZXJvUGFkKCcweCcsIDMyKTtcblxuICBjb25zdCBpZmFjZSA9IG5ldyBldGhlcnMudXRpbHMuSW50ZXJmYWNlKFRJUDIwX1RSQU5TRkVSX1dJVEhfTUVNT19BQkkpO1xuICByZXR1cm4gaWZhY2UuZW5jb2RlRnVuY3Rpb25EYXRhKCd0cmFuc2ZlcldpdGhNZW1vJywgW3RvLCBhbW91bnQsIG1lbW9CeXRlc10pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFRJUC0yMCBhbW91bnQgZm9ybWF0XG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHN0cmluZyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGlwMjBBbW91bnQoYW1vdW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBhbW91bnQgIT09ICdzdHJpbmcnIHx8IGFtb3VudC50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIGZvciBuZWdhdGl2ZSBhbW91bnRzIGJlZm9yZSBwYXJzaW5nXG4gIGlmIChhbW91bnQuc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gZXRoZXJzLnV0aWxzLnBhcnNlVW5pdHMoYW1vdW50LCBUSVAyMF9ERUNJTUFMUyk7XG4gICAgcmV0dXJuIHBhcnNlZC5ndGUoMCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IHtcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRQdWJsaWNLZXksXG4gIGlzVmFsaWRQcml2YXRlS2V5LFxuICBhbW91bnRUb1RpcDIwVW5pdHMsXG4gIHRpcDIwVW5pdHNUb0Ftb3VudCxcbiAgc3RyaW5nVG9CeXRlczMyLFxuICBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8sXG4gIGlzVmFsaWRUaXAyMEFtb3VudCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOztBQWdCSCx3Q0FLQztBQU1ELDRDQVVDO0FBTUQsOENBVUM7QUFZRCxnREFNQztBQVFELGdEQUVDO0FBUUQsMENBT0M7QUFTRCxrRUFLQztBQU9ELGdEQWNDO0FBS0QsZ0RBRUM7QUFLRCxzQ0FFQztBQS9JRCxnREFBeUM7QUFDekMsbUNBQWdDO0FBQ2hDLDJDQUFrRTtBQUNsRSx5Q0FBMEQ7QUFFMUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSwrQkFBbUIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBSzdFOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxlQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCxJQUFJLE9BQU8sVUFBVSxLQUFL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QUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLEdBQVc7SUFDNUMsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxNQUFjO0lBQzFDLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUc7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZiwyQkFBMkI7SUFDM0Isa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixhQUFhO0NBQ2QsQ0FBQztBQUVGLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcG8gVXRpbGl0eSBGdW5jdGlvbnNcbiAqXG4gKiBTaW5jZSBUZW1wbyBpcyBFVk0tY29tcGF0aWJsZSwgd2UgY2FuIHJldXNlIEV0aGVyZXVtIHV0aWxpdGllc1xuICovXG5cbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgQUFfVFJBTlNBQ1RJT05fVFlQRSwgVElQMjBfREVDSU1BTFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUSVAyMF9UUkFOU0ZFUl9XSVRIX01FTU9fQUJJIH0gZnJvbSAnLi90aXAyMEFiaSc7XG5cbmNvbnN0IEFBX1RYX0hFWF9SRUdFWCA9IG5ldyBSZWdFeHAoYF4ke0FBX1RSQU5TQUNUSU9OX1RZUEV9WzAtOWEtZl0qJGAsICdpJyk7XG5cbnR5cGUgQWRkcmVzcyA9IHN0cmluZztcbnR5cGUgSGV4ID0gc3RyaW5nO1xuXG4vKipcbiAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQgRXRoZXJldW0tc3R5bGUgYWRkcmVzc1xuICogVXNlcyBldGhlcnMuanMgaXNBZGRyZXNzIGZvciBwcm9wZXIgdmFsaWRhdGlvbiBpbmNsdWRpbmcgY2hlY2tzdW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBldGhlcnMudXRpbHMuaXNBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHB1YmxpYyBrZXkgaXMgdmFsaWQgKEJJUDMyIHhwdWIgZm9ybWF0KVxuICogVE9ETzogUmVwbGFjZSB3aXRoIEVUSCB1dGlscyB3aGVuIGltcGxlbWVudGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHB1YmxpY0tleSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KHB1YmxpY0tleSk7XG4gICAgcmV0dXJuIGhkTm9kZS5pc05ldXRlcmVkKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBwcml2YXRlIGtleSBpcyB2YWxpZCAoQklQMzIgeHBydiBmb3JtYXQpXG4gKiBUT0RPOiBSZXBsYWNlIHdpdGggRVRIIHV0aWxzIHdoZW4gaW1wbGVtZW50aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBwcml2YXRlS2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocHJpdmF0ZUtleSk7XG4gICAgcmV0dXJuICFoZE5vZGUuaXNOZXV0ZXJlZCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVElQLTIwIFV0aWxpdHkgRnVuY3Rpb25zXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0IGh1bWFuLXJlYWRhYmxlIGFtb3VudCB0byBUSVAtMjAgdW5pdHMgKDYgZGVjaW1hbHMpXG4gKiBAcGFyYW0gYW1vdW50IC0gSHVtYW4tcmVhZGFibGUgYW1vdW50IChlLmcuLCBcIjEuNVwiKVxuICogQHJldHVybnMgQW1vdW50IGluIFRJUC0yMCBzbWFsbGVzdCB1bml0cyBhcyBiaWdpbnRcbiAqIEBleGFtcGxlIGFtb3VudFRvVGlwMjBVbml0cyhcIjEuNVwiKSA9PiAxNTAwMDAwblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW1vdW50VG9UaXAyMFVuaXRzKGFtb3VudDogc3RyaW5nKTogYmlnaW50IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQmlnSW50KGV0aGVycy51dGlscy5wYXJzZVVuaXRzKGFtb3VudCwgVElQMjBfREVDSU1BTFMpLnRvU3RyaW5nKCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbW91bnQgZm9ybWF0OiAke2Ftb3VudH0uIEV4cGVjdGVkIGRlY2ltYWwgc3RyaW5nLmApO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBUSVAtMjAgdW5pdHMgKDYgZGVjaW1hbHMpIHRvIGh1bWFuLXJlYWRhYmxlIGFtb3VudFxuICogQHBhcmFtIHVuaXRzIC0gQW1vdW50IGluIFRJUC0yMCBzbWFsbGVzdCB1bml0c1xuICogQHJldHVybnMgSHVtYW4tcmVhZGFibGUgYW1vdW50IHN0cmluZ1xuICogQGV4YW1wbGUgdGlwMjBVbml0c1RvQW1vdW50KDE1MDAwMDBuKSA9PiBcIjEuNVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aXAyMFVuaXRzVG9BbW91bnQodW5pdHM6IGJpZ2ludCk6IHN0cmluZyB7XG4gIHJldHVybiBldGhlcnMudXRpbHMuZm9ybWF0VW5pdHModW5pdHMudG9TdHJpbmcoKSwgVElQMjBfREVDSU1BTFMpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIHRvIGJ5dGVzMzIgZm9yIG1lbW8gZmllbGRcbiAqIEBwYXJhbSBtZW1vIC0gTWVtbyBzdHJpbmcgdG8gZW5jb2RlXG4gKiBAcmV0dXJucyBIZXgtZW5jb2RlZCBieXRlczMyIHZhbHVlXG4gKiBAZXhhbXBsZSBzdHJpbmdUb0J5dGVzMzIoXCJJTlZPSUNFLTAwMVwiKSA9PiBcIjB4NDk0ZTU2NGY0OTQzNDUyZDMwMzAzMTAwLi4uXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMzMihtZW1vOiBzdHJpbmcpOiBIZXgge1xuICBjb25zdCBtZW1vQnl0ZUxlbmd0aCA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZW1vKS5sZW5ndGg7XG4gIGlmIChtZW1vQnl0ZUxlbmd0aCA+IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNZW1vIHRvbyBsb25nOiAke21lbW9CeXRlTGVuZ3RofSBieXRlcy4gTWF4aW11bSAzMiBieXRlcy5gKTtcbiAgfVxuICBjb25zdCBoZXhTdHJpbmcgPSBldGhlcnMudXRpbHMuaGV4bGlmeShldGhlcnMudXRpbHMudG9VdGY4Qnl0ZXMobWVtbykpO1xuICByZXR1cm4gZXRoZXJzLnV0aWxzLmhleFplcm9QYWQoaGV4U3RyaW5nLCAzMik7XG59XG5cbi8qKlxuICogRW5jb2RlIFRJUC0yMCB0cmFuc2ZlcldpdGhNZW1vIGZ1bmN0aW9uIGNhbGwgdXNpbmcgZXRoZXJzLmpzXG4gKiBAcGFyYW0gdG8gLSBSZWNpcGllbnQgYWRkcmVzc1xuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCBpbiBUSVAtMjAgdW5pdHMgKGJpZ2ludClcbiAqIEBwYXJhbSBtZW1vIC0gT3B0aW9uYWwgbWVtbyBzdHJpbmdcbiAqIEByZXR1cm5zIEVuY29kZWQgZnVuY3Rpb24gY2FsbCBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8odG86IEFkZHJlc3MsIGFtb3VudDogYmlnaW50LCBtZW1vPzogc3RyaW5nKTogSGV4IHtcbiAgY29uc3QgbWVtb0J5dGVzID0gbWVtbyA/IHN0cmluZ1RvQnl0ZXMzMihtZW1vKSA6IGV0aGVycy51dGlscy5oZXhaZXJvUGFkKCcweCcsIDMyKTtcblxuICBjb25zdCBpZmFjZSA9IG5ldyBldGhlcnMudXRpbHMuSW50ZXJmYWNlKFRJUDIwX1RSQU5TRkVSX1dJVEhfTUVNT19BQkkpO1xuICByZXR1cm4gaWZhY2UuZW5jb2RlRnVuY3Rpb25EYXRhKCd0cmFuc2ZlcldpdGhNZW1vJywgW3RvLCBhbW91bnQsIG1lbW9CeXRlc10pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFRJUC0yMCBhbW91bnQgZm9ybWF0XG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IHN0cmluZyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGlwMjBBbW91bnQoYW1vdW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBhbW91bnQgIT09ICdzdHJpbmcnIHx8IGFtb3VudC50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIGZvciBuZWdhdGl2ZSBhbW91bnRzIGJlZm9yZSBwYXJzaW5nXG4gIGlmIChhbW91bnQuc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gZXRoZXJzLnV0aWxzLnBhcnNlVW5pdHMoYW1vdW50LCBUSVAyMF9ERUNJTUFMUyk7XG4gICAgcmV0dXJuIHBhcnNlZC5ndGUoMCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcmF3IHRyYW5zYWN0aW9uIHN0cmluZyBpcyBhIFRlbXBvIEFBIHRyYW5zYWN0aW9uICh0eXBlIDB4NzYpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RpcDIwVHJhbnNhY3Rpb24ocmF3OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFBX1RYX0hFWF9SRUdFWC50ZXN0KHJhdyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBhIG1lbW9JZCBpcyBhIHZhbGlkIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE1lbW9JZChtZW1vSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lbW9JZCA9PT0gJ3N0cmluZycgJiYgL14oMHxbMS05XVxcZCopJC8udGVzdChtZW1vSWQpO1xufVxuXG5jb25zdCB1dGlscyA9IHtcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRQdWJsaWNLZXksXG4gIGlzVmFsaWRQcml2YXRlS2V5LFxuICBhbW91bnRUb1RpcDIwVW5pdHMsXG4gIHRpcDIwVW5pdHNUb0Ftb3VudCxcbiAgc3RyaW5nVG9CeXRlczMyLFxuICBlbmNvZGVUaXAyMFRyYW5zZmVyV2l0aE1lbW8sXG4gIGlzVmFsaWRUaXAyMEFtb3VudCxcbiAgaXNUaXAyMFRyYW5zYWN0aW9uLFxuICBpc1ZhbGlkTWVtb0lkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=