@bitgo/sdk-coin-xrp 4.0.0 → 4.0.3

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.
@@ -8,6 +8,8 @@ export declare class MPTokenTransferBuilder extends TransactionBuilder {
8
8
  private _value?;
9
9
  private _destination?;
10
10
  private _destinationTag?;
11
+ private _transferFee?;
12
+ private _restoredSendMax?;
11
13
  constructor(_coinConfig: Readonly<CoinConfig>);
12
14
  protected get transactionType(): TransactionType;
13
15
  protected get xrpTransactionType(): XrpTransactionType.Payment;
@@ -16,6 +18,14 @@ export declare class MPTokenTransferBuilder extends TransactionBuilder {
16
18
  * @param {string} address - the recipient XRP address, optionally with destination tag
17
19
  */
18
20
  to(address: string): this;
21
+ /**
22
+ * Set the per-issuance transfer fee so DeliverMax is computed correctly.
23
+ * Matches the MPTokenIssuance.TransferFee ledger field: an integer in [0, 50_000]
24
+ * representing a fraction of 100,000 (e.g. 100 = 0.1%).
25
+ * When non-zero, DeliverMax is set to Amount + ⌈Amount × fee / 100_000⌉.
26
+ * @param {number} fee - TransferFee value from the MPTokenIssuance ledger object
27
+ */
28
+ transferFee(fee: number): this;
19
29
  /**
20
30
  * Set the MPT issuance ID and raw integer amount to transfer.
21
31
  * The value is a raw integer string — AssetScale is display-only and never applied here.
@@ -1 +1 @@
1
- {"version":3,"file":"mptTransferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/mptTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAS;gBAErB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAAC,OAAO,CAG7D;IAED;;;OAGG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOzB;;;;;OAKG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYlD,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAYlC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CA8B5D"}
1
+ {"version":3,"file":"mptTransferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/mptTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAS;IAIjC,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B,OAAO,CAAC,gBAAgB,CAAC,CAAY;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAAC,OAAO,CAG7D;IAED;;;OAGG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOzB;;;;;;OAMG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ9B;;;;;OAKG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYlD,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAmBlC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CA8C5D"}
@@ -29,6 +29,20 @@ class MPTokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
29
29
  this._destinationTag = destinationTag;
30
30
  return this;
31
31
  }
32
+ /**
33
+ * Set the per-issuance transfer fee so DeliverMax is computed correctly.
34
+ * Matches the MPTokenIssuance.TransferFee ledger field: an integer in [0, 50_000]
35
+ * representing a fraction of 100,000 (e.g. 100 = 0.1%).
36
+ * When non-zero, DeliverMax is set to Amount + ⌈Amount × fee / 100_000⌉.
37
+ * @param {number} fee - TransferFee value from the MPTokenIssuance ledger object
38
+ */
39
+ transferFee(fee) {
40
+ if (!Number.isInteger(fee) || fee < 0 || fee > 50000) {
41
+ throw new sdk_core_1.BuildTransactionError('MPT transferFee must be an integer between 0 and 50,000');
42
+ }
43
+ this._transferFee = fee;
44
+ return this;
45
+ }
32
46
  /**
33
47
  * Set the MPT issuance ID and raw integer amount to transfer.
34
48
  * The value is a raw integer string — AssetScale is display-only and never applied here.
@@ -56,6 +70,13 @@ class MPTokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
56
70
  if (mptAmount) {
57
71
  this.mptAmount(mptAmount.mpt_issuance_id, mptAmount.value);
58
72
  }
73
+ // Restore SendMax from the raw payment so it survives a build→serialize→rebuild round-trip.
74
+ // This is necessary for multi-sig flows where a second signer rebuilds the transaction.
75
+ const rawPayload = tx.getSignablePayload();
76
+ const sendMax = rawPayload?.SendMax;
77
+ if (sendMax !== undefined && typeof sendMax === 'object' && 'mpt_issuance_id' in sendMax) {
78
+ this._restoredSendMax = sendMax;
79
+ }
59
80
  }
60
81
  /** @inheritdoc */
61
82
  async buildImplementation() {
@@ -78,9 +99,25 @@ class MPTokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
78
99
  if (typeof this._destinationTag === 'number') {
79
100
  paymentFields.DestinationTag = this._destinationTag;
80
101
  }
102
+ // Set SendMax so the sender covers the TransferFee charged by the issuer.
103
+ // Without SendMax, rippled defaults to SendMax = Amount; when TransferFee > 0 the
104
+ // protocol deducts Amount + fee from the sender, so the tx fails with tecPATH_PARTIAL.
105
+ // Note: DeliverMax is a JSON-level alias that the binary codec does not recognise;
106
+ // SendMax (field code 9) must be used for binary serialisation.
107
+ if (this._transferFee !== undefined && this._transferFee > 0) {
108
+ const amountBig = BigInt(this._value);
109
+ const feeBig = (amountBig * BigInt(this._transferFee) + BigInt(99999)) / BigInt(100000);
110
+ paymentFields.SendMax = {
111
+ mpt_issuance_id: this._mptIssuanceId,
112
+ value: String(amountBig + feeBig),
113
+ };
114
+ }
115
+ else if (this._restoredSendMax) {
116
+ paymentFields.SendMax = this._restoredSendMax;
117
+ }
81
118
  this._specificFields = paymentFields;
82
119
  return await super.buildImplementation();
83
120
  }
84
121
  }
85
122
  exports.MPTokenTransferBuilder = MPTokenTransferBuilder;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXB0VHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tcHRUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXlFO0FBR3pFLG1DQUE2QztBQUU3Qyw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsc0JBQXVCLFNBQVEsdUNBQWtCO0lBTTVELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYyxrQkFBa0I7UUFDOUIsNkVBQTZFO1FBQzdFLE9BQU8sMEJBQWtCLENBQUMsT0FBTyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxFQUFFLENBQUMsT0FBZTtRQUNoQixNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxlQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsVUFBa0IsRUFBRSxLQUFhO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksZ0NBQXFCLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQWU7UUFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0QsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLGlCQUFpQixHQUFHLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUMzRixJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLGdDQUFxQixDQUM3QixrR0FBa0csQ0FDbkcsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBYztZQUM5QixlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ25CLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBWTtZQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzlCLE1BQU0sRUFBRSxZQUFZO1NBQ3JCLENBQUM7UUFFRixJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxhQUFhLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDdEQsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO1FBRXJDLE9BQU8sTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUEzRkQsd0RBMkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IE1QVEFtb3VudCwgUGF5bWVudCB9IGZyb20gJ3hycGwnO1xuaW1wb3J0IHsgWHJwVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgTVBUb2tlblRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX21wdElzc3VhbmNlSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3ZhbHVlPzogc3RyaW5nO1xuICBwcml2YXRlIF9kZXN0aW5hdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb25UYWc/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRNUFQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHhycFRyYW5zYWN0aW9uVHlwZSgpOiBYcnBUcmFuc2FjdGlvblR5cGUuUGF5bWVudCB7XG4gICAgLy8gTVBUIHRyYW5zZmVycyB1c2UgYSBzdGFuZGFyZCBQYXltZW50IHRyYW5zYWN0aW9uIHdpdGggYW4gTVBUIEFtb3VudCBvYmplY3RcbiAgICByZXR1cm4gWHJwVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSByZWNpcGllbnQgYWRkcmVzcyAod2l0aCBvcHRpb25hbCBkZXN0aW5hdGlvbiB0YWcpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIHRoZSByZWNpcGllbnQgWFJQIGFkZHJlc3MsIG9wdGlvbmFsbHkgd2l0aCBkZXN0aW5hdGlvbiB0YWdcbiAgICovXG4gIHRvKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IHsgYWRkcmVzczogeHJwQWRkcmVzcywgZGVzdGluYXRpb25UYWcgfSA9IHV0aWxzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIHRoaXMuX2Rlc3RpbmF0aW9uID0geHJwQWRkcmVzcztcbiAgICB0aGlzLl9kZXN0aW5hdGlvblRhZyA9IGRlc3RpbmF0aW9uVGFnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgTVBUIGlzc3VhbmNlIElEIGFuZCByYXcgaW50ZWdlciBhbW91bnQgdG8gdHJhbnNmZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhIHJhdyBpbnRlZ2VyIHN0cmluZyDigJQgQXNzZXRTY2FsZSBpcyBkaXNwbGF5LW9ubHkgYW5kIG5ldmVyIGFwcGxpZWQgaGVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlzc3VhbmNlSWQgLSA0OC1jaGFyYWN0ZXIgaGV4IE1QVG9rZW5Jc3N1YW5jZUlEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIHJhdyBpbnRlZ2VyIHN0cmluZyAoZS5nLiBcIjEwMDBcIiA9IDEwMDAgYmFzZSB1bml0cylcbiAgICovXG4gIG1wdEFtb3VudChpc3N1YW5jZUlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIS9eWzAtOWEtZkEtRl17NDh9JC8udGVzdChpc3N1YW5jZUlkKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTVBUb2tlbklzc3VhbmNlSUQgbXVzdCBiZSBhIDQ4LWNoYXJhY3RlciBoZXggc3RyaW5nJyk7XG4gICAgfVxuICAgIGlmICghL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01QVCB2YWx1ZSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgc3RyaW5nJyk7XG4gICAgfVxuICAgIHRoaXMuX21wdElzc3VhbmNlSWQgPSBpc3N1YW5jZUlkO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25UYWcsIG1wdEFtb3VudCB9ID0gdHgudG9Kc29uKCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWRkcmVzcyA9IHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzOiBkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25UYWcgfSk7XG4gICAgICB0aGlzLnRvKG5vcm1hbGl6ZWRBZGRyZXNzKTtcbiAgICB9XG4gICAgaWYgKG1wdEFtb3VudCkge1xuICAgICAgdGhpcy5tcHRBbW91bnQobXB0QW1vdW50Lm1wdF9pc3N1YW5jZV9pZCwgbXB0QW1vdW50LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGlmICghdGhpcy5fc2VuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTZW5kZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uIHx8ICF0aGlzLl9tcHRJc3N1YW5jZUlkIHx8ICF0aGlzLl92YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ01pc3NpbmcgbWFuZGF0b3J5IE1QVCBwYXltZW50IHBhcmFtZXRlcnM6IGRlc3RpbmF0aW9uLCBtcHRJc3N1YW5jZUlkLCBhbmQgdmFsdWUgYXJlIGFsbCByZXF1aXJlZCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbXB0QW1vdW50T2JqOiBNUFRBbW91bnQgPSB7XG4gICAgICBtcHRfaXNzdWFuY2VfaWQ6IHRoaXMuX21wdElzc3VhbmNlSWQsXG4gICAgICB2YWx1ZTogdGhpcy5fdmFsdWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHBheW1lbnRGaWVsZHM6IFBheW1lbnQgPSB7XG4gICAgICBUcmFuc2FjdGlvblR5cGU6IHRoaXMueHJwVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgQWNjb3VudDogdGhpcy5fc2VuZGVyLFxuICAgICAgRGVzdGluYXRpb246IHRoaXMuX2Rlc3RpbmF0aW9uLFxuICAgICAgQW1vdW50OiBtcHRBbW91bnRPYmosXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5fZGVzdGluYXRpb25UYWcgPT09ICdudW1iZXInKSB7XG4gICAgICBwYXltZW50RmllbGRzLkRlc3RpbmF0aW9uVGFnID0gdGhpcy5fZGVzdGluYXRpb25UYWc7XG4gICAgfVxuXG4gICAgdGhpcy5fc3BlY2lmaWNGaWVsZHMgPSBwYXltZW50RmllbGRzO1xuXG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXB0VHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tcHRUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXlFO0FBR3pFLG1DQUE2QztBQUU3Qyw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsc0JBQXVCLFNBQVEsdUNBQWtCO0lBWTVELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBYyxrQkFBa0I7UUFDOUIsNkVBQTZFO1FBQzdFLE9BQU8sMEJBQWtCLENBQUMsT0FBTyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxFQUFFLENBQUMsT0FBZTtRQUNoQixNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxlQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLEdBQVc7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBTSxFQUFFLENBQUM7WUFDdEQsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztP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QzdELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTyxDQUFDLENBQUM7WUFDMUYsYUFBYSxDQUFDLE9BQU8sR0FBRztnQkFDdEIsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNwQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7YUFDbEMsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztRQUVyQyxPQUFPLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0MsQ0FBQztDQUNGO0FBdklELHdEQXVJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBNUFRBbW91bnQsIFBheW1lbnQgfSBmcm9tICd4cnBsJztcbmltcG9ydCB7IFhycFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIE1QVG9rZW5UcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF9tcHRJc3N1YW5jZUlkPzogc3RyaW5nO1xuICBwcml2YXRlIF92YWx1ZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uVGFnPzogbnVtYmVyO1xuICAvLyB0cmFuc2ZlckZlZSBpcyB0aGUgaXNzdWFuY2UtbGV2ZWwgcGVyLTEwMCwwMDAgZmVlIChlLmcuIDEwMCA9IDAuMSUpLlxuICAvLyBXaGVuIHNldCwgRGVsaXZlck1heCBpcyBjb21wdXRlZCBhcyBBbW91bnQgKyDijIhBbW91bnQgw5cgdHJhbnNmZXJGZWUgLyAxMDBfMDAw4oyJXG4gIC8vIHNvIHRoZSBzZW5kZXIgY292ZXJzIHRoZSBmZWUgY2hhcmdlZCBieSB0aGUgcHJvdG9jb2wgb24gZGVsaXZlcnkuXG4gIHByaXZhdGUgX3RyYW5zZmVyRmVlPzogbnVtYmVyO1xuICAvLyBQcmVzZXJ2ZWQgU2VuZE1heCBmcm9tIGEgZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uIChtdWx0aS1zaWcgcmVidWlsZCBwYXRoKS5cbiAgcHJpdmF0ZSBfcmVzdG9yZWRTZW5kTWF4PzogTVBUQW1vdW50O1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kTVBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB4cnBUcmFuc2FjdGlvblR5cGUoKTogWHJwVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQge1xuICAgIC8vIE1QVCB0cmFuc2ZlcnMgdXNlIGEgc3RhbmRhcmQgUGF5bWVudCB0cmFuc2FjdGlvbiB3aXRoIGFuIE1QVCBBbW91bnQgb2JqZWN0XG4gICAgcmV0dXJuIFhycFRyYW5zYWN0aW9uVHlwZS5QYXltZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmVjaXBpZW50IGFkZHJlc3MgKHdpdGggb3B0aW9uYWwgZGVzdGluYXRpb24gdGFnKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSB0aGUgcmVjaXBpZW50IFhSUCBhZGRyZXNzLCBvcHRpb25hbGx5IHdpdGggZGVzdGluYXRpb24gdGFnXG4gICAqL1xuICB0byhhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB7IGFkZHJlc3M6IHhycEFkZHJlc3MsIGRlc3RpbmF0aW9uVGFnIH0gPSB1dGlscy5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgICB0aGlzLl9kZXN0aW5hdGlvbiA9IHhycEFkZHJlc3M7XG4gICAgdGhpcy5fZGVzdGluYXRpb25UYWcgPSBkZXN0aW5hdGlvblRhZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBlci1pc3N1YW5jZSB0cmFuc2ZlciBmZWUgc28gRGVsaXZlck1heCBpcyBjb21wdXRlZCBjb3JyZWN0bHkuXG4gICAqIE1hdGNoZXMgdGhlIE1QVG9rZW5Jc3N1YW5jZS5UcmFuc2ZlckZlZSBsZWRnZXIgZmllbGQ6IGFuIGludGVnZXIgaW4gWzAsIDUwXzAwMF1cbiAgICogcmVwcmVzZW50aW5nIGEgZnJhY3Rpb24gb2YgMTAwLDAwMCAoZS5nLiAxMDAgPSAwLjElKS5cbiAgICogV2hlbiBub24temVybywgRGVsaXZlck1heCBpcyBzZXQgdG8gQW1vdW50ICsg4oyIQW1vdW50IMOXIGZlZSAvIDEwMF8wMDDijIkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmZWUgLSBUcmFuc2ZlckZlZSB2YWx1ZSBmcm9tIHRoZSBNUFRva2VuSXNzdWFuY2UgbGVkZ2VyIG9iamVjdFxuICAgKi9cbiAgdHJhbnNmZXJGZWUoZmVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZmVlKSB8fCBmZWUgPCAwIHx8IGZlZSA+IDUwXzAwMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTVBUIHRyYW5zZmVyRmVlIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDUwLDAwMCcpO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2ZlckZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIE1QVCBpc3N1YW5jZSBJRCBhbmQgcmF3IGludGVnZXIgYW1vdW50IHRvIHRyYW5zZmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYSByYXcgaW50ZWdlciBzdHJpbmcg4oCUIEFzc2V0U2NhbGUgaXMgZGlzcGxheS1vbmx5IGFuZCBuZXZlciBhcHBsaWVkIGhlcmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpc3N1YW5jZUlkIC0gNDgtY2hhcmFjdGVyIGhleCBNUFRva2VuSXNzdWFuY2VJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSByYXcgaW50ZWdlciBzdHJpbmcgKGUuZy4gXCIxMDAwXCIgPSAxMDAwIGJhc2UgdW5pdHMpXG4gICAqL1xuICBtcHRBbW91bnQoaXNzdWFuY2VJZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCEvXlswLTlhLWZBLUZdezQ4fSQvLnRlc3QoaXNzdWFuY2VJZCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01QVG9rZW5Jc3N1YW5jZUlEIG11c3QgYmUgYSA0OC1jaGFyYWN0ZXIgaGV4IHN0cmluZycpO1xuICAgIH1cbiAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNUFQgdmFsdWUgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHN0cmluZycpO1xuICAgIH1cbiAgICB0aGlzLl9tcHRJc3N1YW5jZUlkID0gaXNzdWFuY2VJZDtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IHsgZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uVGFnLCBtcHRBbW91bnQgfSA9IHR4LnRvSnNvbigpO1xuICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEFkZHJlc3MgPSB1dGlscy5ub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzczogZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uVGFnIH0pO1xuICAgICAgdGhpcy50byhub3JtYWxpemVkQWRkcmVzcyk7XG4gICAgfVxuICAgIGlmIChtcHRBbW91bnQpIHtcbiAgICAgIHRoaXMubXB0QW1vdW50KG1wdEFtb3VudC5tcHRfaXNzdWFuY2VfaWQsIG1wdEFtb3VudC52YWx1ZSk7XG4gICAgfVxuICAgIC8vIFJlc3RvcmUgU2VuZE1heCBmcm9tIHRoZSByYXcgcGF5bWVudCBzbyBpdCBzdXJ2aXZlcyBhIGJ1aWxk4oaSc2VyaWFsaXpl4oaScmVidWlsZCByb3VuZC10cmlwLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBtdWx0aS1zaWcgZmxvd3Mgd2hlcmUgYSBzZWNvbmQgc2lnbmVyIHJlYnVpbGRzIHRoZSB0cmFuc2FjdGlvbi5cbiAgICBjb25zdCByYXdQYXlsb2FkID0gdHguZ2V0U2lnbmFibGVQYXlsb2FkKCkgYXMgUGF5bWVudDtcbiAgICBjb25zdCBzZW5kTWF4ID0gcmF3UGF5bG9hZD8uU2VuZE1heDtcbiAgICBpZiAoc2VuZE1heCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZW5kTWF4ID09PSAnb2JqZWN0JyAmJiAnbXB0X2lzc3VhbmNlX2lkJyBpbiAoc2VuZE1heCBhcyBNUFRBbW91bnQpKSB7XG4gICAgICB0aGlzLl9yZXN0b3JlZFNlbmRNYXggPSBzZW5kTWF4IGFzIE1QVEFtb3VudDtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGlmICghdGhpcy5fc2VuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTZW5kZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2Rlc3RpbmF0aW9uIHx8ICF0aGlzLl9tcHRJc3N1YW5jZUlkIHx8ICF0aGlzLl92YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ01pc3NpbmcgbWFuZGF0b3J5IE1QVCBwYXltZW50IHBhcmFtZXRlcnM6IGRlc3RpbmF0aW9uLCBtcHRJc3N1YW5jZUlkLCBhbmQgdmFsdWUgYXJlIGFsbCByZXF1aXJlZCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbXB0QW1vdW50T2JqOiBNUFRBbW91bnQgPSB7XG4gICAgICBtcHRfaXNzdWFuY2VfaWQ6IHRoaXMuX21wdElzc3VhbmNlSWQsXG4gICAgICB2YWx1ZTogdGhpcy5fdmFsdWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHBheW1lbnRGaWVsZHM6IFBheW1lbnQgPSB7XG4gICAgICBUcmFuc2FjdGlvblR5cGU6IHRoaXMueHJwVHJhbnNhY3Rpb25UeXBlLFxuICAgICAgQWNjb3VudDogdGhpcy5fc2VuZGVyLFxuICAgICAgRGVzdGluYXRpb246IHRoaXMuX2Rlc3RpbmF0aW9uLFxuICAgICAgQW1vdW50OiBtcHRBbW91bnRPYmosXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5fZGVzdGluYXRpb25UYWcgPT09ICdudW1iZXInKSB7XG4gICAgICBwYXltZW50RmllbGRzLkRlc3RpbmF0aW9uVGFnID0gdGhpcy5fZGVzdGluYXRpb25UYWc7XG4gICAgfVxuXG4gICAgLy8gU2V0IFNlbmRNYXggc28gdGhlIHNlbmRlciBjb3ZlcnMgdGhlIFRyYW5zZmVyRmVlIGNoYXJnZWQgYnkgdGhlIGlzc3Vlci5cbiAgICAvLyBXaXRob3V0IFNlbmRNYXgsIHJpcHBsZWQgZGVmYXVsdHMgdG8gU2VuZE1heCA9IEFtb3VudDsgd2hlbiBUcmFuc2ZlckZlZSA+IDAgdGhlXG4gICAgLy8gcHJvdG9jb2wgZGVkdWN0cyBBbW91bnQgKyBmZWUgZnJvbSB0aGUgc2VuZGVyLCBzbyB0aGUgdHggZmFpbHMgd2l0aCB0ZWNQQVRIX1BBUlRJQUwuXG4gICAgLy8gTm90ZTogRGVsaXZlck1heCBpcyBhIEpTT04tbGV2ZWwgYWxpYXMgdGhhdCB0aGUgYmluYXJ5IGNvZGVjIGRvZXMgbm90IHJlY29nbmlzZTtcbiAgICAvLyBTZW5kTWF4IChmaWVsZCBjb2RlIDkpIG11c3QgYmUgdXNlZCBmb3IgYmluYXJ5IHNlcmlhbGlzYXRpb24uXG4gICAgaWYgKHRoaXMuX3RyYW5zZmVyRmVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fdHJhbnNmZXJGZWUgPiAwKSB7XG4gICAgICBjb25zdCBhbW91bnRCaWcgPSBCaWdJbnQodGhpcy5fdmFsdWUpO1xuICAgICAgY29uc3QgZmVlQmlnID0gKGFtb3VudEJpZyAqIEJpZ0ludCh0aGlzLl90cmFuc2ZlckZlZSkgKyBCaWdJbnQoOTlfOTk5KSkgLyBCaWdJbnQoMTAwXzAwMCk7XG4gICAgICBwYXltZW50RmllbGRzLlNlbmRNYXggPSB7XG4gICAgICAgIG1wdF9pc3N1YW5jZV9pZDogdGhpcy5fbXB0SXNzdWFuY2VJZCxcbiAgICAgICAgdmFsdWU6IFN0cmluZyhhbW91bnRCaWcgKyBmZWVCaWcpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Jlc3RvcmVkU2VuZE1heCkge1xuICAgICAgcGF5bWVudEZpZWxkcy5TZW5kTWF4ID0gdGhpcy5fcmVzdG9yZWRTZW5kTWF4O1xuICAgIH1cblxuICAgIHRoaXMuX3NwZWNpZmljRmllbGRzID0gcGF5bWVudEZpZWxkcztcblxuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cbn1cbiJdfQ==