@bitgo/abstract-utxo 10.13.0 → 10.14.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.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +13 -8
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +20 -21
- package/dist/cjs/src/address/fixedScript.d.ts +4 -4
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +17 -35
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +4 -2
- package/dist/cjs/src/impl/bch/bch.d.ts +4 -2
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
- package/dist/cjs/src/impl/bch/bch.js +4 -3
- package/dist/cjs/src/impl/bch/tbch.d.ts +2 -0
- package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -1
- package/dist/cjs/src/impl/bch/tbch.js +3 -36
- package/dist/cjs/src/impl/bcha/bcha.d.ts +3 -2
- package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -1
- package/dist/cjs/src/impl/bcha/bcha.js +4 -37
- package/dist/cjs/src/impl/bcha/tbcha.d.ts +2 -0
- package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -1
- package/dist/cjs/src/impl/bcha/tbcha.js +3 -36
- package/dist/cjs/src/impl/bsv/bsv.d.ts +3 -2
- package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -1
- package/dist/cjs/src/impl/bsv/bsv.js +4 -37
- package/dist/cjs/src/impl/bsv/tbsv.d.ts +2 -0
- package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -1
- package/dist/cjs/src/impl/bsv/tbsv.js +3 -36
- package/dist/cjs/src/impl/btc/btc.d.ts +4 -2
- package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/btc.js +4 -37
- package/dist/cjs/src/impl/btc/tbtc.d.ts +2 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/tbtc.js +3 -36
- package/dist/cjs/src/impl/btc/tbtc4.d.ts +2 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/tbtc4.js +3 -36
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +2 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/tbtcbgsig.js +3 -36
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts +2 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/tbtcsig.js +3 -36
- package/dist/cjs/src/impl/btg/btg.d.ts +4 -2
- package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -1
- package/dist/cjs/src/impl/btg/btg.js +4 -37
- package/dist/cjs/src/impl/dash/dash.d.ts +4 -2
- package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -1
- package/dist/cjs/src/impl/dash/dash.js +4 -37
- package/dist/cjs/src/impl/dash/tdash.d.ts +2 -0
- package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -1
- package/dist/cjs/src/impl/dash/tdash.js +3 -36
- package/dist/cjs/src/impl/doge/doge.d.ts +4 -2
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
- package/dist/cjs/src/impl/doge/doge.js +4 -4
- package/dist/cjs/src/impl/doge/tdoge.d.ts +2 -0
- package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -1
- package/dist/cjs/src/impl/doge/tdoge.js +3 -36
- package/dist/cjs/src/impl/ltc/ltc.d.ts +4 -2
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/ltc.js +4 -3
- package/dist/cjs/src/impl/ltc/tltc.d.ts +2 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/tltc.js +3 -2
- package/dist/cjs/src/impl/zec/tzec.d.ts +2 -0
- package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/tzec.js +3 -36
- package/dist/cjs/src/impl/zec/zec.d.ts +4 -2
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/zec.js +4 -37
- package/dist/cjs/src/names.d.ts +14 -4
- package/dist/cjs/src/names.d.ts.map +1 -1
- package/dist/cjs/src/names.js +74 -57
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +3 -5
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +2 -1
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/TransactionExplanation.js +3 -4
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +6 -3
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +40 -22
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts +3 -2
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +33 -24
- package/dist/cjs/src/recovery/psbt.d.ts +9 -8
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +55 -41
- package/dist/cjs/src/tnumber.d.ts +4 -0
- package/dist/cjs/src/tnumber.d.ts.map +1 -0
- package/dist/cjs/src/tnumber.js +12 -0
- package/dist/cjs/src/transaction/bip322.d.ts.map +1 -1
- package/dist/cjs/src/transaction/bip322.js +26 -11
- package/dist/cjs/src/transaction/decode.d.ts +4 -3
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
- package/dist/cjs/src/transaction/decode.js +8 -5
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +7 -5
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +14 -14
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +4 -4
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +5 -5
- package/dist/cjs/src/transaction/fetchInputs.d.ts +2 -1
- package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fetchInputs.js +4 -2
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +1 -1
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/SigningError.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +4 -4
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +24 -19
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +6 -4
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/replayProtection.js +17 -49
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +6 -5
- package/dist/cjs/src/transaction/fixedScript/{signPsbt.d.ts → signPsbtUtxolib.d.ts} +4 -13
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +157 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +2 -7
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +3 -17
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +9 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +28 -9
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +2 -2
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +3 -3
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +6 -39
- package/dist/cjs/src/transaction/recipient.d.ts +4 -4
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
- package/dist/cjs/src/transaction/recipient.js +7 -4
- package/dist/cjs/src/transaction/signTransaction.js +2 -2
- package/dist/cjs/src/wallet.js +2 -2
- package/dist/cjs/test/unit/address.js +9 -9
- package/dist/cjs/test/unit/bip322.js +319 -3
- package/dist/cjs/test/unit/coins.js +18 -1
- package/dist/cjs/test/unit/customChangeWallet.js +2 -2
- package/dist/cjs/test/unit/prebuildAndSign.js +2 -2
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +15 -2
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +2 -2
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +7 -10
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +5 -6
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +3 -2
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +8 -11
- package/dist/cjs/test/unit/transaction.js +23 -24
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/unspents.js +4 -2
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +13 -8
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +22 -23
- package/dist/esm/address/fixedScript.d.ts +4 -4
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +17 -35
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +4 -2
- package/dist/esm/impl/bch/bch.d.ts +4 -2
- package/dist/esm/impl/bch/bch.d.ts.map +1 -1
- package/dist/esm/impl/bch/bch.js +4 -3
- package/dist/esm/impl/bch/tbch.d.ts +2 -0
- package/dist/esm/impl/bch/tbch.d.ts.map +1 -1
- package/dist/esm/impl/bch/tbch.js +3 -3
- package/dist/esm/impl/bcha/bcha.d.ts +3 -2
- package/dist/esm/impl/bcha/bcha.d.ts.map +1 -1
- package/dist/esm/impl/bcha/bcha.js +4 -4
- package/dist/esm/impl/bcha/tbcha.d.ts +2 -0
- package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -1
- package/dist/esm/impl/bcha/tbcha.js +3 -3
- package/dist/esm/impl/bsv/bsv.d.ts +3 -2
- package/dist/esm/impl/bsv/bsv.d.ts.map +1 -1
- package/dist/esm/impl/bsv/bsv.js +4 -4
- package/dist/esm/impl/bsv/tbsv.d.ts +2 -0
- package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -1
- package/dist/esm/impl/bsv/tbsv.js +3 -3
- package/dist/esm/impl/btc/btc.d.ts +4 -2
- package/dist/esm/impl/btc/btc.d.ts.map +1 -1
- package/dist/esm/impl/btc/btc.js +4 -4
- package/dist/esm/impl/btc/tbtc.d.ts +2 -0
- package/dist/esm/impl/btc/tbtc.d.ts.map +1 -1
- package/dist/esm/impl/btc/tbtc.js +3 -3
- package/dist/esm/impl/btc/tbtc4.d.ts +2 -0
- package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -1
- package/dist/esm/impl/btc/tbtc4.js +3 -3
- package/dist/esm/impl/btc/tbtcbgsig.d.ts +2 -0
- package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -1
- package/dist/esm/impl/btc/tbtcbgsig.js +3 -3
- package/dist/esm/impl/btc/tbtcsig.d.ts +2 -0
- package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -1
- package/dist/esm/impl/btc/tbtcsig.js +3 -3
- package/dist/esm/impl/btg/btg.d.ts +4 -2
- package/dist/esm/impl/btg/btg.d.ts.map +1 -1
- package/dist/esm/impl/btg/btg.js +4 -4
- package/dist/esm/impl/dash/dash.d.ts +4 -2
- package/dist/esm/impl/dash/dash.d.ts.map +1 -1
- package/dist/esm/impl/dash/dash.js +4 -4
- package/dist/esm/impl/dash/tdash.d.ts +2 -0
- package/dist/esm/impl/dash/tdash.d.ts.map +1 -1
- package/dist/esm/impl/dash/tdash.js +3 -3
- package/dist/esm/impl/doge/doge.d.ts +4 -2
- package/dist/esm/impl/doge/doge.d.ts.map +1 -1
- package/dist/esm/impl/doge/doge.js +4 -4
- package/dist/esm/impl/doge/tdoge.d.ts +2 -0
- package/dist/esm/impl/doge/tdoge.d.ts.map +1 -1
- package/dist/esm/impl/doge/tdoge.js +3 -3
- package/dist/esm/impl/ltc/ltc.d.ts +4 -2
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/ltc.js +4 -3
- package/dist/esm/impl/ltc/tltc.d.ts +2 -0
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/tltc.js +3 -2
- package/dist/esm/impl/zec/tzec.d.ts +2 -0
- package/dist/esm/impl/zec/tzec.d.ts.map +1 -1
- package/dist/esm/impl/zec/tzec.js +3 -3
- package/dist/esm/impl/zec/zec.d.ts +4 -2
- package/dist/esm/impl/zec/zec.d.ts.map +1 -1
- package/dist/esm/impl/zec/zec.js +4 -4
- package/dist/esm/names.d.ts +14 -4
- package/dist/esm/names.d.ts.map +1 -1
- package/dist/esm/names.js +67 -54
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +3 -5
- package/dist/esm/offlineVault/TransactionExplanation.d.ts +2 -1
- package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -1
- package/dist/esm/offlineVault/TransactionExplanation.js +3 -4
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/esm/offlineVault/descriptor/transaction.js +6 -3
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +41 -23
- package/dist/esm/recovery/crossChainRecovery.d.ts +3 -2
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +34 -25
- package/dist/esm/recovery/psbt.d.ts +9 -8
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +55 -41
- package/dist/esm/tnumber.d.ts +4 -0
- package/dist/esm/tnumber.d.ts.map +1 -0
- package/dist/esm/tnumber.js +9 -0
- package/dist/esm/transaction/bip322.d.ts.map +1 -1
- package/dist/esm/transaction/bip322.js +27 -12
- package/dist/esm/transaction/decode.d.ts +4 -3
- package/dist/esm/transaction/decode.d.ts.map +1 -1
- package/dist/esm/transaction/decode.js +8 -5
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +7 -5
- package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +14 -14
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +4 -4
- package/dist/esm/transaction/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +5 -5
- package/dist/esm/transaction/fetchInputs.d.ts +2 -1
- package/dist/esm/transaction/fetchInputs.d.ts.map +1 -1
- package/dist/esm/transaction/fetchInputs.js +4 -2
- package/dist/esm/transaction/fixedScript/SigningError.d.ts +1 -1
- package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/SigningError.js +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +4 -4
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +24 -19
- package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts +6 -4
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/replayProtection.js +17 -16
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +6 -5
- package/dist/esm/transaction/fixedScript/{signPsbt.d.ts → signPsbtUtxolib.d.ts} +4 -13
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +117 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +2 -7
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +3 -17
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +9 -1
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +28 -10
- package/dist/esm/transaction/fixedScript/verifyTransaction.js +2 -2
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +3 -3
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
- package/dist/esm/transaction/getPayGoVerificationPubkey.js +6 -6
- package/dist/esm/transaction/recipient.d.ts +4 -4
- package/dist/esm/transaction/recipient.d.ts.map +1 -1
- package/dist/esm/transaction/recipient.js +7 -4
- package/dist/esm/transaction/signTransaction.js +2 -2
- package/dist/esm/wallet.js +2 -2
- package/package.json +12 -12
- package/dist/cjs/src/transaction/fixedScript/signPsbt.d.ts.map +0 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbt.js +0 -174
- package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +0 -3
- package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +0 -1
- package/dist/cjs/test/unit/transaction/fixedScript/util.js +0 -41
- package/dist/esm/transaction/fixedScript/signPsbt.d.ts.map +0 -1
- package/dist/esm/transaction/fixedScript/signPsbt.js +0 -134
|
@@ -43,11 +43,12 @@ const utxocore = __importStar(require("@bitgo/utxo-core"));
|
|
|
43
43
|
const recipient_1 = require("../recipient");
|
|
44
44
|
const getPayGoVerificationPubkey_1 = require("../getPayGoVerificationPubkey");
|
|
45
45
|
const keychains_1 = require("../../keychains");
|
|
46
|
-
|
|
46
|
+
const names_1 = require("../../names");
|
|
47
|
+
function toChangeOutput(txOutput, coinName, changeInfo) {
|
|
47
48
|
if (!changeInfo) {
|
|
48
49
|
return undefined;
|
|
49
50
|
}
|
|
50
|
-
const address = (0, recipient_1.toExtendedAddressFormat)(txOutput.script,
|
|
51
|
+
const address = (0, recipient_1.toExtendedAddressFormat)(txOutput.script, coinName);
|
|
51
52
|
const change = changeInfo.find((change) => change.address === address);
|
|
52
53
|
if (!change) {
|
|
53
54
|
return undefined;
|
|
@@ -63,7 +64,7 @@ function toChangeOutput(txOutput, network, changeInfo) {
|
|
|
63
64
|
function outputSum(outputs) {
|
|
64
65
|
return outputs.reduce((sum, output) => sum + BigInt(output.amount), BigInt(0));
|
|
65
66
|
}
|
|
66
|
-
function explainCommon(tx, params,
|
|
67
|
+
function explainCommon(tx, params, coinName) {
|
|
67
68
|
const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs'];
|
|
68
69
|
const changeOutputs = [];
|
|
69
70
|
const customChangeOutputs = [];
|
|
@@ -72,14 +73,14 @@ function explainCommon(tx, params, network) {
|
|
|
72
73
|
tx.outs.forEach((currentOutput) => {
|
|
73
74
|
// Try to encode the script pubkey with an address. If it fails, try to parse it as an OP_RETURN output with the prefix.
|
|
74
75
|
// If that fails, then it is an unrecognized scriptPubkey and should fail
|
|
75
|
-
const currentAddress = (0, recipient_1.toExtendedAddressFormat)(currentOutput.script,
|
|
76
|
+
const currentAddress = (0, recipient_1.toExtendedAddressFormat)(currentOutput.script, coinName);
|
|
76
77
|
const currentAmount = BigInt(currentOutput.value);
|
|
77
|
-
const changeOutput = toChangeOutput(currentOutput,
|
|
78
|
+
const changeOutput = toChangeOutput(currentOutput, coinName, changeInfo);
|
|
78
79
|
if (changeOutput) {
|
|
79
80
|
changeOutputs.push(changeOutput);
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
82
|
-
const customChangeOutput = toChangeOutput(currentOutput,
|
|
83
|
+
const customChangeOutput = toChangeOutput(currentOutput, coinName, customChangeInfo);
|
|
83
84
|
if (customChangeOutput) {
|
|
84
85
|
customChangeOutputs.push(customChangeOutput);
|
|
85
86
|
return;
|
|
@@ -128,7 +129,8 @@ function getPsbtInputSignaturesCount(psbt, params) {
|
|
|
128
129
|
? utxo_lib_1.bitgo.getSignatureValidationArrayPsbt(psbt, rootWalletKeys).map((sv) => sv[1].filter((v) => v).length)
|
|
129
130
|
: Array(psbt.data.inputs.length).fill(0);
|
|
130
131
|
}
|
|
131
|
-
function getTxInputSignaturesCount(tx, params,
|
|
132
|
+
function getTxInputSignaturesCount(tx, params, coinName) {
|
|
133
|
+
const network = (0, names_1.getNetworkFromCoinName)(coinName);
|
|
132
134
|
const prevOutputs = params.txInfo?.unspents?.map((u) => utxo_lib_1.bitgo.toOutput(u, network));
|
|
133
135
|
const rootWalletKeys = getRootWalletKeys(params);
|
|
134
136
|
const { unspents = [] } = params.txInfo ?? {};
|
|
@@ -198,7 +200,7 @@ function getChangeInfo(psbt, walletKeys) {
|
|
|
198
200
|
* Extract PayGo address proof information from the PSBT if present
|
|
199
201
|
* @returns Information about the PayGo proof, including the output index and address
|
|
200
202
|
*/
|
|
201
|
-
function getPayGoVerificationInfo(psbt,
|
|
203
|
+
function getPayGoVerificationInfo(psbt, coinName) {
|
|
202
204
|
let outputIndex = undefined;
|
|
203
205
|
let address = undefined;
|
|
204
206
|
// Check if this PSBT has any PayGo address proofs
|
|
@@ -206,12 +208,13 @@ function getPayGoVerificationInfo(psbt, network) {
|
|
|
206
208
|
return undefined;
|
|
207
209
|
}
|
|
208
210
|
// This pulls the pubkey depending on given network
|
|
209
|
-
const verificationPubkey = (0, getPayGoVerificationPubkey_1.getPayGoVerificationPubkey)(
|
|
211
|
+
const verificationPubkey = (0, getPayGoVerificationPubkey_1.getPayGoVerificationPubkey)(coinName);
|
|
210
212
|
// find which output index that contains the PayGo proof
|
|
211
213
|
outputIndex = utxocore.paygo.getPayGoAddressProofOutputIndex(psbt);
|
|
212
214
|
if (outputIndex === undefined || !verificationPubkey) {
|
|
213
215
|
return undefined;
|
|
214
216
|
}
|
|
217
|
+
const network = (0, names_1.getNetworkFromCoinName)(coinName);
|
|
215
218
|
const output = psbt.txOutputs[outputIndex];
|
|
216
219
|
address = utxolib.address.fromOutputScript(output.script, network);
|
|
217
220
|
if (!address) {
|
|
@@ -225,7 +228,8 @@ function getPayGoVerificationInfo(psbt, network) {
|
|
|
225
228
|
* @returns An array of objects containing the message and address for each input,
|
|
226
229
|
* or undefined if no BIP322 messages are found.
|
|
227
230
|
*/
|
|
228
|
-
function getBip322MessageInfoAndVerify(psbt,
|
|
231
|
+
function getBip322MessageInfoAndVerify(psbt, coinName) {
|
|
232
|
+
const network = (0, names_1.getNetworkFromCoinName)(coinName);
|
|
229
233
|
const bip322Messages = [];
|
|
230
234
|
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
231
235
|
const message = utxo_core_1.bip322.getBip322ProofMessageAtIndex(psbt, i);
|
|
@@ -285,11 +289,12 @@ function getBip322MessageInfoAndVerify(psbt, network) {
|
|
|
285
289
|
*
|
|
286
290
|
* @param psbt {bitgo.UtxoPsbt} The PSBT to explain
|
|
287
291
|
* @param pubs {bitgo.RootWalletKeys | string[]} The public keys to use for the explanation
|
|
288
|
-
* @param
|
|
292
|
+
* @param coinName {UtxoCoinName} The coin name to use for the explanation
|
|
289
293
|
* @param strict {boolean} Whether to throw an error if the PayGo address proof is invalid
|
|
290
294
|
*/
|
|
291
|
-
function explainPsbt(psbt, params,
|
|
292
|
-
const
|
|
295
|
+
function explainPsbt(psbt, params, coinName, { strict = true } = {}) {
|
|
296
|
+
const network = (0, names_1.getNetworkFromCoinName)(coinName);
|
|
297
|
+
const payGoVerificationInfo = getPayGoVerificationInfo(psbt, coinName);
|
|
293
298
|
if (payGoVerificationInfo) {
|
|
294
299
|
try {
|
|
295
300
|
utxocore.paygo.verifyPayGoAddressProof(psbt, payGoVerificationInfo.outputIndex, secp256k1_1.bip32.fromBase58(payGoVerificationInfo.verificationPubkey, utxolib.networks.bitcoin).publicKey);
|
|
@@ -301,13 +306,13 @@ function explainPsbt(psbt, params, network, { strict = true } = {}) {
|
|
|
301
306
|
console.error(e);
|
|
302
307
|
}
|
|
303
308
|
}
|
|
304
|
-
const messages = getBip322MessageInfoAndVerify(psbt,
|
|
309
|
+
const messages = getBip322MessageInfoAndVerify(psbt, coinName);
|
|
305
310
|
const changeInfo = getChangeInfo(psbt);
|
|
306
311
|
const customChangeInfo = params.customChangePubs
|
|
307
312
|
? getChangeInfo(psbt, (0, keychains_1.toBip32Triple)(params.customChangePubs))
|
|
308
313
|
: undefined;
|
|
309
314
|
const tx = psbt.getUnsignedTx();
|
|
310
|
-
const common = explainCommon(tx, { ...params, changeInfo, customChangeInfo },
|
|
315
|
+
const common = explainCommon(tx, { ...params, changeInfo, customChangeInfo }, coinName);
|
|
311
316
|
const inputSignaturesCount = getPsbtInputSignaturesCount(psbt, params);
|
|
312
317
|
// Set fee from subtracting inputs from outputs
|
|
313
318
|
const outputAmount = psbt.txOutputs.reduce((cumulative, curr) => cumulative + BigInt(curr.value), BigInt(0));
|
|
@@ -332,13 +337,13 @@ function explainPsbt(psbt, params, network, { strict = true } = {}) {
|
|
|
332
337
|
messages,
|
|
333
338
|
};
|
|
334
339
|
}
|
|
335
|
-
function explainLegacyTx(tx, params,
|
|
336
|
-
const common = explainCommon(tx, params,
|
|
337
|
-
const inputSignaturesCount = getTxInputSignaturesCount(tx, params,
|
|
340
|
+
function explainLegacyTx(tx, params, coinName) {
|
|
341
|
+
const common = explainCommon(tx, params, coinName);
|
|
342
|
+
const inputSignaturesCount = getTxInputSignaturesCount(tx, params, coinName);
|
|
338
343
|
return {
|
|
339
344
|
...common,
|
|
340
345
|
inputSignatures: inputSignaturesCount,
|
|
341
346
|
signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
|
|
342
347
|
};
|
|
343
348
|
}
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRYQSxrQ0F1REM7QUFFRCwwQ0FnQkM7QUFyY0QseURBQTJDO0FBQzNDLGdEQUEwQztBQUMxQyxnREFBeUQ7QUFDekQsOENBQXdDO0FBRXhDLDJEQUE2QztBQUk3Qyw0Q0FBdUQ7QUFDdkQsOEVBQTJFO0FBQzNFLCtDQUFnRDtBQTREaEQsU0FBUyxjQUFjLENBQ3JCLFFBQTJDLEVBQzNDLE9BQXdCLEVBQ3hCLFVBQTJDO0lBRTNDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBQSxtQ0FBdUIsRUFBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU87UUFDTCxPQUFPO1FBQ1AsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1FBQ2pDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxPQUFzQztJQUN2RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENB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QyxDQUFDLENBQUMsQ0FBQztJQUVkLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxHQUFHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQzVDLGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkYsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUM3QixFQUFrQyxFQUNsQyxNQUlDLEVBQ0QsT0FBd0I7SUFFeEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsTUFBTSxvQkFBb0IsR0FBRyx5QkFBeUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVFLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxlQUFlLEVBQUUsb0JBQW9CO1FBQ3JDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3hGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIyIH0gZnJvbSAnQGJpdGdvL3V0eG8tY29yZSc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSwgYmlwMzIgfSBmcm9tICdAYml0Z28vc2VjcDI1NmsxJztcbmltcG9ydCB7IGJpdGdvIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2NvcmUgZnJvbSAnQGJpdGdvL3V0eG8tY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQmlwMzIyTWVzc2FnZSB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHR5cGUgeyBPdXRwdXQsIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgZ2V0UGF5R29WZXJpZmljYXRpb25QdWJrZXkgfSBmcm9tICcuLi9nZXRQYXlHb1ZlcmlmaWNhdGlvblB1YmtleSc7XG5pbXBvcnQgeyB0b0JpcDMyVHJpcGxlIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcblxuLy8gPT09PT0gVHJhbnNhY3Rpb24gRXhwbGFuYXRpb24gVHlwZSBEZWZpbml0aW9ucyA9PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0VXR4b1RyYW5zYWN0aW9uRXhwbGFuYXRpb248VEZlZSA9IHN0cmluZywgVENoYW5nZU91dHB1dCBleHRlbmRzIE91dHB1dCA9IE91dHB1dD5cbiAgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlLCBzdHJpbmc+IHtcbiAgLyoqIE5PVEU6IHRoaXMgYWN0dWFsbHkgb25seSBjYXB0dXJlcyBleHRlcm5hbCBvdXRwdXRzICovXG4gIG91dHB1dHM6IE91dHB1dFtdO1xuICBjaGFuZ2VPdXRwdXRzOiBUQ2hhbmdlT3V0cHV0W107XG4gIGN1c3RvbUNoYW5nZU91dHB1dHM/OiBUQ2hhbmdlT3V0cHV0W107XG4gIGN1c3RvbUNoYW5nZUFtb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogQklQMzIyIG1lc3NhZ2VzIGV4dHJhY3RlZCBmcm9tIHRoZSB0cmFuc2FjdGlvbiBpbnB1dHMuXG4gICAqIFRoZXNlIG1lc3NhZ2VzIGFyZSB1c2VkIGZvciB2ZXJpZnlpbmcgdGhlIHRyYW5zYWN0aW9uIGFnYWluc3QgdGhlIEJJUDMyMiBzdGFuZGFyZC5cbiAgICovXG4gIG1lc3NhZ2VzPzogQmlwMzIyTWVzc2FnZVtdO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgLSB0aGUgc2lnbmF0dXJlIGZpZWxkcyBhcmUgbm90IHZlcnkgdXNlZnVsICovXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPFRGZWUgPSBzdHJpbmcsIFRDaGFuZ2VPdXRwdXQgZXh0ZW5kcyBPdXRwdXQgPSBPdXRwdXQ+XG4gIGV4dGVuZHMgQWJzdHJhY3RVdHhvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlLCBUQ2hhbmdlT3V0cHV0PiB7XG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVudXNlZCBvdXRzaWRlIG9mIHRlc3RzICovXG4gIGxvY2t0aW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgaW5wdXQgc2lnbmF0dXJlcyBwZXIgaW5wdXQuXG4gICAqIEBkZXByZWNhdGVkIC0gdGhpcyBpcyBub3QgdmVyeSB1c2VmdWwgd2l0aG91dCBrbm93aW5nIHdobyBzaWduZWQgZWFjaCBpbnB1dC5cbiAgICovXG4gIGlucHV0U2lnbmF0dXJlczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIEhpZ2hlc3QgaW5wdXQgc2lnbmF0dXJlIGNvdW50IGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQGRlcHJlY2F0ZWQgLSB0aGlzIGlzIG5vdCB2ZXJ5IHVzZWZ1bCB3aXRob3V0IGtub3dpbmcgd2hvIHNpZ25lZCBlYWNoIGlucHV0LlxuICAgKi9cbiAgc2lnbmF0dXJlczogbnVtYmVyO1xufVxuXG4vKiogRm9yIG91ciB3YXNtIGJhY2tlbmQsIHdlIGRvIG5vdCByZXR1cm4gdGhlIGRlcHJlY2F0ZWQgZmllbGRzLiBXZSBzZXQgVEZlZSB0byBzdHJpbmcgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldhc20gPSBBYnN0cmFjdFV0eG9UcmFuc2FjdGlvbkV4cGxhbmF0aW9uPHN0cmluZywgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQ+O1xuXG4vKiogV2hlbiBwYXJzaW5nIHRoZSBsZWdhY3kgdHJhbnNhY3Rpb24gZm9ybWF0LCB3ZSBjYW5ub3QgYWx3YXlzIGluZmVyIHRoZSBmZWUgc28gd2Ugc2V0IGl0IHRvIHN0cmluZyB8IHVuZGVmaW5lZCAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJMZWdhY3kgPSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2l0aFNpZ25hdHVyZXM8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuLyoqIFdoZW4gcGFyc2luZyBhIFBTQlQsIHdlIGNhbiBpbmZlciB0aGUgZmVlIHNvIHdlIHNldCBURmVlIHRvIHN0cmluZy4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliUHNidCA9IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25XaXRoU2lnbmF0dXJlczxzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uRGVzY3JpcHRvciA9IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25XaXRoU2lnbmF0dXJlczxzdHJpbmcsIE91dHB1dD47XG5cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPVxuICB8IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliTGVnYWN5XG4gIHwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJQc2J0XG4gIHwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldhc207XG5cbmV4cG9ydCB0eXBlIENoYW5nZUFkZHJlc3NJbmZvID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiB0b0NoYW5nZU91dHB1dChcbiAgdHhPdXRwdXQ6IHV0eG9saWIuVHhPdXRwdXQ8bnVtYmVyIHwgYmlnaW50PixcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBjaGFuZ2VJbmZvOiBDaGFuZ2VBZGRyZXNzSW5mb1tdIHwgdW5kZWZpbmVkXG4pOiBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCB8IHVuZGVmaW5lZCB7XG4gIGlmICghY2hhbmdlSW5mbykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYWRkcmVzcyA9IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KHR4T3V0cHV0LnNjcmlwdCwgbmV0d29yayk7XG4gIGNvbnN0IGNoYW5nZSA9IGNoYW5nZUluZm8uZmluZCgoY2hhbmdlKSA9PiBjaGFuZ2UuYWRkcmVzcyA9PT0gYWRkcmVzcyk7XG4gIGlmICghY2hhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFkZHJlc3MsXG4gICAgYW1vdW50OiB0eE91dHB1dC52YWx1ZS50b1N0cmluZygpLFxuICAgIGNoYWluOiBjaGFuZ2UuY2hhaW4sXG4gICAgaW5kZXg6IGNoYW5nZS5pbmRleCxcbiAgICBleHRlcm5hbDogZmFsc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG91dHB1dFN1bShvdXRwdXRzOiB7IGFtb3VudDogc3RyaW5nIHwgbnVtYmVyIH1bXSk6IGJpZ2ludCB7XG4gIHJldHVybiBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIEJpZ0ludChvdXRwdXQuYW1vdW50KSwgQmlnSW50KDApKTtcbn1cblxuZnVuY3Rpb24gZXhwbGFpbkNvbW1vbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgY2hhbmdlSW5mbz86IENoYW5nZUFkZHJlc3NJbmZvW107XG4gICAgY3VzdG9tQ2hhbmdlSW5mbz86IENoYW5nZUFkZHJlc3NJbmZvW107XG4gICAgZmVlSW5mbz86IHN0cmluZztcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pIHtcbiAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cyddO1xuICBjb25zdCBjaGFuZ2VPdXRwdXRzOiBGaXhlZFNjcmlwdFdhbGxldE91dHB1dFtdID0gW107XG4gIGNvbnN0IGN1c3RvbUNoYW5nZU91dHB1dHM6IEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0W10gPSBbXTtcbiAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzOiBPdXRwdXRbXSA9IFtdO1xuXG4gIGNvbnN0IHsgY2hhbmdlSW5mbywgY3VzdG9tQ2hhbmdlSW5mbyB9ID0gcGFyYW1zO1xuXG4gIHR4Lm91dHMuZm9yRWFjaCgoY3VycmVudE91dHB1dCkgPT4ge1xuICAgIC8vIFRyeSB0byBlbmNvZGUgdGhlIHNjcmlwdCBwdWJrZXkgd2l0aCBhbiBhZGRyZXNzLiBJZiBpdCBmYWlscywgdHJ5IHRvIHBhcnNlIGl0IGFzIGFuIE9QX1JFVFVSTiBvdXRwdXQgd2l0aCB0aGUgcHJlZml4LlxuICAgIC8vIElmIHRoYXQgZmFpbHMsIHRoZW4gaXQgaXMgYW4gdW5yZWNvZ25pemVkIHNjcmlwdFB1YmtleSBhbmQgc2hvdWxkIGZhaWxcbiAgICBjb25zdCBjdXJyZW50QWRkcmVzcyA9IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGN1cnJlbnRPdXRwdXQuc2NyaXB0LCBuZXR3b3JrKTtcbiAgICBjb25zdCBjdXJyZW50QW1vdW50ID0gQmlnSW50KGN1cnJlbnRPdXRwdXQudmFsdWUpO1xuXG4gICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gdG9DaGFuZ2VPdXRwdXQoY3VycmVudE91dHB1dCwgbmV0d29yaywgY2hhbmdlSW5mbyk7XG4gICAgaWYgKGNoYW5nZU91dHB1dCkge1xuICAgICAgY2hhbmdlT3V0cHV0cy5wdXNoKGNoYW5nZU91dHB1dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tQ2hhbmdlT3V0cHV0ID0gdG9DaGFuZ2VPdXRwdXQoY3VycmVudE91dHB1dCwgbmV0d29yaywgY3VzdG9tQ2hhbmdlSW5mbyk7XG4gICAgaWYgKGN1c3RvbUNoYW5nZU91dHB1dCkge1xuICAgICAgY3VzdG9tQ2hhbmdlT3V0cHV0cy5wdXNoKGN1c3RvbUNoYW5nZU91dHB1dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXh0ZXJuYWxPdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogY3VycmVudEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IGN1cnJlbnRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgIC8vIElmIGNoYW5nZUluZm8gaGFzIGEgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtZWFucyB0aGF0IHRoZSBjaGFuZ2UgaW5mb3JtYXRpb25cbiAgICAgIC8vIHdhcyBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gYnV0IHRoZSBvdXRwdXQgd2FzIG5vdCBpZGVudGlmaWVkIGFzIGNoYW5nZS4gSW4gdGhpcyBjYXNlLFxuICAgICAgLy8gdGhlIG91dHB1dCBpcyBleHRlcm5hbCwgYW5kIHdlIGNhbiBzZXQgaXQgYXMgc28uIElmIGNoYW5nZUluZm8gaXMgdW5kZWZpbmVkLCBpdCBtZWFucyB3ZSB3ZXJlXG4gICAgICAvLyBnaXZlbiBubyBpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2Ugb3V0cHV0cywgc28gd2UgY2FuJ3QgZGV0ZXJtaW5lIGFueXRoaW5nIGFib3V0IHRoZSBvdXRwdXQsXG4gICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1bmRlZmluZWQuXG4gICAgICBleHRlcm5hbDogY2hhbmdlSW5mbyA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dERldGFpbHMgPSB7XG4gICAgb3V0cHV0czogZXh0ZXJuYWxPdXRwdXRzLFxuICAgIG91dHB1dEFtb3VudDogb3V0cHV0U3VtKGV4dGVybmFsT3V0cHV0cykudG9TdHJpbmcoKSxcblxuICAgIGNoYW5nZU91dHB1dHMsXG4gICAgY2hhbmdlQW1vdW50OiBvdXRwdXRTdW0oY2hhbmdlT3V0cHV0cykudG9TdHJpbmcoKSxcblxuICAgIGN1c3RvbUNoYW5nZUFtb3VudDogb3V0cHV0U3VtKGN1c3RvbUNoYW5nZU91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgY3VzdG9tQ2hhbmdlT3V0cHV0cyxcbiAgfTtcblxuICBsZXQgZmVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBsb2NrdGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChwYXJhbXMuZmVlSW5mbykge1xuICAgIGRpc3BsYXlPcmRlci5wdXNoKCdmZWUnKTtcbiAgICBmZWUgPSBwYXJhbXMuZmVlSW5mbztcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHR4LmxvY2t0aW1lKSAmJiB0eC5sb2NrdGltZSA+IDApIHtcbiAgICBkaXNwbGF5T3JkZXIucHVzaCgnbG9ja3RpbWUnKTtcbiAgICBsb2NrdGltZSA9IHR4LmxvY2t0aW1lO1xuICB9XG5cbiAgcmV0dXJuIHsgZGlzcGxheU9yZGVyLCBpZDogdHguZ2V0SWQoKSwgLi4ub3V0cHV0RGV0YWlscywgZmVlLCBsb2NrdGltZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXM6IHsgcHVicz86IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgc3RyaW5nW10gfSk6IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHBhcmFtcy5wdWJzIGluc3RhbmNlb2YgYml0Z28uUm9vdFdhbGxldEtleXMpIHtcbiAgICByZXR1cm4gcGFyYW1zLnB1YnM7XG4gIH1cbiAgY29uc3Qga2V5cyA9IHBhcmFtcy5wdWJzPy5tYXAoKHhwdWIpID0+IGJpcDMyLmZyb21CYXNlNTgoeHB1YikpO1xuICByZXR1cm4ga2V5cyAmJiBrZXlzLmxlbmd0aCA9PT0gMyA/IG5ldyBiaXRnby5Sb290V2FsbGV0S2V5cyhrZXlzIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT4pIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRQc2J0SW5wdXRTaWduYXR1cmVzQ291bnQoXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgfVxuKSB7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0Um9vdFdhbGxldEtleXMocGFyYW1zKTtcbiAgcmV0dXJuIHJvb3RXYWxsZXRLZXlzXG4gICAgPyBiaXRnby5nZXRTaWduYXR1cmVWYWxpZGF0aW9uQXJyYXlQc2J0KHBzYnQsIHJvb3RXYWxsZXRLZXlzKS5tYXAoKHN2KSA9PiBzdlsxXS5maWx0ZXIoKHYpID0+IHYpLmxlbmd0aClcbiAgICA6IChBcnJheShwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCkgYXMgbnVtYmVyW10pLmZpbGwoMCk7XG59XG5cbmZ1bmN0aW9uIGdldFR4SW5wdXRTaWduYXR1cmVzQ291bnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBiaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHBhcmFtczoge1xuICAgIHR4SW5mbz86IHsgdW5zcGVudHM/OiBiaXRnby5VbnNwZW50PFROdW1iZXI+W10gfTtcbiAgICBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pIHtcbiAgY29uc3QgcHJldk91dHB1dHMgPSBwYXJhbXMudHhJbmZvPy51bnNwZW50cz8ubWFwKCh1KSA9PiBiaXRnby50b091dHB1dDxUTnVtYmVyPih1LCBuZXR3b3JrKSk7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0Um9vdFdhbGxldEtleXMocGFyYW1zKTtcbiAgY29uc3QgeyB1bnNwZW50cyA9IFtdIH0gPSBwYXJhbXMudHhJbmZvID8/IHt9O1xuXG4gIC8vIGdldCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgcGVyIGlucHV0XG4gIHJldHVybiB0eC5pbnMubWFwKChpbnB1dCwgaWR4KTogbnVtYmVyID0+IHtcbiAgICBpZiAodW5zcGVudHMubGVuZ3RoICE9PSB0eC5pbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YXRlYCk7XG4gICAgfVxuICAgIGlmICghcm9vdFdhbGxldEtleXMpIHtcbiAgICAgIC8vIG5vIHB1YiBrZXlzIG9yIGluY29ycmVjdCBudW1iZXIgb2YgcHViIGtleXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJpdGdvLnZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50PFROdW1iZXI+KHR4LCBpZHgsIHVuc3BlbnRzLCByb290V2FsbGV0S2V5cykuZmlsdGVyKCh2KSA9PiB2KS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCBhbmQgd2UgY2FuJ3QgdmFsaWRhdGUgdGhlIHNpZ25hdHVyZXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldENoYWluQW5kSW5kZXhGcm9tQmlwMzJEZXJpdmF0aW9ucyhvdXRwdXQ6IGJpdGdvLlBzYnRPdXRwdXQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbnMgPSBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uID8/IG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gPz8gdW5kZWZpbmVkO1xuICBpZiAoIWRlcml2YXRpb25zKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRocyA9IGRlcml2YXRpb25zLm1hcCgoZCkgPT4gZC5wYXRoKTtcbiAgaWYgKCFwYXRocyB8fCBwYXRocy5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDMgcGF0aHMgaW4gYmlwMzJEZXJpdmF0aW9uIG9yIHRhcEJpcDMyRGVyaXZhdGlvbicpO1xuICB9XG4gIGlmICghcGF0aHMuZXZlcnkoKHApID0+IHBhdGhzWzBdID09PSBwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYWxsIHBhdGhzIHRvIGJlIHRoZSBzYW1lJyk7XG4gIH1cblxuICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgaWYgKHBhdGhzWzBdICE9PSBwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gZ2V0IGEgc2luZ2xlIGNoYWluIGFuZCBpbmRleCBvbiB0aGUgb3V0cHV0IGJlY2F1c2UgdGhlcmUgYXJlIGRpZmZlcmVudCBwYXRocyBmb3IgZGlmZmVyZW50IGtleXMnXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmdldENoYWluQW5kSW5kZXhGcm9tUGF0aChwYXRoc1swXSk7XG59XG5cbmZ1bmN0aW9uIGdldENoYW5nZUluZm8ocHNidDogYml0Z28uVXR4b1BzYnQsIHdhbGxldEtleXM/OiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTogQ2hhbmdlQWRkcmVzc0luZm9bXSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgd2FsbGV0S2V5cyA9IHdhbGxldEtleXMgPz8gdXR4b2xpYi5iaXRnby5nZXRTb3J0ZWRSb290Tm9kZXMocHNidCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRXYWxsZXRPdXRwdXRJbmRpY2VzKHBzYnQsIHdhbGxldEtleXMpLm1hcCgoaSkgPT4ge1xuICAgIGNvbnN0IGRlcml2YXRpb25JbmZvcm1hdGlvbiA9IGdldENoYWluQW5kSW5kZXhGcm9tQmlwMzJEZXJpdmF0aW9ucyhwc2J0LmRhdGEub3V0cHV0c1tpXSk7XG4gICAgaWYgKCFkZXJpdmF0aW9uSW5mb3JtYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgZGVyaXZhdGlvbiBpbmZvcm1hdGlvbiBvbiBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChwc2J0LnR4T3V0cHV0c1tpXS5zY3JpcHQsIHBzYnQubmV0d29yayksXG4gICAgICBleHRlcm5hbDogZmFsc2UsXG4gICAgICAuLi5kZXJpdmF0aW9uSW5mb3JtYXRpb24sXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBQYXlHbyBhZGRyZXNzIHByb29mIGluZm9ybWF0aW9uIGZyb20gdGhlIFBTQlQgaWYgcHJlc2VudFxuICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIFBheUdvIHByb29mLCBpbmNsdWRpbmcgdGhlIG91dHB1dCBpbmRleCBhbmQgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBnZXRQYXlHb1ZlcmlmaWNhdGlvbkluZm8oXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IHsgb3V0cHV0SW5kZXg6IG51bWJlcjsgdmVyaWZpY2F0aW9uUHVia2V5OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGxldCBvdXRwdXRJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgYWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAvLyBDaGVjayBpZiB0aGlzIFBTQlQgaGFzIGFueSBQYXlHbyBhZGRyZXNzIHByb29mc1xuICBpZiAoIXV0eG9jb3JlLnBheWdvLnBzYnRPdXRwdXRJbmNsdWRlc1BheWdvQWRkcmVzc1Byb29mKHBzYnQpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFRoaXMgcHVsbHMgdGhlIHB1YmtleSBkZXBlbmRpbmcgb24gZ2l2ZW4gbmV0d29ya1xuICBjb25zdCB2ZXJpZmljYXRpb25QdWJrZXkgPSBnZXRQYXlHb1ZlcmlmaWNhdGlvblB1YmtleShuZXR3b3JrKTtcbiAgLy8gZmluZCB3aGljaCBvdXRwdXQgaW5kZXggdGhhdCBjb250YWlucyB0aGUgUGF5R28gcHJvb2ZcbiAgb3V0cHV0SW5kZXggPSB1dHhvY29yZS5wYXlnby5nZXRQYXlHb0FkZHJlc3NQcm9vZk91dHB1dEluZGV4KHBzYnQpO1xuICBpZiAob3V0cHV0SW5kZXggPT09IHVuZGVmaW5lZCB8fCAhdmVyaWZpY2F0aW9uUHVia2V5KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBwc2J0LnR4T3V0cHV0c1tvdXRwdXRJbmRleF07XG4gIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChvdXRwdXQuc2NyaXB0LCBuZXR3b3JrKTtcbiAgaWYgKCFhZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGRlcml2ZSBhZGRyZXNzICR7YWRkcmVzc30gUGF5IEdvIEF0dGVzdGF0aW9uLmApO1xuICB9XG5cbiAgcmV0dXJuIHsgb3V0cHV0SW5kZXgsIHZlcmlmaWNhdGlvblB1YmtleSB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIEJJUDMyMiBtZXNzYWdlcyBhbmQgYWRkcmVzc2VzIGZyb20gdGhlIFBTQlQgaW5wdXRzIGFuZCBwZXJmb3JtXG4gKiB2ZXJpZmljYXRpb24gb24gdGhlIHRyYW5zYWN0aW9uIHRvIGVuc3VyZSB0aGF0IGl0IG1lZXRzIHRoZSBCSVAzMjIgcmVxdWlyZW1lbnRzLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRoZSBtZXNzYWdlIGFuZCBhZGRyZXNzIGZvciBlYWNoIGlucHV0LFxuICogICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vIEJJUDMyMiBtZXNzYWdlcyBhcmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGdldEJpcDMyMk1lc3NhZ2VJbmZvQW5kVmVyaWZ5KHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBCaXAzMjJNZXNzYWdlW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBiaXAzMjJNZXNzYWdlczogeyBtZXNzYWdlOiBzdHJpbmc7IGFkZHJlc3M6IHN0cmluZyB9W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGJpcDMyMi5nZXRCaXAzMjJQcm9vZk1lc3NhZ2VBdEluZGV4KHBzYnQsIGkpO1xuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHBzYnQuZGF0YS5pbnB1dHNbaV07XG4gICAgICBpZiAoIWlucHV0LndpdG5lc3NVdHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyB3aXRuZXNzVXR4byBmb3IgaW5wdXQgaW5kZXggJHtpfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnB1dC5ub25XaXRuZXNzVXR4bykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgbm9uV2l0bmVzc1V0eG8gZm9yIGlucHV0IGluZGV4ICR7aX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcmlwdFB1YktleSA9IGlucHV0LndpdG5lc3NVdHhvLnNjcmlwdDtcblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvU3BlbmQgdHJhbnNhY3Rpb24gY2FuIGJlIHJlY3JlYXRlZCBpbiB0aGUgUFNCVCBhbmQgaXMgZW5jb2RlZCBjb3JyZWN0bHkgaW4gdGhlIG5vbldpdG5lc3NVdHhvXG4gICAgICBjb25zdCB0b1NwZW5kID0gYmlwMzIyLmJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKHNjcmlwdFB1YktleSwgbWVzc2FnZSk7XG4gICAgICBjb25zdCB0b1NwZW5kQjY0ID0gdG9TcGVuZC50b0J1ZmZlcigpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIGlmIChpbnB1dC5ub25XaXRuZXNzVXR4by50b1N0cmluZygnYmFzZTY0JykgIT09IHRvU3BlbmRCNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb24td2l0bmVzcyBVVFhPIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCB0b1NwZW5kIHRyYW5zYWN0aW9uIGF0IGlucHV0IGluZGV4ICR7aX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvU3BlbmQgdHJhbnNhY3Rpb24gSUQgbWF0Y2hlcyB0aGUgaW5wdXQncyByZWZlcmVuY2VkIHRyYW5zYWN0aW9uIElEXG4gICAgICBpZiAodG9TcGVuZC5nZXRJZCgpICE9PSB1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQocHNidC50eElucHV0c1tpXSkudHhpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvU3BlbmQgdHJhbnNhY3Rpb24gSUQgZG9lcyBub3QgbWF0Y2ggdGhlIGlucHV0IGF0IGluZGV4ICR7aX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZ5IHRoZSBpbnB1dCBzcGVjaWZpY3NcbiAgICAgIGlmIChwc2J0LnR4SW5wdXRzW2ldLnNlcXVlbmNlICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBzZXF1ZW5jZSBudW1iZXIgYXQgaW5wdXQgaW5kZXggJHtpfTogJHtwc2J0LnR4SW5wdXRzW2ldLnNlcXVlbmNlfS4gRXhwZWN0ZWQgMC5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwc2J0LnR4SW5wdXRzW2ldLmluZGV4ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnB1dCBpbmRleCBhdCBwb3NpdGlvbiAke2l9OiAke3BzYnQudHhJbnB1dHNbaV0uaW5kZXh9LiBFeHBlY3RlZCAwLmApO1xuICAgICAgfVxuXG4gICAgICBiaXAzMjJNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZS50b1N0cmluZygndXRmOCcpLFxuICAgICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHRQdWJLZXksIG5ldHdvcmspLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpcDMyMk1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBhIEJJUDMyMiBtZXNzYWdlIGluIGFueSBpbnB1dCwgYWxsIGlucHV0cyBtdXN0IGhhdmUgb25lLlxuICAgIGlmIChiaXAzMjJNZXNzYWdlcy5sZW5ndGggIT09IHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29uc2lzdGVudCBCSVAzMjIgbWVzc2FnZXMgYWNyb3NzIGlucHV0cy4nKTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIHNwZWNpZmljcyBmb3IgQklQMzIyXG4gICAgaWYgKHBzYnQudmVyc2lvbiAhPT0gMCAmJiBwc2J0LnZlcnNpb24gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgUFNCVCB2ZXJzaW9uIGZvciBCSVAzMjI6ICR7cHNidC52ZXJzaW9ufS4gRXhwZWN0ZWQgMCBgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHNidC5kYXRhLm91dHB1dHMubGVuZ3RoICE9PSAxIHx8XG4gICAgICBwc2J0LnR4T3V0cHV0c1swXS5zY3JpcHQudG9TdHJpbmcoJ2hleCcpICE9PSAnNmEnIHx8XG4gICAgICBwc2J0LnR4T3V0cHV0c1swXS52YWx1ZSAhPT0gMG5cbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBQU0JUIG91dHB1dHMgZm9yIEJJUDMyMi4gRXhwZWN0ZWQgZXhhY3RseSBvbmUgT1BfUkVUVVJOIG91dHB1dCB3aXRoIHplcm8gdmFsdWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpcDMyMk1lc3NhZ2VzO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWNvbXBvc2UgYSByYXcgcHNidCBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAqIGNoYW5nZSBhbW91bnRzLCBhbmQgdHJhbnNhY3Rpb24gb3V0cHV0cy5cbiAqXG4gKiBAcGFyYW0gcHNidCB7Yml0Z28uVXR4b1BzYnR9IFRoZSBQU0JUIHRvIGV4cGxhaW5cbiAqIEBwYXJhbSBwdWJzIHtiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdfSBUaGUgcHVibGljIGtleXMgdG8gdXNlIGZvciB0aGUgZXhwbGFuYXRpb25cbiAqIEBwYXJhbSBuZXR3b3JrIHt1dHhvbGliLk5ldHdvcmt9IFRoZSBuZXR3b3JrIHRvIHVzZSBmb3IgdGhlIGV4cGxhbmF0aW9uXG4gKiBAcGFyYW0gc3RyaWN0IHtib29sZWFufSBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBQYXlHbyBhZGRyZXNzIHByb29mIGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Qc2J0KFxuICBwc2J0OiBiaXRnby5VdHhvUHNidCxcbiAgcGFyYW1zOiB7XG4gICAgcHVicz86IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgc3RyaW5nW107XG4gICAgY3VzdG9tQ2hhbmdlUHVicz86IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgc3RyaW5nW107XG4gIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgeyBzdHJpY3QgPSB0cnVlIH06IHsgc3RyaWN0PzogYm9vbGVhbiB9ID0ge31cbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliUHNidCB7XG4gIGNvbnN0IHBheUdvVmVyaWZpY2F0aW9uSW5mbyA9IGdldFBheUdvVmVyaWZpY2F0aW9uSW5mbyhwc2J0LCBuZXR3b3JrKTtcbiAgaWYgKHBheUdvVmVyaWZpY2F0aW9uSW5mbykge1xuICAgIHRyeSB7XG4gICAgICB1dHhvY29yZS5wYXlnby52ZXJpZnlQYXlHb0FkZHJlc3NQcm9vZihcbiAgICAgICAgcHNidCxcbiAgICAgICAgcGF5R29WZXJpZmljYXRpb25JbmZvLm91dHB1dEluZGV4LFxuICAgICAgICBiaXAzMi5mcm9tQmFzZTU4KHBheUdvVmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25QdWJrZXksIHV0eG9saWIubmV0d29ya3MuYml0Y29pbikucHVibGljS2V5XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBnZXRCaXAzMjJNZXNzYWdlSW5mb0FuZFZlcmlmeShwc2J0LCBuZXR3b3JrKTtcbiAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm8ocHNidCk7XG4gIGNvbnN0IGN1c3RvbUNoYW5nZUluZm8gPSBwYXJhbXMuY3VzdG9tQ2hhbmdlUHVic1xuICAgID8gZ2V0Q2hhbmdlSW5mbyhwc2J0LCB0b0JpcDMyVHJpcGxlKHBhcmFtcy5jdXN0b21DaGFuZ2VQdWJzKSlcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcbiAgY29uc3QgY29tbW9uID0gZXhwbGFpbkNvbW1vbih0eCwgeyAuLi5wYXJhbXMsIGNoYW5nZUluZm8sIGN1c3RvbUNoYW5nZUluZm8gfSwgbmV0d29yayk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlc0NvdW50ID0gZ2V0UHNidElucHV0U2lnbmF0dXJlc0NvdW50KHBzYnQsIHBhcmFtcyk7XG5cbiAgLy8gU2V0IGZlZSBmcm9tIHN1YnRyYWN0aW5nIGlucHV0cyBmcm9tIG91dHB1dHNcbiAgY29uc3Qgb3V0cHV0QW1vdW50ID0gcHNidC50eE91dHB1dHMucmVkdWNlKChjdW11bGF0aXZlLCBjdXJyKSA9PiBjdW11bGF0aXZlICsgQmlnSW50KGN1cnIudmFsdWUpLCBCaWdJbnQoMCkpO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHBzYnQudHhJbnB1dHMucmVkdWNlKChjdW11bGF0aXZlLCB0eElucHV0LCBpKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHBzYnQuZGF0YS5pbnB1dHNbaV07XG4gICAgaWYgKGRhdGEud2l0bmVzc1V0eG8pIHtcbiAgICAgIHJldHVybiBjdW11bGF0aXZlICsgQmlnSW50KGRhdGEud2l0bmVzc1V0eG8udmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5ub25XaXRuZXNzVXR4bykge1xuICAgICAgY29uc3QgdHggPSBiaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXI8YmlnaW50PihkYXRhLm5vbldpdG5lc3NVdHhvLCBuZXR3b3JrLCB7IGFtb3VudFR5cGU6ICdiaWdpbnQnIH0pO1xuICAgICAgcmV0dXJuIGN1bXVsYXRpdmUgKyBCaWdJbnQodHgub3V0c1t0eElucHV0LmluZGV4XS52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgdmFsdWUgb24gaW5wdXQnKTtcbiAgICB9XG4gIH0sIEJpZ0ludCgwKSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb24sXG4gICAgZmVlOiAoaW5wdXRBbW91bnQgLSBvdXRwdXRBbW91bnQpLnRvU3RyaW5nKCksXG4gICAgaW5wdXRTaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudCxcbiAgICBzaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCksXG4gICAgbWVzc2FnZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluTGVnYWN5VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBiaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHBhcmFtczoge1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgICB0eEluZm8/OiB7IHVuc3BlbnRzPzogYml0Z28uVW5zcGVudDxUTnVtYmVyPltdIH07XG4gICAgY2hhbmdlSW5mbz86IHsgYWRkcmVzczogc3RyaW5nOyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXTtcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uVXR4b2xpYkxlZ2FjeSB7XG4gIGNvbnN0IGNvbW1vbiA9IGV4cGxhaW5Db21tb24odHgsIHBhcmFtcywgbmV0d29yayk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlc0NvdW50ID0gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudCh0eCwgcGFyYW1zLCBuZXR3b3JrKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb24sXG4gICAgaW5wdXRTaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudCxcbiAgICBzaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCksXG4gIH07XG59XG4iXX0=
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdZQSxrQ0F3REM7QUFFRCwwQ0FnQkM7QUExY0QseURBQTJDO0FBQzNDLGdEQUEwQztBQUMxQyxnREFBeUQ7QUFDekQsOENBQXdDO0FBRXhDLDJEQUE2QztBQUk3Qyw0Q0FBdUQ7QUFDdkQsOEVBQTJFO0FBQzNFLCtDQUFnRDtBQUNoRCx1Q0FBbUU7QUE0RG5FLFNBQVMsY0FBYyxDQUNyQixRQUEyQyxFQUMzQyxRQUFzQixFQUN0QixVQUEyQztJQUUzQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUEsbUNBQXVCLEVBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtRQUNqQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLFFBQVEsRUFBRSxLQUFLO0tBQ2hCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsT0FBc0M7SUFDdkQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUNwQixFQUFrQyxFQUNsQyxNQUlDLEVBQ0QsUUFBc0I7SUFFdEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEYsTUFBTSxhQUFhLEdBQThCLEVBQUUsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixHQUE4QixFQUFFLENBQUM7SUFDMUQsTUFBTSxlQUFlLEdBQWEsRUFBRSxDQUFDO0lBRXJDLE1BQU0sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFaEQsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtRQUNoQyx3SEFBd0g7UUFDeEgseUVBQXlFO1FBQ3pFLE1BQU0sY0FBYyxHQUFHLElBQUEsbUNBQXVCLEVBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvRSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFFRCxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLE1BQU0sRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQ2hDLGlHQUFpRztZQUNqRywwRkFBMEY7WUFDMUYsZ0dBQWdHO1lBQ2hHLDhGQUE4RjtZQUM5Riw0QkFBNEI7WUFDNUIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxhQUFhLEdBQUc7UUFDcEIsT0FBTyxFQUFFLGVBQWU7UUFDeEIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFFbkQsYUFBYTtRQUNiLFlBQVksRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFO1FBRWpELGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUM3RCxtQkFBbUI7S0FDcEIsQ0FBQztJQUVGLElBQUksR0FBdUIsQ0FBQztJQUM1QixJQUFJLFFBQTRCLENBQUM7SUFFakMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JELFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDM0UsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsTUFBa0Q7SUFDM0UsSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLGdCQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsaUJBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRSxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBSyxDQUFDLGNBQWMsQ0FBQyxJQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMxRyxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FDbEMsSUFBb0IsRUFDcEIsTUFFQztJQUVELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELE9BQU8sY0FBYztRQUNuQixDQUFDLENBQUMsZ0JBQUssQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDeEcsQ0FBQyxDQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQ2hDLEVBQWtDLEVBQ2xDLE1BR0MsRUFDRCxRQUFzQjtJQUV0QixNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQUssQ0FBQyxRQUFRLENBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0YsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsTUFBTSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUU5Qyx5Q0FBeUM7SUFDekMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQVUsRUFBRTtRQUN2QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLDhDQUE4QztZQUM5QyxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLGdCQUFLLENBQUMsMEJBQTBCLENBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUcsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxpRUFBaUU7WUFDakUsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxvQ0FBb0MsQ0FBQyxNQUF3QjtJQUNwRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxTQUFTLENBQUM7SUFDckYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3JCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkdBQTJHLENBQzVHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQW9CLEVBQUUsVUFBbUM7SUFDOUUsSUFBSSxDQUFDO1FBQ0gsVUFBVSxHQUFHLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3pELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3ZFLE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGdGQUFnRixDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pGLFFBQVEsRUFBRSxLQUFLO1lBQ2YsR0FBRyxxQkFBcUI7U0FDekIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLElBQW9CLEVBQ3BCLFFBQXNCO0lBRXRCLElBQUksV0FBVyxHQUF1QixTQUFTLENBQUM7SUFDaEQsSUFBSSxPQUFPLEdBQXVCLFNBQVMsQ0FBQztJQUM1QyxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5RCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELE1BQU0sa0JBQWtCLEdBQUcsSUFBQSx1REFBMEIsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUNoRSx3REFBd0Q7SUFDeEQsV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNyRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FBQyxJQUFvQixFQUFFLFFBQXNCO0lBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUEsOEJBQXNCLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsTUFBTSxjQUFjLEdBQTJDLEVBQUUsQ0FBQztJQUNsRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsa0JBQU0sQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBRTlDLGtIQUFrSDtZQUNsSCxNQUFNLE9BQU8sR0FBRyxrQkFBTSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsbUZBQW1GLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUcsQ0FBQztZQUVELHVGQUF1RjtZQUN2RixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakYsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRixDQUFDO1lBRUQsNkJBQTZCO1lBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsZUFBZSxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssZUFBZSxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUVELGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDakMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQzthQUNqRSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5Qix1RUFBdUU7UUFDdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsOENBQThDO1FBQzlDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxJQUFJLENBQUMsT0FBTyxlQUFlLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsSUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSTtZQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQzlCLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlGQUF5RixDQUFDLENBQUM7UUFDN0csQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLElBQW9CLEVBQ3BCLE1BR0MsRUFDRCxRQUFzQixFQUN0QixFQUFFLE1BQU0sR0FBRyxJQUFJLEtBQTJCLEVBQUU7SUFFNUMsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsUUFBUSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FDcEMsSUFBSSxFQUNKLHFCQUFxQixDQUFDLFdBQVcsRUFDakMsaUJBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQy9GLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLDZCQUE2QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCO1FBQzlDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUEseUJBQWEsRUFBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RixNQUFNLG9CQUFvQixHQUFHLDJCQUEyQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2RSwrQ0FBK0M7SUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsT0FBTyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sRUFBRSxHQUFHLGdCQUFLLENBQUMsMkJBQTJCLENBQVMsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3RyxPQUFPLFVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVkLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxHQUFHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQzVDLGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkYsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUM3QixFQUFrQyxFQUNsQyxNQUlDLEVBQ0QsUUFBc0I7SUFFdEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkQsTUFBTSxvQkFBb0IsR0FBRyx5QkFBeUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdFLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxlQUFlLEVBQUUsb0JBQW9CO1FBQ3JDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3hGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIyIH0gZnJvbSAnQGJpdGdvL3V0eG8tY29yZSc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSwgYmlwMzIgfSBmcm9tICdAYml0Z28vc2VjcDI1NmsxJztcbmltcG9ydCB7IGJpdGdvIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2NvcmUgZnJvbSAnQGJpdGdvL3V0eG8tY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQmlwMzIyTWVzc2FnZSB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHR5cGUgeyBPdXRwdXQsIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgZ2V0UGF5R29WZXJpZmljYXRpb25QdWJrZXkgfSBmcm9tICcuLi9nZXRQYXlHb1ZlcmlmaWNhdGlvblB1YmtleSc7XG5pbXBvcnQgeyB0b0JpcDMyVHJpcGxlIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IGdldE5ldHdvcmtGcm9tQ29pbk5hbWUsIFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuLy8gPT09PT0gVHJhbnNhY3Rpb24gRXhwbGFuYXRpb24gVHlwZSBEZWZpbml0aW9ucyA9PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0VXR4b1RyYW5zYWN0aW9uRXhwbGFuYXRpb248VEZlZSA9IHN0cmluZywgVENoYW5nZU91dHB1dCBleHRlbmRzIE91dHB1dCA9IE91dHB1dD5cbiAgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlLCBzdHJpbmc+IHtcbiAgLyoqIE5PVEU6IHRoaXMgYWN0dWFsbHkgb25seSBjYXB0dXJlcyBleHRlcm5hbCBvdXRwdXRzICovXG4gIG91dHB1dHM6IE91dHB1dFtdO1xuICBjaGFuZ2VPdXRwdXRzOiBUQ2hhbmdlT3V0cHV0W107XG4gIGN1c3RvbUNoYW5nZU91dHB1dHM/OiBUQ2hhbmdlT3V0cHV0W107XG4gIGN1c3RvbUNoYW5nZUFtb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogQklQMzIyIG1lc3NhZ2VzIGV4dHJhY3RlZCBmcm9tIHRoZSB0cmFuc2FjdGlvbiBpbnB1dHMuXG4gICAqIFRoZXNlIG1lc3NhZ2VzIGFyZSB1c2VkIGZvciB2ZXJpZnlpbmcgdGhlIHRyYW5zYWN0aW9uIGFnYWluc3QgdGhlIEJJUDMyMiBzdGFuZGFyZC5cbiAgICovXG4gIG1lc3NhZ2VzPzogQmlwMzIyTWVzc2FnZVtdO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgLSB0aGUgc2lnbmF0dXJlIGZpZWxkcyBhcmUgbm90IHZlcnkgdXNlZnVsICovXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldpdGhTaWduYXR1cmVzPFRGZWUgPSBzdHJpbmcsIFRDaGFuZ2VPdXRwdXQgZXh0ZW5kcyBPdXRwdXQgPSBPdXRwdXQ+XG4gIGV4dGVuZHMgQWJzdHJhY3RVdHhvVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjxURmVlLCBUQ2hhbmdlT3V0cHV0PiB7XG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVudXNlZCBvdXRzaWRlIG9mIHRlc3RzICovXG4gIGxvY2t0aW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgaW5wdXQgc2lnbmF0dXJlcyBwZXIgaW5wdXQuXG4gICAqIEBkZXByZWNhdGVkIC0gdGhpcyBpcyBub3QgdmVyeSB1c2VmdWwgd2l0aG91dCBrbm93aW5nIHdobyBzaWduZWQgZWFjaCBpbnB1dC5cbiAgICovXG4gIGlucHV0U2lnbmF0dXJlczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIEhpZ2hlc3QgaW5wdXQgc2lnbmF0dXJlIGNvdW50IGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQGRlcHJlY2F0ZWQgLSB0aGlzIGlzIG5vdCB2ZXJ5IHVzZWZ1bCB3aXRob3V0IGtub3dpbmcgd2hvIHNpZ25lZCBlYWNoIGlucHV0LlxuICAgKi9cbiAgc2lnbmF0dXJlczogbnVtYmVyO1xufVxuXG4vKiogRm9yIG91ciB3YXNtIGJhY2tlbmQsIHdlIGRvIG5vdCByZXR1cm4gdGhlIGRlcHJlY2F0ZWQgZmllbGRzLiBXZSBzZXQgVEZlZSB0byBzdHJpbmcgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldhc20gPSBBYnN0cmFjdFV0eG9UcmFuc2FjdGlvbkV4cGxhbmF0aW9uPHN0cmluZywgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQ+O1xuXG4vKiogV2hlbiBwYXJzaW5nIHRoZSBsZWdhY3kgdHJhbnNhY3Rpb24gZm9ybWF0LCB3ZSBjYW5ub3QgYWx3YXlzIGluZmVyIHRoZSBmZWUgc28gd2Ugc2V0IGl0IHRvIHN0cmluZyB8IHVuZGVmaW5lZCAqL1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJMZWdhY3kgPSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uV2l0aFNpZ25hdHVyZXM8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuLyoqIFdoZW4gcGFyc2luZyBhIFBTQlQsIHdlIGNhbiBpbmZlciB0aGUgZmVlIHNvIHdlIHNldCBURmVlIHRvIHN0cmluZy4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliUHNidCA9IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25XaXRoU2lnbmF0dXJlczxzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uRGVzY3JpcHRvciA9IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25XaXRoU2lnbmF0dXJlczxzdHJpbmcsIE91dHB1dD47XG5cbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPVxuICB8IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliTGVnYWN5XG4gIHwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJQc2J0XG4gIHwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbldhc207XG5cbmV4cG9ydCB0eXBlIENoYW5nZUFkZHJlc3NJbmZvID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiB0b0NoYW5nZU91dHB1dChcbiAgdHhPdXRwdXQ6IHV0eG9saWIuVHhPdXRwdXQ8bnVtYmVyIHwgYmlnaW50PixcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgY2hhbmdlSW5mbzogQ2hhbmdlQWRkcmVzc0luZm9bXSB8IHVuZGVmaW5lZFxuKTogRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQgfCB1bmRlZmluZWQge1xuICBpZiAoIWNoYW5nZUluZm8pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGFkZHJlc3MgPSB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCh0eE91dHB1dC5zY3JpcHQsIGNvaW5OYW1lKTtcbiAgY29uc3QgY2hhbmdlID0gY2hhbmdlSW5mby5maW5kKChjaGFuZ2UpID0+IGNoYW5nZS5hZGRyZXNzID09PSBhZGRyZXNzKTtcbiAgaWYgKCFjaGFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWRkcmVzcyxcbiAgICBhbW91bnQ6IHR4T3V0cHV0LnZhbHVlLnRvU3RyaW5nKCksXG4gICAgY2hhaW46IGNoYW5nZS5jaGFpbixcbiAgICBpbmRleDogY2hhbmdlLmluZGV4LFxuICAgIGV4dGVybmFsOiBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gb3V0cHV0U3VtKG91dHB1dHM6IHsgYW1vdW50OiBzdHJpbmcgfCBudW1iZXIgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgQmlnSW50KG91dHB1dC5hbW91bnQpLCBCaWdJbnQoMCkpO1xufVxuXG5mdW5jdGlvbiBleHBsYWluQ29tbW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBjaGFuZ2VJbmZvPzogQ2hhbmdlQWRkcmVzc0luZm9bXTtcbiAgICBjdXN0b21DaGFuZ2VJbmZvPzogQ2hhbmdlQWRkcmVzc0luZm9bXTtcbiAgICBmZWVJbmZvPzogc3RyaW5nO1xuICB9LFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pIHtcbiAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cyddO1xuICBjb25zdCBjaGFuZ2VPdXRwdXRzOiBGaXhlZFNjcmlwdFdhbGxldE91dHB1dFtdID0gW107XG4gIGNvbnN0IGN1c3RvbUNoYW5nZU91dHB1dHM6IEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0W10gPSBbXTtcbiAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzOiBPdXRwdXRbXSA9IFtdO1xuXG4gIGNvbnN0IHsgY2hhbmdlSW5mbywgY3VzdG9tQ2hhbmdlSW5mbyB9ID0gcGFyYW1zO1xuXG4gIHR4Lm91dHMuZm9yRWFjaCgoY3VycmVudE91dHB1dCkgPT4ge1xuICAgIC8vIFRyeSB0byBlbmNvZGUgdGhlIHNjcmlwdCBwdWJrZXkgd2l0aCBhbiBhZGRyZXNzLiBJZiBpdCBmYWlscywgdHJ5IHRvIHBhcnNlIGl0IGFzIGFuIE9QX1JFVFVSTiBvdXRwdXQgd2l0aCB0aGUgcHJlZml4LlxuICAgIC8vIElmIHRoYXQgZmFpbHMsIHRoZW4gaXQgaXMgYW4gdW5yZWNvZ25pemVkIHNjcmlwdFB1YmtleSBhbmQgc2hvdWxkIGZhaWxcbiAgICBjb25zdCBjdXJyZW50QWRkcmVzcyA9IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGN1cnJlbnRPdXRwdXQuc2NyaXB0LCBjb2luTmFtZSk7XG4gICAgY29uc3QgY3VycmVudEFtb3VudCA9IEJpZ0ludChjdXJyZW50T3V0cHV0LnZhbHVlKTtcblxuICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IHRvQ2hhbmdlT3V0cHV0KGN1cnJlbnRPdXRwdXQsIGNvaW5OYW1lLCBjaGFuZ2VJbmZvKTtcbiAgICBpZiAoY2hhbmdlT3V0cHV0KSB7XG4gICAgICBjaGFuZ2VPdXRwdXRzLnB1c2goY2hhbmdlT3V0cHV0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b21DaGFuZ2VPdXRwdXQgPSB0b0NoYW5nZU91dHB1dChjdXJyZW50T3V0cHV0LCBjb2luTmFtZSwgY3VzdG9tQ2hhbmdlSW5mbyk7XG4gICAgaWYgKGN1c3RvbUNoYW5nZU91dHB1dCkge1xuICAgICAgY3VzdG9tQ2hhbmdlT3V0cHV0cy5wdXNoKGN1c3RvbUNoYW5nZU91dHB1dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXh0ZXJuYWxPdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogY3VycmVudEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IGN1cnJlbnRBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgIC8vIElmIGNoYW5nZUluZm8gaGFzIGEgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtZWFucyB0aGF0IHRoZSBjaGFuZ2UgaW5mb3JtYXRpb25cbiAgICAgIC8vIHdhcyBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gYnV0IHRoZSBvdXRwdXQgd2FzIG5vdCBpZGVudGlmaWVkIGFzIGNoYW5nZS4gSW4gdGhpcyBjYXNlLFxuICAgICAgLy8gdGhlIG91dHB1dCBpcyBleHRlcm5hbCwgYW5kIHdlIGNhbiBzZXQgaXQgYXMgc28uIElmIGNoYW5nZUluZm8gaXMgdW5kZWZpbmVkLCBpdCBtZWFucyB3ZSB3ZXJlXG4gICAgICAvLyBnaXZlbiBubyBpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2Ugb3V0cHV0cywgc28gd2UgY2FuJ3QgZGV0ZXJtaW5lIGFueXRoaW5nIGFib3V0IHRoZSBvdXRwdXQsXG4gICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1bmRlZmluZWQuXG4gICAgICBleHRlcm5hbDogY2hhbmdlSW5mbyA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dERldGFpbHMgPSB7XG4gICAgb3V0cHV0czogZXh0ZXJuYWxPdXRwdXRzLFxuICAgIG91dHB1dEFtb3VudDogb3V0cHV0U3VtKGV4dGVybmFsT3V0cHV0cykudG9TdHJpbmcoKSxcblxuICAgIGNoYW5nZU91dHB1dHMsXG4gICAgY2hhbmdlQW1vdW50OiBvdXRwdXRTdW0oY2hhbmdlT3V0cHV0cykudG9TdHJpbmcoKSxcblxuICAgIGN1c3RvbUNoYW5nZUFtb3VudDogb3V0cHV0U3VtKGN1c3RvbUNoYW5nZU91dHB1dHMpLnRvU3RyaW5nKCksXG4gICAgY3VzdG9tQ2hhbmdlT3V0cHV0cyxcbiAgfTtcblxuICBsZXQgZmVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBsb2NrdGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChwYXJhbXMuZmVlSW5mbykge1xuICAgIGRpc3BsYXlPcmRlci5wdXNoKCdmZWUnKTtcbiAgICBmZWUgPSBwYXJhbXMuZmVlSW5mbztcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHR4LmxvY2t0aW1lKSAmJiB0eC5sb2NrdGltZSA+IDApIHtcbiAgICBkaXNwbGF5T3JkZXIucHVzaCgnbG9ja3RpbWUnKTtcbiAgICBsb2NrdGltZSA9IHR4LmxvY2t0aW1lO1xuICB9XG5cbiAgcmV0dXJuIHsgZGlzcGxheU9yZGVyLCBpZDogdHguZ2V0SWQoKSwgLi4ub3V0cHV0RGV0YWlscywgZmVlLCBsb2NrdGltZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXM6IHsgcHVicz86IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgc3RyaW5nW10gfSk6IGJpdGdvLlJvb3RXYWxsZXRLZXlzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHBhcmFtcy5wdWJzIGluc3RhbmNlb2YgYml0Z28uUm9vdFdhbGxldEtleXMpIHtcbiAgICByZXR1cm4gcGFyYW1zLnB1YnM7XG4gIH1cbiAgY29uc3Qga2V5cyA9IHBhcmFtcy5wdWJzPy5tYXAoKHhwdWIpID0+IGJpcDMyLmZyb21CYXNlNTgoeHB1YikpO1xuICByZXR1cm4ga2V5cyAmJiBrZXlzLmxlbmd0aCA9PT0gMyA/IG5ldyBiaXRnby5Sb290V2FsbGV0S2V5cyhrZXlzIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT4pIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRQc2J0SW5wdXRTaWduYXR1cmVzQ291bnQoXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgfVxuKSB7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0Um9vdFdhbGxldEtleXMocGFyYW1zKTtcbiAgcmV0dXJuIHJvb3RXYWxsZXRLZXlzXG4gICAgPyBiaXRnby5nZXRTaWduYXR1cmVWYWxpZGF0aW9uQXJyYXlQc2J0KHBzYnQsIHJvb3RXYWxsZXRLZXlzKS5tYXAoKHN2KSA9PiBzdlsxXS5maWx0ZXIoKHYpID0+IHYpLmxlbmd0aClcbiAgICA6IChBcnJheShwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCkgYXMgbnVtYmVyW10pLmZpbGwoMCk7XG59XG5cbmZ1bmN0aW9uIGdldFR4SW5wdXRTaWduYXR1cmVzQ291bnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBiaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHBhcmFtczoge1xuICAgIHR4SW5mbz86IHsgdW5zcGVudHM/OiBiaXRnby5VbnNwZW50PFROdW1iZXI+W10gfTtcbiAgICBwdWJzPzogYml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXTtcbiAgfSxcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZVxuKSB7XG4gIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKGNvaW5OYW1lKTtcbiAgY29uc3QgcHJldk91dHB1dHMgPSBwYXJhbXMudHhJbmZvPy51bnNwZW50cz8ubWFwKCh1KSA9PiBiaXRnby50b091dHB1dDxUTnVtYmVyPih1LCBuZXR3b3JrKSk7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0Um9vdFdhbGxldEtleXMocGFyYW1zKTtcbiAgY29uc3QgeyB1bnNwZW50cyA9IFtdIH0gPSBwYXJhbXMudHhJbmZvID8/IHt9O1xuXG4gIC8vIGdldCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgcGVyIGlucHV0XG4gIHJldHVybiB0eC5pbnMubWFwKChpbnB1dCwgaWR4KTogbnVtYmVyID0+IHtcbiAgICBpZiAodW5zcGVudHMubGVuZ3RoICE9PSB0eC5pbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YXRlYCk7XG4gICAgfVxuICAgIGlmICghcm9vdFdhbGxldEtleXMpIHtcbiAgICAgIC8vIG5vIHB1YiBrZXlzIG9yIGluY29ycmVjdCBudW1iZXIgb2YgcHViIGtleXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJpdGdvLnZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50PFROdW1iZXI+KHR4LCBpZHgsIHVuc3BlbnRzLCByb290V2FsbGV0S2V5cykuZmlsdGVyKCh2KSA9PiB2KS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCBhbmQgd2UgY2FuJ3QgdmFsaWRhdGUgdGhlIHNpZ25hdHVyZXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldENoYWluQW5kSW5kZXhGcm9tQmlwMzJEZXJpdmF0aW9ucyhvdXRwdXQ6IGJpdGdvLlBzYnRPdXRwdXQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbnMgPSBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uID8/IG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gPz8gdW5kZWZpbmVkO1xuICBpZiAoIWRlcml2YXRpb25zKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRocyA9IGRlcml2YXRpb25zLm1hcCgoZCkgPT4gZC5wYXRoKTtcbiAgaWYgKCFwYXRocyB8fCBwYXRocy5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDMgcGF0aHMgaW4gYmlwMzJEZXJpdmF0aW9uIG9yIHRhcEJpcDMyRGVyaXZhdGlvbicpO1xuICB9XG4gIGlmICghcGF0aHMuZXZlcnkoKHApID0+IHBhdGhzWzBdID09PSBwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYWxsIHBhdGhzIHRvIGJlIHRoZSBzYW1lJyk7XG4gIH1cblxuICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgaWYgKHBhdGhzWzBdICE9PSBwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdVbmFibGUgdG8gZ2V0IGEgc2luZ2xlIGNoYWluIGFuZCBpbmRleCBvbiB0aGUgb3V0cHV0IGJlY2F1c2UgdGhlcmUgYXJlIGRpZmZlcmVudCBwYXRocyBmb3IgZGlmZmVyZW50IGtleXMnXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmdldENoYWluQW5kSW5kZXhGcm9tUGF0aChwYXRoc1swXSk7XG59XG5cbmZ1bmN0aW9uIGdldENoYW5nZUluZm8ocHNidDogYml0Z28uVXR4b1BzYnQsIHdhbGxldEtleXM/OiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTogQ2hhbmdlQWRkcmVzc0luZm9bXSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgd2FsbGV0S2V5cyA9IHdhbGxldEtleXMgPz8gdXR4b2xpYi5iaXRnby5nZXRTb3J0ZWRSb290Tm9kZXMocHNidCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRXYWxsZXRPdXRwdXRJbmRpY2VzKHBzYnQsIHdhbGxldEtleXMpLm1hcCgoaSkgPT4ge1xuICAgIGNvbnN0IGRlcml2YXRpb25JbmZvcm1hdGlvbiA9IGdldENoYWluQW5kSW5kZXhGcm9tQmlwMzJEZXJpdmF0aW9ucyhwc2J0LmRhdGEub3V0cHV0c1tpXSk7XG4gICAgaWYgKCFkZXJpdmF0aW9uSW5mb3JtYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgZGVyaXZhdGlvbiBpbmZvcm1hdGlvbiBvbiBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChwc2J0LnR4T3V0cHV0c1tpXS5zY3JpcHQsIHBzYnQubmV0d29yayksXG4gICAgICBleHRlcm5hbDogZmFsc2UsXG4gICAgICAuLi5kZXJpdmF0aW9uSW5mb3JtYXRpb24sXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBQYXlHbyBhZGRyZXNzIHByb29mIGluZm9ybWF0aW9uIGZyb20gdGhlIFBTQlQgaWYgcHJlc2VudFxuICogQHJldHVybnMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIFBheUdvIHByb29mLCBpbmNsdWRpbmcgdGhlIG91dHB1dCBpbmRleCBhbmQgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBnZXRQYXlHb1ZlcmlmaWNhdGlvbkluZm8oXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lXG4pOiB7IG91dHB1dEluZGV4OiBudW1iZXI7IHZlcmlmaWNhdGlvblB1YmtleTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBsZXQgb3V0cHV0SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbGV0IGFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgLy8gQ2hlY2sgaWYgdGhpcyBQU0JUIGhhcyBhbnkgUGF5R28gYWRkcmVzcyBwcm9vZnNcbiAgaWYgKCF1dHhvY29yZS5wYXlnby5wc2J0T3V0cHV0SW5jbHVkZXNQYXlnb0FkZHJlc3NQcm9vZihwc2J0KSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBUaGlzIHB1bGxzIHRoZSBwdWJrZXkgZGVwZW5kaW5nIG9uIGdpdmVuIG5ldHdvcmtcbiAgY29uc3QgdmVyaWZpY2F0aW9uUHVia2V5ID0gZ2V0UGF5R29WZXJpZmljYXRpb25QdWJrZXkoY29pbk5hbWUpO1xuICAvLyBmaW5kIHdoaWNoIG91dHB1dCBpbmRleCB0aGF0IGNvbnRhaW5zIHRoZSBQYXlHbyBwcm9vZlxuICBvdXRwdXRJbmRleCA9IHV0eG9jb3JlLnBheWdvLmdldFBheUdvQWRkcmVzc1Byb29mT3V0cHV0SW5kZXgocHNidCk7XG4gIGlmIChvdXRwdXRJbmRleCA9PT0gdW5kZWZpbmVkIHx8ICF2ZXJpZmljYXRpb25QdWJrZXkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKGNvaW5OYW1lKTtcbiAgY29uc3Qgb3V0cHV0ID0gcHNidC50eE91dHB1dHNbb3V0cHV0SW5kZXhdO1xuICBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQob3V0cHV0LnNjcmlwdCwgbmV0d29yayk7XG4gIGlmICghYWRkcmVzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBkZXJpdmUgYWRkcmVzcyAke2FkZHJlc3N9IFBheSBHbyBBdHRlc3RhdGlvbi5gKTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dEluZGV4LCB2ZXJpZmljYXRpb25QdWJrZXkgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBCSVAzMjIgbWVzc2FnZXMgYW5kIGFkZHJlc3NlcyBmcm9tIHRoZSBQU0JUIGlucHV0cyBhbmQgcGVyZm9ybVxuICogdmVyaWZpY2F0aW9uIG9uIHRoZSB0cmFuc2FjdGlvbiB0byBlbnN1cmUgdGhhdCBpdCBtZWV0cyB0aGUgQklQMzIyIHJlcXVpcmVtZW50cy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgbWVzc2FnZSBhbmQgYWRkcmVzcyBmb3IgZWFjaCBpbnB1dCxcbiAqICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBubyBCSVAzMjIgbWVzc2FnZXMgYXJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBnZXRCaXAzMjJNZXNzYWdlSW5mb0FuZFZlcmlmeShwc2J0OiBiaXRnby5VdHhvUHNidCwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJpcDMyMk1lc3NhZ2VbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrRnJvbUNvaW5OYW1lKGNvaW5OYW1lKTtcbiAgY29uc3QgYmlwMzIyTWVzc2FnZXM6IHsgbWVzc2FnZTogc3RyaW5nOyBhZGRyZXNzOiBzdHJpbmcgfVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBiaXAzMjIuZ2V0QmlwMzIyUHJvb2ZNZXNzYWdlQXRJbmRleChwc2J0LCBpKTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgY29uc3QgaW5wdXQgPSBwc2J0LmRhdGEuaW5wdXRzW2ldO1xuICAgICAgaWYgKCFpbnB1dC53aXRuZXNzVXR4bykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgd2l0bmVzc1V0eG8gZm9yIGlucHV0IGluZGV4ICR7aX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5wdXQubm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG5vbldpdG5lc3NVdHhvIGZvciBpbnB1dCBpbmRleCAke2l9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY3JpcHRQdWJLZXkgPSBpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQ7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0b1NwZW5kIHRyYW5zYWN0aW9uIGNhbiBiZSByZWNyZWF0ZWQgaW4gdGhlIFBTQlQgYW5kIGlzIGVuY29kZWQgY29ycmVjdGx5IGluIHRoZSBub25XaXRuZXNzVXR4b1xuICAgICAgY29uc3QgdG9TcGVuZCA9IGJpcDMyMi5idWlsZFRvU3BlbmRUcmFuc2FjdGlvbihzY3JpcHRQdWJLZXksIG1lc3NhZ2UpO1xuICAgICAgY29uc3QgdG9TcGVuZEI2NCA9IHRvU3BlbmQudG9CdWZmZXIoKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBpZiAoaW5wdXQubm9uV2l0bmVzc1V0eG8udG9TdHJpbmcoJ2Jhc2U2NCcpICE9PSB0b1NwZW5kQjY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm9uLXdpdG5lc3MgVVRYTyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgdG9TcGVuZCB0cmFuc2FjdGlvbiBhdCBpbnB1dCBpbmRleCAke2l9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0b1NwZW5kIHRyYW5zYWN0aW9uIElEIG1hdGNoZXMgdGhlIGlucHV0J3MgcmVmZXJlbmNlZCB0cmFuc2FjdGlvbiBJRFxuICAgICAgaWYgKHRvU3BlbmQuZ2V0SWQoKSAhPT0gdXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KHBzYnQudHhJbnB1dHNbaV0pLnR4aWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb1NwZW5kIHRyYW5zYWN0aW9uIElEIGRvZXMgbm90IG1hdGNoIHRoZSBpbnB1dCBhdCBpbmRleCAke2l9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgaW5wdXQgc3BlY2lmaWNzXG4gICAgICBpZiAocHNidC50eElucHV0c1tpXS5zZXF1ZW5jZSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc2VxdWVuY2UgbnVtYmVyIGF0IGlucHV0IGluZGV4ICR7aX06ICR7cHNidC50eElucHV0c1tpXS5zZXF1ZW5jZX0uIEV4cGVjdGVkIDAuYCk7XG4gICAgICB9XG4gICAgICBpZiAocHNidC50eElucHV0c1tpXS5pbmRleCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQgaW5kZXggYXQgcG9zaXRpb24gJHtpfTogJHtwc2J0LnR4SW5wdXRzW2ldLmluZGV4fS4gRXhwZWN0ZWQgMC5gKTtcbiAgICAgIH1cblxuICAgICAgYmlwMzIyTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UudG9TdHJpbmcoJ3V0ZjgnKSxcbiAgICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0UHViS2V5LCBuZXR3b3JrKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChiaXAzMjJNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgYSBCSVAzMjIgbWVzc2FnZSBpbiBhbnkgaW5wdXQsIGFsbCBpbnB1dHMgbXVzdCBoYXZlIG9uZS5cbiAgICBpZiAoYmlwMzIyTWVzc2FnZXMubGVuZ3RoICE9PSBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvbnNpc3RlbnQgQklQMzIyIG1lc3NhZ2VzIGFjcm9zcyBpbnB1dHMuJyk7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpY3MgZm9yIEJJUDMyMlxuICAgIGlmIChwc2J0LnZlcnNpb24gIT09IDAgJiYgcHNidC52ZXJzaW9uICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIFBTQlQgdmVyc2lvbiBmb3IgQklQMzIyOiAke3BzYnQudmVyc2lvbn0uIEV4cGVjdGVkIDAgYCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHBzYnQuZGF0YS5vdXRwdXRzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgcHNidC50eE91dHB1dHNbMF0uc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSAhPT0gJzZhJyB8fFxuICAgICAgcHNidC50eE91dHB1dHNbMF0udmFsdWUgIT09IDBuXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgUFNCVCBvdXRwdXRzIGZvciBCSVAzMjIuIEV4cGVjdGVkIGV4YWN0bHkgb25lIE9QX1JFVFVSTiBvdXRwdXQgd2l0aCB6ZXJvIHZhbHVlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBiaXAzMjJNZXNzYWdlcztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGVjb21wb3NlIGEgcmF3IHBzYnQgaW50byB1c2VmdWwgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIHRvdGFsIGFtb3VudHMsXG4gKiBjaGFuZ2UgYW1vdW50cywgYW5kIHRyYW5zYWN0aW9uIG91dHB1dHMuXG4gKlxuICogQHBhcmFtIHBzYnQge2JpdGdvLlV0eG9Qc2J0fSBUaGUgUFNCVCB0byBleHBsYWluXG4gKiBAcGFyYW0gcHVicyB7Yml0Z28uUm9vdFdhbGxldEtleXMgfCBzdHJpbmdbXX0gVGhlIHB1YmxpYyBrZXlzIHRvIHVzZSBmb3IgdGhlIGV4cGxhbmF0aW9uXG4gKiBAcGFyYW0gY29pbk5hbWUge1V0eG9Db2luTmFtZX0gVGhlIGNvaW4gbmFtZSB0byB1c2UgZm9yIHRoZSBleHBsYW5hdGlvblxuICogQHBhcmFtIHN0cmljdCB7Ym9vbGVhbn0gV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgUGF5R28gYWRkcmVzcyBwcm9vZiBpcyBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluUHNidChcbiAgcHNidDogYml0Z28uVXR4b1BzYnQsXG4gIHBhcmFtczoge1xuICAgIHB1YnM/OiBiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdO1xuICAgIGN1c3RvbUNoYW5nZVB1YnM/OiBiaXRnby5Sb290V2FsbGV0S2V5cyB8IHN0cmluZ1tdO1xuICB9LFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICB7IHN0cmljdCA9IHRydWUgfTogeyBzdHJpY3Q/OiBib29sZWFuIH0gPSB7fVxuKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblV0eG9saWJQc2J0IHtcbiAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmtGcm9tQ29pbk5hbWUoY29pbk5hbWUpO1xuICBjb25zdCBwYXlHb1ZlcmlmaWNhdGlvbkluZm8gPSBnZXRQYXlHb1ZlcmlmaWNhdGlvbkluZm8ocHNidCwgY29pbk5hbWUpO1xuICBpZiAocGF5R29WZXJpZmljYXRpb25JbmZvKSB7XG4gICAgdHJ5IHtcbiAgICAgIHV0eG9jb3JlLnBheWdvLnZlcmlmeVBheUdvQWRkcmVzc1Byb29mKFxuICAgICAgICBwc2J0LFxuICAgICAgICBwYXlHb1ZlcmlmaWNhdGlvbkluZm8ub3V0cHV0SW5kZXgsXG4gICAgICAgIGJpcDMyLmZyb21CYXNlNTgocGF5R29WZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvblB1YmtleSwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKS5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXNzYWdlcyA9IGdldEJpcDMyMk1lc3NhZ2VJbmZvQW5kVmVyaWZ5KHBzYnQsIGNvaW5OYW1lKTtcbiAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm8ocHNidCk7XG4gIGNvbnN0IGN1c3RvbUNoYW5nZUluZm8gPSBwYXJhbXMuY3VzdG9tQ2hhbmdlUHVic1xuICAgID8gZ2V0Q2hhbmdlSW5mbyhwc2J0LCB0b0JpcDMyVHJpcGxlKHBhcmFtcy5jdXN0b21DaGFuZ2VQdWJzKSlcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcbiAgY29uc3QgY29tbW9uID0gZXhwbGFpbkNvbW1vbih0eCwgeyAuLi5wYXJhbXMsIGNoYW5nZUluZm8sIGN1c3RvbUNoYW5nZUluZm8gfSwgY29pbk5hbWUpO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFBzYnRJbnB1dFNpZ25hdHVyZXNDb3VudChwc2J0LCBwYXJhbXMpO1xuXG4gIC8vIFNldCBmZWUgZnJvbSBzdWJ0cmFjdGluZyBpbnB1dHMgZnJvbSBvdXRwdXRzXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHBzYnQudHhPdXRwdXRzLnJlZHVjZSgoY3VtdWxhdGl2ZSwgY3VycikgPT4gY3VtdWxhdGl2ZSArIEJpZ0ludChjdXJyLnZhbHVlKSwgQmlnSW50KDApKTtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSBwc2J0LnR4SW5wdXRzLnJlZHVjZSgoY3VtdWxhdGl2ZSwgdHhJbnB1dCwgaSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwc2J0LmRhdGEuaW5wdXRzW2ldO1xuICAgIGlmIChkYXRhLndpdG5lc3NVdHhvKSB7XG4gICAgICByZXR1cm4gY3VtdWxhdGl2ZSArIEJpZ0ludChkYXRhLndpdG5lc3NVdHhvLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEubm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgIGNvbnN0IHR4ID0gYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPGJpZ2ludD4oZGF0YS5ub25XaXRuZXNzVXR4bywgbmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KTtcbiAgICAgIHJldHVybiBjdW11bGF0aXZlICsgQmlnSW50KHR4Lm91dHNbdHhJbnB1dC5pbmRleF0udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHZhbHVlIG9uIGlucHV0Jyk7XG4gICAgfVxuICB9LCBCaWdJbnQoMCkpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGZlZTogKGlucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50KS50b1N0cmluZygpLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICAgIG1lc3NhZ2VzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkxlZ2FjeVR4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIGNoYW5nZUluZm8/OiB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gIH0sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25VdHhvbGliTGVnYWN5IHtcbiAgY29uc3QgY29tbW9uID0gZXhwbGFpbkNvbW1vbih0eCwgcGFyYW1zLCBjb2luTmFtZSk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlc0NvdW50ID0gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudCh0eCwgcGFyYW1zLCBjb2luTmFtZSk7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICB9O1xufVxuIl19
|
|
@@ -165,7 +165,7 @@ async function parseTransaction(coin, params) {
|
|
|
165
165
|
const changeOutputs = lodash_1.default.filter(allOutputDetails, { external: false });
|
|
166
166
|
function toComparableOutputsWithExternal(outputs) {
|
|
167
167
|
return outputs.map((output) => ({
|
|
168
|
-
script: (0, recipient_1.fromExtendedAddressFormatToScript)(output.address, coin.
|
|
168
|
+
script: (0, recipient_1.fromExtendedAddressFormatToScript)(output.address, coin.name),
|
|
169
169
|
value: output.amount === 'max' ? 'max' : BigInt(output.amount),
|
|
170
170
|
external: output.external,
|
|
171
171
|
}));
|
|
@@ -193,7 +193,7 @@ async function parseTransaction(coin, params) {
|
|
|
193
193
|
const implicitExternalSpendAmount = utxolib.bitgo.toTNumber(implicitExternalOutputs.reduce((sum, o) => sum + BigInt(o.value), BigInt(0)), coin.amountType);
|
|
194
194
|
function toOutputs(outputs) {
|
|
195
195
|
return outputs.map((output) => ({
|
|
196
|
-
address: (0, recipient_1.toExtendedAddressFormat)(output.script, coin.
|
|
196
|
+
address: (0, recipient_1.toExtendedAddressFormat)(output.script, coin.name),
|
|
197
197
|
amount: output.value.toString(),
|
|
198
198
|
external: output.external,
|
|
199
199
|
}));
|
|
@@ -212,4 +212,4 @@ async function parseTransaction(coin, params) {
|
|
|
212
212
|
customChange,
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEVBLDRDQTBLQztBQXRQRCxvREFBNEI7QUFFNUIsb0RBQXVCO0FBRXZCLHlEQUEyQztBQUkzQywrQ0FBdUg7QUFDdkgsMERBQXlFO0FBQ3pFLDRDQUEwRjtBQUcxRiwrQ0FBaUU7QUFNakUsS0FBSyxVQUFVLG1CQUFtQixDQUNoQyxJQUFzQixFQUN0QixNQUF3QztJQUV4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVwQyxJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFCLElBQUEsZ0JBQU0sRUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDL0MsQ0FBQyxNQUFrRSxFQUFFLEVBQUU7UUFDckUsbUVBQW1FO1FBQ25FLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUNGLENBQUM7SUFFRixp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QUEyQjtRQUMzQiwyQkFBMkI7UUFDM0IseUNBQXlDO1FBQ3pDLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJpcGxlLCBWZXJpZmljYXRpb25PcHRpb25zLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXR4b0NvaW4sIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgdHlwZSB7IEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0LCBPdXRwdXQsIFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZmV0Y2hLZXljaGFpbnMsIGdldEtleVNpZ25hdHVyZXMsIHRvS2V5Y2hhaW5UcmlwbGUsIFV0eG9LZXljaGFpbiwgVXR4b05hbWVkS2V5Y2hhaW5zIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IENvbXBhcmFibGVPdXRwdXQsIG91dHB1dERpZmZlcmVuY2UgfSBmcm9tICcuLi9vdXRwdXREaWZmZXJlbmNlJztcbmltcG9ydCB7IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdCwgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDdXN0b21DaGFuZ2VPcHRpb25zLCBwYXJzZU91dHB1dCB9IGZyb20gJy4vcGFyc2VPdXRwdXQnO1xuXG5leHBvcnQgdHlwZSBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPFRWYWx1ZT4gPSBDb21wYXJhYmxlT3V0cHV0PFRWYWx1ZT4gJiB7XG4gIGV4dGVybmFsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VSYmZUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB3YWxsZXQgfSA9IHBhcmFtcztcblxuICBhc3NlcnQodHhQYXJhbXMucmJmVHhJZHMpO1xuICBhc3NlcnQodHhQYXJhbXMucmJmVHhJZHMubGVuZ3RoID09PSAxKTtcblxuICBjb25zdCB0eFRvQmVSZXBsYWNlZCA9IGF3YWl0IHdhbGxldC5nZXRUcmFuc2FjdGlvbih7IHR4SGFzaDogdHhQYXJhbXMucmJmVHhJZHNbMF0sIGluY2x1ZGVSYmY6IHRydWUgfSk7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSB0eFRvQmVSZXBsYWNlZC5vdXRwdXRzLmZsYXRNYXAoXG4gICAgKG91dHB1dDogeyB2YWx1ZVN0cmluZzogc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nOyB3YWxsZXQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgLy8gRm9yIHNlbGYtc2VuZHMsIHRoZSB3YWxsZXRJZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB3YWxsZXQncyBpZFxuICAgICAgaWYgKG91dHB1dC53YWxsZXQgPT09IHdhbGxldC5pZCgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbY29pbi50b0Nhbm9uaWNhbFRyYW5zYWN0aW9uUmVjaXBpZW50KG91dHB1dCldO1xuICAgIH1cbiAgKTtcblxuICAvLyBSZWN1cnNlIGludG8gcGFyc2VUcmFuc2FjdGlvbiB3aXRoIHRoZSBkZXJpdmVkIHJlY2lwaWVudHMgYW5kIHdpdGhvdXQgcmJmVHhJZHNcbiAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24oY29pbiwge1xuICAgIC4uLnBhcmFtcyxcbiAgICB0eFBhcmFtczoge1xuICAgICAgLi4udHhQYXJhbXMsXG4gICAgICByZWNpcGllbnRzLFxuICAgICAgcmJmVHhJZHM6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9FeHBlY3RlZE91dHB1dHMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHR4UGFyYW1zOiB7XG4gICAgcmVjaXBpZW50cz86IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICB9XG4pOiBPdXRwdXRbXSB7XG4gIC8vIHZlcmlmeSB0aGF0IGVhY2ggcmVjaXBpZW50IGZyb20gdHhQYXJhbXMgaGFzIHRoZWlyIG93biBvdXRwdXRcbiAgY29uc3QgZXhwZWN0ZWRPdXRwdXRzID0gKHR4UGFyYW1zLnJlY2lwaWVudHMgPz8gW10pLmZsYXRNYXAoKG91dHB1dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3V0cHV0LmFtb3VudC50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IHplcm8gYW1vdW50cyBhbGxvd2VkIGZvciBub24tZW5jb2RlYWJsZSBzY3JpcHRQdWJrZXlzOiAke291dHB1dH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbb3V0cHV0XTtcbiAgICB9XG4gICAgcmV0dXJuIFt7IC4uLm91dHB1dCwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSB9XTtcbiAgfSk7XG4gIGlmICh0eFBhcmFtcy5hbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyAmJiB0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzKSB7XG4gICAgLy8gd2hlbiBhbiBleHRlcm5hbCBjaGFuZ2UgYWRkcmVzcyBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgY291bnQgYWxsIG91dHB1dHMgZ29pbmcgdG93YXJkcyB0aGF0XG4gICAgLy8gYWRkcmVzcyBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0cyAocmVnYXJkbGVzcyBvZiB0aGUgb3V0cHV0IGFtb3VudClcbiAgICBleHBlY3RlZE91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzKSwgYW1vdW50OiAnbWF4JyB9KTtcbiAgfVxuICByZXR1cm4gZXhwZWN0ZWRPdXRwdXRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiA9IHt9LCByZXFJZCB9ID0gcGFyYW1zO1xuXG4gIC8vIEJyYW5jaCBvZmYgZWFybHkgZm9yIFJCRiB0cmFuc2FjdGlvbnNcbiAgaWYgKHR4UGFyYW1zLnJiZlR4SWRzKSB7XG4gICAgcmV0dXJuIHBhcnNlUmJmVHJhbnNhY3Rpb24oY29pbiwgcGFyYW1zKTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZCh2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpICYmICFfLmlzQm9vbGVhbih2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgfVxuICBjb25zdCBkaXNhYmxlTmV0d29ya2luZyA9IHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZztcblxuICAvLyBvYnRhaW4gdGhlIGtleWNoYWlucyBhbmQga2V5IHNpZ25hdHVyZXNcbiAgbGV0IGtleWNoYWluczogVXR4b05hbWVkS2V5Y2hhaW5zIHwgVmVyaWZpY2F0aW9uT3B0aW9uc1sna2V5Y2hhaW5zJ10gfCB1bmRlZmluZWQgPSB2ZXJpZmljYXRpb24ua2V5Y2hhaW5zO1xuICBpZiAoIWtleWNoYWlucykge1xuICAgIGlmIChkaXNhYmxlTmV0d29ya2luZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmV0Y2gga2V5Y2hhaW5zIHdpdGhvdXQgbmV0d29ya2luZycpO1xuICAgIH1cbiAgICBrZXljaGFpbnMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyhjb2luLCB3YWxsZXQsIHJlcUlkKTtcbiAgfVxuXG4gIGlmICghVXR4b05hbWVkS2V5Y2hhaW5zLmlzKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQga2V5Y2hhaW5zJyk7XG4gIH1cblxuICBjb25zdCBrZXljaGFpbkFycmF5OiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkLnR4SGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eFByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZE91dHB1dHMgPSB0b0V4cGVjdGVkT3V0cHV0cyhjb2luLCB0eFBhcmFtcyk7XG5cbiAgLy8gZ2V0IHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgY3VzdG9tIGNoYW5nZSB3YWxsZXQgaWYgbmVlZGVkXG4gIGxldCBjdXN0b21DaGFuZ2U6IEN1c3RvbUNoYW5nZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQgPSB1bmRlZmluZWQgfSA9IHdhbGxldC5jb2luU3BlY2lmaWMoKSB8fCB7fTtcbiAgaWYgKGN1c3RvbUNoYW5nZVdhbGxldElkKSB7XG4gICAgLy8gZmV0Y2gga2V5Y2hhaW5zIGZyb20gY3VzdG9tIGNoYW5nZSB3YWxsZXQgZm9yIGRlcml2aW5nIGFkZHJlc3Nlcy5cbiAgICAvLyBUaGVzZSBrZXljaGFpbnMgc2hvdWxkIGJlIHNpZ25lZCBhbmQgdGhpcyBzaG91bGQgYmUgdmVyaWZpZWQgaW4gdmVyaWZ5VHJhbnNhY3Rpb25cbiAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzID0gd2FsbGV0Ll93YWxsZXQuY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcztcbiAgICBjb25zdCBjdXN0b21DaGFuZ2VXYWxsZXQ6IFdhbGxldCA9IGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiBjdXN0b21DaGFuZ2VXYWxsZXRJZCB9KTtcbiAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXlzID0gYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgY3VzdG9tQ2hhbmdlV2FsbGV0LCByZXFJZCk7XG5cbiAgICBpZiAoIWN1c3RvbUNoYW5nZUtleXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGZldGNoIGtleWNoYWlucyBmb3IgY3VzdG9tIGNoYW5nZSB3YWxsZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tQ2hhbmdlS2V5cy51c2VyICYmIGN1c3RvbUNoYW5nZUtleXMuYmFja3VwICYmIGN1c3RvbUNoYW5nZUtleXMuYml0Z28gJiYgY3VzdG9tQ2hhbmdlV2FsbGV0KSB7XG4gICAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXljaGFpbnM6IFRyaXBsZTxVdHhvS2V5Y2hhaW4+ID0gW1xuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLnVzZXIsXG4gICAgICAgIGN1c3RvbUNoYW5nZUtleXMuYmFja3VwLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvLFxuICAgICAgXTtcblxuICAgICAgY3VzdG9tQ2hhbmdlID0ge1xuICAgICAgICBrZXlzOiBjdXN0b21DaGFuZ2VLZXljaGFpbnMsXG4gICAgICAgIHNpZ25hdHVyZXM6IFtjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIsIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJpdGdvXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gb2J0YWluIGFsbCBvdXRwdXRzXG4gIGNvbnN0IGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0gYXdhaXQgY29pbi5leHBsYWluVHJhbnNhY3Rpb248VE51bWJlcj4oe1xuICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgIHR4SW5mbzogdHhQcmVidWlsZC50eEluZm8sXG4gICAgcHViczoga2V5Y2hhaW5BcnJheS5tYXAoKGspID0+IGsucHViKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgfSk7XG5cbiAgY29uc3QgYWxsT3V0cHV0cyA9IFsuLi5leHBsYW5hdGlvbi5vdXRwdXRzLCAuLi5leHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzXTtcblxuICAvKipcbiAgICogTG9vcCB0aHJvdWdoIGFsbCB0aGUgb3V0cHV0cyBhbmQgY2xhc3NpZnkgZWFjaCBvZiB0aGVtIGFzIGVpdGhlciBpbnRlcm5hbCBzcGVuZHNcbiAgICogb3IgZXh0ZXJuYWwgc3BlbmRzIGJ5IHNldHRpbmcgdGhlIFwiZXh0ZXJuYWxcIiBwcm9wZXJ0eSB0byB0cnVlIG9yIGZhbHNlIG9uIHRoZSBvdXRwdXQgb2JqZWN0LlxuICAgKi9cbiAgY29uc3QgYWxsT3V0cHV0RGV0YWlsczogT3V0cHV0W10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBhbGxPdXRwdXRzLm1hcCgoY3VycmVudE91dHB1dCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlT3V0cHV0KHtcbiAgICAgICAgY3VycmVudE91dHB1dCxcbiAgICAgICAgY29pbixcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICBrZXljaGFpbkFycmF5OiB0b0tleWNoYWluVHJpcGxlKGtleWNoYWlucyksXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBleHBlY3RlZE91dHB1dHMsXG4gICAgICAgICAgY2hhbmdlQWRkcmVzczogdHhQYXJhbXMuY2hhbmdlQWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgIH0pXG4gICk7XG5cbiAgY29uc3QgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24gPSBhbGxPdXRwdXREZXRhaWxzLnNvbWUoXG4gICAgKG91dHB1dCkgPT4gKG91dHB1dCBhcyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCk/Lm5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uXG4gICk7XG5cbiAgY29uc3QgY2hhbmdlT3V0cHV0cyA9IF8uZmlsdGVyKGFsbE91dHB1dERldGFpbHMsIHsgZXh0ZXJuYWw6IGZhbHNlIH0pO1xuXG4gIGZ1bmN0aW9uIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwob3V0cHV0czogT3V0cHV0W10pOiBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPGJpZ2ludCB8ICdtYXgnPltdIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIHNjcmlwdDogZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KG91dHB1dC5hZGRyZXNzLCBjb2luLm5ldHdvcmspLFxuICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiAoQmlnSW50KG91dHB1dC5hbW91bnQpIGFzIGJpZ2ludCB8ICdtYXgnKSxcbiAgICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gICAgfSkpO1xuICB9XG5cbiAgY29uc3QgbWlzc2luZ091dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKFxuICAgIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoZXhwZWN0ZWRPdXRwdXRzKSxcbiAgICB0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dHMpXG4gICk7XG5cbiAgY29uc3QgaW1wbGljaXRPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZShcbiAgICB0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dERldGFpbHMpLFxuICAgIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoZXhwZWN0ZWRPdXRwdXRzKVxuICApO1xuICBjb25zdCBleHBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksIGltcGxpY2l0T3V0cHV0cyk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgbm9uLXdhbGxldCBvdXRwdXRzIHRoYXQgaGFkIGJlZW4gb3JpZ2luYWxseSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiByZWNpcGllbnRzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gZXhwbGljaXRPdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuZXh0ZXJuYWwpO1xuICAvLyB0aGlzIGlzIHRoZSBzdW0gb2YgYWxsIHRoZSBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG5vbi13YWxsZXQgb3V0cHV0IHZhbHVlc1xuICBjb25zdCBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPSB1dHhvbGliLmJpdGdvLnRvVE51bWJlcjxUTnVtYmVyPihcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0cy5yZWR1Y2UoKHN1bTogYmlnaW50LCBvKSA9PiBzdW0gKyBCaWdJbnQoby52YWx1ZSksIEJpZ0ludCgwKSkgYXMgYmlnaW50LFxuICAgIGNvaW4uYW1vdW50VHlwZVxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsY3VsYXRpb24gb2YgdGhlIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudCBwZXJ0YWlucyB0byB2ZXJpZnlpbmcgdGhlIHBheS1hcy15b3UtZ28tZmVlIEJpdEdvXG4gICAqIGF1dG9tYXRpY2FsbHkgYXBwbGllZCB0byB0cmFuc2FjdGlvbnMgc2VuZGluZyBtb25leSBvdXQgb2YgdGhlIHdhbGxldC4gVGhlIGxvZ2ljIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmRcbiAgICogaW4gdGhhdCB3ZSBjb21wYXJlIHRoZSBleHRlcm5hbCBzcGVuZCBhbW91bnQgdGhhdCB3YXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgYnkgdGhlIHVzZXIgdG8gdGhlIHBvcnRpb25cbiAgICogdGhhdCB3YXMgc3BlY2lmaWVkIGltcGxpY2l0bHkuIFRvIHByb3RlY3QgY3VzdG9tZXJzIGZyb20gcGVvcGxlIHRhbXBlcmluZyB3aXRoIHRoZSB0cmFuc2FjdGlvbiBvdXRwdXRzLCB3ZVxuICAgKiBkZWZpbmUgYSB0aHJlc2hvbGQgZm9yIHRoZSBtYXhpbXVtIHBlcmNlbnRhZ2Ugb2YgdGhlIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGluIHJlbGF0aW9uIHRvIHRoZSBleHBsaWNpdFxuICAgKiBleHRlcm5hbCBzcGVuZC5cbiAgICpcbiAgICogVGhpcyBoYXMgYmVjb21lIG9ic29sZXRlIHdpdGggdGhlIGludG9kdWN0aW9uIG9mIGB1dHhvY29yZS5wYXlnby52ZXJpZnlQYXlHb0FkZHJlc3NQcm9vZigpYC5cbiAgICovXG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBleHRyYSBhZGRyZXNzZXMgYXJlIGNoYW5nZSBhZGRyZXNzZXNcbiAgLy8gZ2V0IGFsbCB0aGUgYWRkaXRpb25hbCBleHRlcm5hbCBvdXRwdXRzIHRoZSBzZXJ2ZXIgYWRkZWQgYW5kIGNhbGN1bGF0ZSB0aGVpciB2YWx1ZXNcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMgPSBpbXBsaWNpdE91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5leHRlcm5hbCk7XG4gIGNvbnN0IGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA9IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKSBhcyBiaWdpbnQsXG4gICAgY29pbi5hbW91bnRUeXBlXG4gICk7XG5cbiAgZnVuY3Rpb24gdG9PdXRwdXRzKG91dHB1dHM6IENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8YmlnaW50IHwgJ21heCc+W10pOiBPdXRwdXRbXSB7XG4gICAgcmV0dXJuIG91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICBhZGRyZXNzOiB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChvdXRwdXQuc2NyaXB0LCBjb2luLm5ldHdvcmspLFxuICAgICAgYW1vdW50OiBvdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXljaGFpbnMsXG4gICAga2V5U2lnbmF0dXJlczogZ2V0S2V5U2lnbmF0dXJlcyh3YWxsZXQpID8/IHt9LFxuICAgIG91dHB1dHM6IGFsbE91dHB1dERldGFpbHMsXG4gICAgbWlzc2luZ091dHB1dHM6IHRvT3V0cHV0cyhtaXNzaW5nT3V0cHV0cyksXG4gICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IHRvT3V0cHV0cyhleHBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IHRvT3V0cHV0cyhpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgY2hhbmdlT3V0cHV0cyxcbiAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uLFxuICAgIGN1c3RvbUNoYW5nZSxcbiAgfTtcbn1cbiJdfQ==
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEVBLDRDQTBLQztBQXRQRCxvREFBNEI7QUFFNUIsb0RBQXVCO0FBRXZCLHlEQUEyQztBQUkzQywrQ0FBdUg7QUFDdkgsMERBQXlFO0FBQ3pFLDRDQUEwRjtBQUcxRiwrQ0FBaUU7QUFNakUsS0FBSyxVQUFVLG1CQUFtQixDQUNoQyxJQUFzQixFQUN0QixNQUF3QztJQUV4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVwQyxJQUFBLGdCQUFNLEVBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFCLElBQUEsZ0JBQU0sRUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDL0MsQ0FBQyxNQUFrRSxFQUFFLEVBQUU7UUFDckUsbUVBQW1FO1FBQ25FLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUNGLENBQUM7SUFFRixp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QUEyQjtRQUMzQiwyQkFBMkI7UUFDM0IseUNBQXlDO1FBQ3pDLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJpcGxlLCBWZXJpZmljYXRpb25PcHRpb25zLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXR4b0NvaW4sIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgdHlwZSB7IEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0LCBPdXRwdXQsIFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZmV0Y2hLZXljaGFpbnMsIGdldEtleVNpZ25hdHVyZXMsIHRvS2V5Y2hhaW5UcmlwbGUsIFV0eG9LZXljaGFpbiwgVXR4b05hbWVkS2V5Y2hhaW5zIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW5zJztcbmltcG9ydCB7IENvbXBhcmFibGVPdXRwdXQsIG91dHB1dERpZmZlcmVuY2UgfSBmcm9tICcuLi9vdXRwdXREaWZmZXJlbmNlJztcbmltcG9ydCB7IGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdCwgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQgfSBmcm9tICcuLi9yZWNpcGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDdXN0b21DaGFuZ2VPcHRpb25zLCBwYXJzZU91dHB1dCB9IGZyb20gJy4vcGFyc2VPdXRwdXQnO1xuXG5leHBvcnQgdHlwZSBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPFRWYWx1ZT4gPSBDb21wYXJhYmxlT3V0cHV0PFRWYWx1ZT4gJiB7XG4gIGV4dGVybmFsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VSYmZUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB3YWxsZXQgfSA9IHBhcmFtcztcblxuICBhc3NlcnQodHhQYXJhbXMucmJmVHhJZHMpO1xuICBhc3NlcnQodHhQYXJhbXMucmJmVHhJZHMubGVuZ3RoID09PSAxKTtcblxuICBjb25zdCB0eFRvQmVSZXBsYWNlZCA9IGF3YWl0IHdhbGxldC5nZXRUcmFuc2FjdGlvbih7IHR4SGFzaDogdHhQYXJhbXMucmJmVHhJZHNbMF0sIGluY2x1ZGVSYmY6IHRydWUgfSk7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSB0eFRvQmVSZXBsYWNlZC5vdXRwdXRzLmZsYXRNYXAoXG4gICAgKG91dHB1dDogeyB2YWx1ZVN0cmluZzogc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nOyB3YWxsZXQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgLy8gRm9yIHNlbGYtc2VuZHMsIHRoZSB3YWxsZXRJZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB3YWxsZXQncyBpZFxuICAgICAgaWYgKG91dHB1dC53YWxsZXQgPT09IHdhbGxldC5pZCgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbY29pbi50b0Nhbm9uaWNhbFRyYW5zYWN0aW9uUmVjaXBpZW50KG91dHB1dCldO1xuICAgIH1cbiAgKTtcblxuICAvLyBSZWN1cnNlIGludG8gcGFyc2VUcmFuc2FjdGlvbiB3aXRoIHRoZSBkZXJpdmVkIHJlY2lwaWVudHMgYW5kIHdpdGhvdXQgcmJmVHhJZHNcbiAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24oY29pbiwge1xuICAgIC4uLnBhcmFtcyxcbiAgICB0eFBhcmFtczoge1xuICAgICAgLi4udHhQYXJhbXMsXG4gICAgICByZWNpcGllbnRzLFxuICAgICAgcmJmVHhJZHM6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9FeHBlY3RlZE91dHB1dHMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHR4UGFyYW1zOiB7XG4gICAgcmVjaXBpZW50cz86IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xuICB9XG4pOiBPdXRwdXRbXSB7XG4gIC8vIHZlcmlmeSB0aGF0IGVhY2ggcmVjaXBpZW50IGZyb20gdHhQYXJhbXMgaGFzIHRoZWlyIG93biBvdXRwdXRcbiAgY29uc3QgZXhwZWN0ZWRPdXRwdXRzID0gKHR4UGFyYW1zLnJlY2lwaWVudHMgPz8gW10pLmZsYXRNYXAoKG91dHB1dCkgPT4ge1xuICAgIGlmIChvdXRwdXQuYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3V0cHV0LmFtb3VudC50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IHplcm8gYW1vdW50cyBhbGxvd2VkIGZvciBub24tZW5jb2RlYWJsZSBzY3JpcHRQdWJrZXlzOiAke291dHB1dH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbb3V0cHV0XTtcbiAgICB9XG4gICAgcmV0dXJuIFt7IC4uLm91dHB1dCwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKG91dHB1dC5hZGRyZXNzKSB9XTtcbiAgfSk7XG4gIGlmICh0eFBhcmFtcy5hbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyAmJiB0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzKSB7XG4gICAgLy8gd2hlbiBhbiBleHRlcm5hbCBjaGFuZ2UgYWRkcmVzcyBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgY291bnQgYWxsIG91dHB1dHMgZ29pbmcgdG93YXJkcyB0aGF0XG4gICAgLy8gYWRkcmVzcyBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0cyAocmVnYXJkbGVzcyBvZiB0aGUgb3V0cHV0IGFtb3VudClcbiAgICBleHBlY3RlZE91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh0eFBhcmFtcy5jaGFuZ2VBZGRyZXNzKSwgYW1vdW50OiAnbWF4JyB9KTtcbiAgfVxuICByZXR1cm4gZXhwZWN0ZWRPdXRwdXRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgYmlnaW50IHwgbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbjxUTnVtYmVyPj4ge1xuICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiA9IHt9LCByZXFJZCB9ID0gcGFyYW1zO1xuXG4gIC8vIEJyYW5jaCBvZmYgZWFybHkgZm9yIFJCRiB0cmFuc2FjdGlvbnNcbiAgaWYgKHR4UGFyYW1zLnJiZlR4SWRzKSB7XG4gICAgcmV0dXJuIHBhcnNlUmJmVHJhbnNhY3Rpb24oY29pbiwgcGFyYW1zKTtcbiAgfVxuXG4gIGlmICghXy5pc1VuZGVmaW5lZCh2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpICYmICFfLmlzQm9vbGVhbih2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgfVxuICBjb25zdCBkaXNhYmxlTmV0d29ya2luZyA9IHZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZztcblxuICAvLyBvYnRhaW4gdGhlIGtleWNoYWlucyBhbmQga2V5IHNpZ25hdHVyZXNcbiAgbGV0IGtleWNoYWluczogVXR4b05hbWVkS2V5Y2hhaW5zIHwgVmVyaWZpY2F0aW9uT3B0aW9uc1sna2V5Y2hhaW5zJ10gfCB1bmRlZmluZWQgPSB2ZXJpZmljYXRpb24ua2V5Y2hhaW5zO1xuICBpZiAoIWtleWNoYWlucykge1xuICAgIGlmIChkaXNhYmxlTmV0d29ya2luZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmV0Y2gga2V5Y2hhaW5zIHdpdGhvdXQgbmV0d29ya2luZycpO1xuICAgIH1cbiAgICBrZXljaGFpbnMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyhjb2luLCB3YWxsZXQsIHJlcUlkKTtcbiAgfVxuXG4gIGlmICghVXR4b05hbWVkS2V5Y2hhaW5zLmlzKGtleWNoYWlucykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQga2V5Y2hhaW5zJyk7XG4gIH1cblxuICBjb25zdCBrZXljaGFpbkFycmF5OiBUcmlwbGU8VXR4b0tleWNoYWluPiA9IHRvS2V5Y2hhaW5UcmlwbGUoa2V5Y2hhaW5zKTtcblxuICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkLnR4SGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eFByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZE91dHB1dHMgPSB0b0V4cGVjdGVkT3V0cHV0cyhjb2luLCB0eFBhcmFtcyk7XG5cbiAgLy8gZ2V0IHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgY3VzdG9tIGNoYW5nZSB3YWxsZXQgaWYgbmVlZGVkXG4gIGxldCBjdXN0b21DaGFuZ2U6IEN1c3RvbUNoYW5nZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQgPSB1bmRlZmluZWQgfSA9IHdhbGxldC5jb2luU3BlY2lmaWMoKSB8fCB7fTtcbiAgaWYgKGN1c3RvbUNoYW5nZVdhbGxldElkKSB7XG4gICAgLy8gZmV0Y2gga2V5Y2hhaW5zIGZyb20gY3VzdG9tIGNoYW5nZSB3YWxsZXQgZm9yIGRlcml2aW5nIGFkZHJlc3Nlcy5cbiAgICAvLyBUaGVzZSBrZXljaGFpbnMgc2hvdWxkIGJlIHNpZ25lZCBhbmQgdGhpcyBzaG91bGQgYmUgdmVyaWZpZWQgaW4gdmVyaWZ5VHJhbnNhY3Rpb25cbiAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzID0gd2FsbGV0Ll93YWxsZXQuY3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlcztcbiAgICBjb25zdCBjdXN0b21DaGFuZ2VXYWxsZXQ6IFdhbGxldCA9IGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiBjdXN0b21DaGFuZ2VXYWxsZXRJZCB9KTtcbiAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXlzID0gYXdhaXQgZmV0Y2hLZXljaGFpbnMoY29pbiwgY3VzdG9tQ2hhbmdlV2FsbGV0LCByZXFJZCk7XG5cbiAgICBpZiAoIWN1c3RvbUNoYW5nZUtleXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGZldGNoIGtleWNoYWlucyBmb3IgY3VzdG9tIGNoYW5nZSB3YWxsZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tQ2hhbmdlS2V5cy51c2VyICYmIGN1c3RvbUNoYW5nZUtleXMuYmFja3VwICYmIGN1c3RvbUNoYW5nZUtleXMuYml0Z28gJiYgY3VzdG9tQ2hhbmdlV2FsbGV0KSB7XG4gICAgICBjb25zdCBjdXN0b21DaGFuZ2VLZXljaGFpbnM6IFRyaXBsZTxVdHhvS2V5Y2hhaW4+ID0gW1xuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLnVzZXIsXG4gICAgICAgIGN1c3RvbUNoYW5nZUtleXMuYmFja3VwLFxuICAgICAgICBjdXN0b21DaGFuZ2VLZXlzLmJpdGdvLFxuICAgICAgXTtcblxuICAgICAgY3VzdG9tQ2hhbmdlID0ge1xuICAgICAgICBrZXlzOiBjdXN0b21DaGFuZ2VLZXljaGFpbnMsXG4gICAgICAgIHNpZ25hdHVyZXM6IFtjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIsIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwLCBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLmJpdGdvXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gb2J0YWluIGFsbCBvdXRwdXRzXG4gIGNvbnN0IGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0gYXdhaXQgY29pbi5leHBsYWluVHJhbnNhY3Rpb248VE51bWJlcj4oe1xuICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgIHR4SW5mbzogdHhQcmVidWlsZC50eEluZm8sXG4gICAgcHViczoga2V5Y2hhaW5BcnJheS5tYXAoKGspID0+IGsucHViKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgfSk7XG5cbiAgY29uc3QgYWxsT3V0cHV0cyA9IFsuLi5leHBsYW5hdGlvbi5vdXRwdXRzLCAuLi5leHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzXTtcblxuICAvKipcbiAgICogTG9vcCB0aHJvdWdoIGFsbCB0aGUgb3V0cHV0cyBhbmQgY2xhc3NpZnkgZWFjaCBvZiB0aGVtIGFzIGVpdGhlciBpbnRlcm5hbCBzcGVuZHNcbiAgICogb3IgZXh0ZXJuYWwgc3BlbmRzIGJ5IHNldHRpbmcgdGhlIFwiZXh0ZXJuYWxcIiBwcm9wZXJ0eSB0byB0cnVlIG9yIGZhbHNlIG9uIHRoZSBvdXRwdXQgb2JqZWN0LlxuICAgKi9cbiAgY29uc3QgYWxsT3V0cHV0RGV0YWlsczogT3V0cHV0W10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBhbGxPdXRwdXRzLm1hcCgoY3VycmVudE91dHB1dCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlT3V0cHV0KHtcbiAgICAgICAgY3VycmVudE91dHB1dCxcbiAgICAgICAgY29pbixcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICBrZXljaGFpbkFycmF5OiB0b0tleWNoYWluVHJpcGxlKGtleWNoYWlucyksXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBleHBlY3RlZE91dHB1dHMsXG4gICAgICAgICAgY2hhbmdlQWRkcmVzczogdHhQYXJhbXMuY2hhbmdlQWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tQ2hhbmdlLFxuICAgICAgICByZXFJZCxcbiAgICAgIH0pO1xuICAgIH0pXG4gICk7XG5cbiAgY29uc3QgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb24gPSBhbGxPdXRwdXREZXRhaWxzLnNvbWUoXG4gICAgKG91dHB1dCkgPT4gKG91dHB1dCBhcyBGaXhlZFNjcmlwdFdhbGxldE91dHB1dCk/Lm5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uXG4gICk7XG5cbiAgY29uc3QgY2hhbmdlT3V0cHV0cyA9IF8uZmlsdGVyKGFsbE91dHB1dERldGFpbHMsIHsgZXh0ZXJuYWw6IGZhbHNlIH0pO1xuXG4gIGZ1bmN0aW9uIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwob3V0cHV0czogT3V0cHV0W10pOiBDb21wYXJhYmxlT3V0cHV0V2l0aEV4dGVybmFsPGJpZ2ludCB8ICdtYXgnPltdIHtcbiAgICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIHNjcmlwdDogZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KG91dHB1dC5hZGRyZXNzLCBjb2luLm5hbWUpLFxuICAgICAgdmFsdWU6IG91dHB1dC5hbW91bnQgPT09ICdtYXgnID8gJ21heCcgOiAoQmlnSW50KG91dHB1dC5hbW91bnQpIGFzIGJpZ2ludCB8ICdtYXgnKSxcbiAgICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gICAgfSkpO1xuICB9XG5cbiAgY29uc3QgbWlzc2luZ091dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKFxuICAgIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoZXhwZWN0ZWRPdXRwdXRzKSxcbiAgICB0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dHMpXG4gICk7XG5cbiAgY29uc3QgaW1wbGljaXRPdXRwdXRzID0gb3V0cHV0RGlmZmVyZW5jZShcbiAgICB0b0NvbXBhcmFibGVPdXRwdXRzV2l0aEV4dGVybmFsKGFsbE91dHB1dERldGFpbHMpLFxuICAgIHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoZXhwZWN0ZWRPdXRwdXRzKVxuICApO1xuICBjb25zdCBleHBsaWNpdE91dHB1dHMgPSBvdXRwdXREaWZmZXJlbmNlKHRvQ29tcGFyYWJsZU91dHB1dHNXaXRoRXh0ZXJuYWwoYWxsT3V0cHV0RGV0YWlscyksIGltcGxpY2l0T3V0cHV0cyk7XG5cbiAgLy8gdGhlc2UgYXJlIGFsbCB0aGUgbm9uLXdhbGxldCBvdXRwdXRzIHRoYXQgaGFkIGJlZW4gb3JpZ2luYWxseSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiByZWNpcGllbnRzXG4gIGNvbnN0IGV4cGxpY2l0RXh0ZXJuYWxPdXRwdXRzID0gZXhwbGljaXRPdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQuZXh0ZXJuYWwpO1xuICAvLyB0aGlzIGlzIHRoZSBzdW0gb2YgYWxsIHRoZSBvcmlnaW5hbGx5IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG5vbi13YWxsZXQgb3V0cHV0IHZhbHVlc1xuICBjb25zdCBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPSB1dHhvbGliLmJpdGdvLnRvVE51bWJlcjxUTnVtYmVyPihcbiAgICBleHBsaWNpdEV4dGVybmFsT3V0cHV0cy5yZWR1Y2UoKHN1bTogYmlnaW50LCBvKSA9PiBzdW0gKyBCaWdJbnQoby52YWx1ZSksIEJpZ0ludCgwKSkgYXMgYmlnaW50LFxuICAgIGNvaW4uYW1vdW50VHlwZVxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsY3VsYXRpb24gb2YgdGhlIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudCBwZXJ0YWlucyB0byB2ZXJpZnlpbmcgdGhlIHBheS1hcy15b3UtZ28tZmVlIEJpdEdvXG4gICAqIGF1dG9tYXRpY2FsbHkgYXBwbGllZCB0byB0cmFuc2FjdGlvbnMgc2VuZGluZyBtb25leSBvdXQgb2YgdGhlIHdhbGxldC4gVGhlIGxvZ2ljIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmRcbiAgICogaW4gdGhhdCB3ZSBjb21wYXJlIHRoZSBleHRlcm5hbCBzcGVuZCBhbW91bnQgdGhhdCB3YXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgYnkgdGhlIHVzZXIgdG8gdGhlIHBvcnRpb25cbiAgICogdGhhdCB3YXMgc3BlY2lmaWVkIGltcGxpY2l0bHkuIFRvIHByb3RlY3QgY3VzdG9tZXJzIGZyb20gcGVvcGxlIHRhbXBlcmluZyB3aXRoIHRoZSB0cmFuc2FjdGlvbiBvdXRwdXRzLCB3ZVxuICAgKiBkZWZpbmUgYSB0aHJlc2hvbGQgZm9yIHRoZSBtYXhpbXVtIHBlcmNlbnRhZ2Ugb2YgdGhlIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGluIHJlbGF0aW9uIHRvIHRoZSBleHBsaWNpdFxuICAgKiBleHRlcm5hbCBzcGVuZC5cbiAgICpcbiAgICogVGhpcyBoYXMgYmVjb21lIG9ic29sZXRlIHdpdGggdGhlIGludG9kdWN0aW9uIG9mIGB1dHhvY29yZS5wYXlnby52ZXJpZnlQYXlHb0FkZHJlc3NQcm9vZigpYC5cbiAgICovXG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBleHRyYSBhZGRyZXNzZXMgYXJlIGNoYW5nZSBhZGRyZXNzZXNcbiAgLy8gZ2V0IGFsbCB0aGUgYWRkaXRpb25hbCBleHRlcm5hbCBvdXRwdXRzIHRoZSBzZXJ2ZXIgYWRkZWQgYW5kIGNhbGN1bGF0ZSB0aGVpciB2YWx1ZXNcbiAgY29uc3QgaW1wbGljaXRFeHRlcm5hbE91dHB1dHMgPSBpbXBsaWNpdE91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5leHRlcm5hbCk7XG4gIGNvbnN0IGltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCA9IHV0eG9saWIuYml0Z28udG9UTnVtYmVyPFROdW1iZXI+KFxuICAgIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLnJlZHVjZSgoc3VtOiBiaWdpbnQsIG8pID0+IHN1bSArIEJpZ0ludChvLnZhbHVlKSwgQmlnSW50KDApKSBhcyBiaWdpbnQsXG4gICAgY29pbi5hbW91bnRUeXBlXG4gICk7XG5cbiAgZnVuY3Rpb24gdG9PdXRwdXRzKG91dHB1dHM6IENvbXBhcmFibGVPdXRwdXRXaXRoRXh0ZXJuYWw8YmlnaW50IHwgJ21heCc+W10pOiBPdXRwdXRbXSB7XG4gICAgcmV0dXJuIG91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICBhZGRyZXNzOiB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdChvdXRwdXQuc2NyaXB0LCBjb2luLm5hbWUpLFxuICAgICAgYW1vdW50OiBvdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgICAgIGV4dGVybmFsOiBvdXRwdXQuZXh0ZXJuYWwsXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXljaGFpbnMsXG4gICAga2V5U2lnbmF0dXJlczogZ2V0S2V5U2lnbmF0dXJlcyh3YWxsZXQpID8/IHt9LFxuICAgIG91dHB1dHM6IGFsbE91dHB1dERldGFpbHMsXG4gICAgbWlzc2luZ091dHB1dHM6IHRvT3V0cHV0cyhtaXNzaW5nT3V0cHV0cyksXG4gICAgZXhwbGljaXRFeHRlcm5hbE91dHB1dHM6IHRvT3V0cHV0cyhleHBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IHRvT3V0cHV0cyhpbXBsaWNpdEV4dGVybmFsT3V0cHV0cyksXG4gICAgY2hhbmdlT3V0cHV0cyxcbiAgICBleHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIG5lZWRzQ3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlVmVyaWZpY2F0aW9uLFxuICAgIGN1c3RvbUNoYW5nZSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { UtxoCoinName } from '../../names';
|
|
2
2
|
export declare const pubkeyProd: Buffer<ArrayBuffer>;
|
|
3
3
|
export declare const pubkeyTestnet: Buffer<ArrayBuffer>;
|
|
4
|
-
export declare function getReplayProtectionPubkeys(
|
|
5
|
-
export declare function getReplayProtectionAddresses(
|
|
6
|
-
export declare function isReplayProtectionUnspent
|
|
4
|
+
export declare function getReplayProtectionPubkeys(coinName: UtxoCoinName): Buffer[];
|
|
5
|
+
export declare function getReplayProtectionAddresses(coinName: UtxoCoinName, format?: 'default' | 'cashaddr'): string[];
|
|
6
|
+
export declare function isReplayProtectionUnspent(u: {
|
|
7
|
+
address: string;
|
|
8
|
+
}, coinName: UtxoCoinName): boolean;
|
|
7
9
|
//# sourceMappingURL=replayProtection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayProtection.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/replayProtection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replayProtection.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/replayProtection.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,UAAU,qBAA2F,CAAC;AAEnH,eAAO,MAAM,aAAa,qBAA2F,CAAC;AAEtH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAU3E;AAWD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,YAAY,EACtB,MAAM,GAAE,SAAS,GAAG,UAAsB,GACzC,MAAM,EAAE,CAYV;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAEjG"}
|
|
@@ -1,53 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.pubkeyTestnet = exports.pubkeyProd = void 0;
|
|
37
4
|
exports.getReplayProtectionPubkeys = getReplayProtectionPubkeys;
|
|
38
5
|
exports.getReplayProtectionAddresses = getReplayProtectionAddresses;
|
|
39
6
|
exports.isReplayProtectionUnspent = isReplayProtectionUnspent;
|
|
40
|
-
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
41
7
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
8
|
+
const names_1 = require("../../names");
|
|
42
9
|
exports.pubkeyProd = Buffer.from('0255b9f71ac2c78fffd83e3e37b9e17ae70d5437b7f56d0ed2e93b7de08015aa59', 'hex');
|
|
43
10
|
exports.pubkeyTestnet = Buffer.from('0219da48412c2268865fe8c126327d1b12eee350a3b69eb09e3323cc9a11828945', 'hex');
|
|
44
|
-
function getReplayProtectionPubkeys(
|
|
45
|
-
switch (
|
|
46
|
-
case
|
|
47
|
-
case
|
|
11
|
+
function getReplayProtectionPubkeys(coinName) {
|
|
12
|
+
switch (coinName) {
|
|
13
|
+
case 'bch':
|
|
14
|
+
case 'bsv':
|
|
48
15
|
return [exports.pubkeyProd];
|
|
49
|
-
case
|
|
50
|
-
case
|
|
16
|
+
case 'tbsv':
|
|
17
|
+
case 'tbch':
|
|
51
18
|
return [exports.pubkeyTestnet];
|
|
52
19
|
}
|
|
53
20
|
return [];
|
|
@@ -60,19 +27,20 @@ const replayProtectionScriptsProd = [Buffer.from('a914174315cfde84f4c45395ac6f15
|
|
|
60
27
|
// 2MuMnPoSDgWEpNWH28X2nLtYMXQJCyT61eY
|
|
61
28
|
// bchtest:pqtjmnzwqffkrk2349g3cecfwwjwxusvnq87n07cal
|
|
62
29
|
const replayProtectionScriptsTestnet = [Buffer.from('a914172dcc4e025361d951a9511c670973a4e3720c9887', 'hex')];
|
|
63
|
-
function getReplayProtectionAddresses(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
case
|
|
30
|
+
function getReplayProtectionAddresses(coinName, format = 'default') {
|
|
31
|
+
const network = (0, names_1.getNetworkFromCoinName)(coinName);
|
|
32
|
+
switch (coinName) {
|
|
33
|
+
case 'bch':
|
|
34
|
+
case 'bsv':
|
|
67
35
|
return replayProtectionScriptsProd.map((script) => wasm_utxo_1.utxolibCompat.fromOutputScript(script, network, format));
|
|
68
|
-
case
|
|
69
|
-
case
|
|
36
|
+
case 'tbsv':
|
|
37
|
+
case 'tbch':
|
|
70
38
|
return replayProtectionScriptsTestnet.map((script) => wasm_utxo_1.utxolibCompat.fromOutputScript(script, network, format));
|
|
71
39
|
default:
|
|
72
40
|
return [];
|
|
73
41
|
}
|
|
74
42
|
}
|
|
75
|
-
function isReplayProtectionUnspent(u,
|
|
76
|
-
return getReplayProtectionAddresses(
|
|
43
|
+
function isReplayProtectionUnspent(u, coinName) {
|
|
44
|
+
return getReplayProtectionAddresses(coinName).includes(u.address);
|
|
77
45
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLGdFQVVDO0FBV0Qsb0VBZUM7QUFFRCw4REFFQztBQWhERCxnREFBaUQ7QUFFakQsdUNBQW1FO0FBRXRELFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFdEcsUUFBQSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV0SCxTQUFnQiwwQkFBMEIsQ0FBQyxRQUFzQjtJQUMvRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLO1lBQ1IsT0FBTyxDQUFDLGtCQUFVLENBQUMsQ0FBQztRQUN0QixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssTUFBTTtZQUNULE9BQU8sQ0FBQyxxQkFBYSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELHFCQUFxQjtBQUNyQixxQ0FBcUM7QUFDckMseURBQXlEO0FBQ3pELE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDM0csd0JBQXdCO0FBQ3hCLHNDQUFzQztBQUN0QyxxREFBcUQ7QUFDckQsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUU5RyxTQUFnQiw0QkFBNEIsQ0FDMUMsUUFBc0IsRUFDdEIsU0FBaUMsU0FBUztJQUUxQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFzQixFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLEtBQUs7WUFDUixPQUFPLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMseUJBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUcsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE1BQU07WUFDVCxPQUFPLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMseUJBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakg7WUFDRSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsQ0FBc0IsRUFBRSxRQUFzQjtJQUN0RixPQUFPLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0eG9saWJDb21wYXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZ2V0TmV0d29ya0Zyb21Db2luTmFtZSwgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG5leHBvcnQgY29uc3QgcHVia2V5UHJvZCA9IEJ1ZmZlci5mcm9tKCcwMjU1YjlmNzFhYzJjNzhmZmZkODNlM2UzN2I5ZTE3YWU3MGQ1NDM3YjdmNTZkMGVkMmU5M2I3ZGUwODAxNWFhNTknLCAnaGV4Jyk7XG5cbmV4cG9ydCBjb25zdCBwdWJrZXlUZXN0bmV0ID0gQnVmZmVyLmZyb20oJzAyMTlkYTQ4NDEyYzIyNjg4NjVmZThjMTI2MzI3ZDFiMTJlZWUzNTBhM2I2OWViMDllMzMyM2NjOWExMTgyODk0NScsICdoZXgnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBCdWZmZXJbXSB7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdiY2gnOlxuICAgIGNhc2UgJ2Jzdic6XG4gICAgICByZXR1cm4gW3B1YmtleVByb2RdO1xuICAgIGNhc2UgJ3Ric3YnOlxuICAgIGNhc2UgJ3RiY2gnOlxuICAgICAgcmV0dXJuIFtwdWJrZXlUZXN0bmV0XTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbi8vIHNoKHBrKHB1YmtleVByb2QpKVxuLy8gMzNwMXE3bVRHeWVNNVVuWkVSR2lNY1ZVa1kxMlNDc2F0QVxuLy8gYml0Y29pbmNhc2g6cHF0NXg5dzBtNnowZjN6bmpra3g3OXdsM2w3eXdyc3plc2VtcDh4Z3BmXG5jb25zdCByZXBsYXlQcm90ZWN0aW9uU2NyaXB0c1Byb2QgPSBbQnVmZmVyLmZyb20oJ2E5MTQxNzQzMTVjZmRlODRmNGM0NTM5NWFjNmYxNWRmOGZmYzQ3MGUwMmNjODcnLCAnaGV4JyldO1xuLy8gc2gocGsocHVia2V5VGVzdG5ldCkpXG4vLyAyTXVNblBvU0RnV0VwTldIMjhYMm5MdFlNWFFKQ3lUNjFlWVxuLy8gYmNodGVzdDpwcXRqbW56d3FmZmtyazIzNDlnM2NlY2Z3d2p3eHVzdm5xODduMDdjYWxcbmNvbnN0IHJlcGxheVByb3RlY3Rpb25TY3JpcHRzVGVzdG5ldCA9IFtCdWZmZXIuZnJvbSgnYTkxNDE3MmRjYzRlMDI1MzYxZDk1MWE5NTExYzY3MDk3M2E0ZTM3MjBjOTg4NycsICdoZXgnKV07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBmb3JtYXQ6ICdkZWZhdWx0JyB8ICdjYXNoYWRkcicgPSAnZGVmYXVsdCdcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmtGcm9tQ29pbk5hbWUoY29pbk5hbWUpO1xuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAnYmNoJzpcbiAgICBjYXNlICdic3YnOlxuICAgICAgcmV0dXJuIHJlcGxheVByb3RlY3Rpb25TY3JpcHRzUHJvZC5tYXAoKHNjcmlwdCkgPT4gdXR4b2xpYkNvbXBhdC5mcm9tT3V0cHV0U2NyaXB0KHNjcmlwdCwgbmV0d29yaywgZm9ybWF0KSk7XG4gICAgY2FzZSAndGJzdic6XG4gICAgY2FzZSAndGJjaCc6XG4gICAgICByZXR1cm4gcmVwbGF5UHJvdGVjdGlvblNjcmlwdHNUZXN0bmV0Lm1hcCgoc2NyaXB0KSA9PiB1dHhvbGliQ29tcGF0LmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0LCBuZXR3b3JrLCBmb3JtYXQpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50KHU6IHsgYWRkcmVzczogc3RyaW5nIH0sIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMoY29pbk5hbWUpLmluY2x1ZGVzKHUuYWRkcmVzcyk7XG59XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as utxolib from '@bitgo/utxo-lib';
|
|
2
2
|
import { BIP32Interface } from '@bitgo/secp256k1';
|
|
3
|
+
import { UtxoCoinName } from '../../names';
|
|
3
4
|
type Unspent<TNumber extends number | bigint = number> = utxolib.bitgo.Unspent<TNumber>;
|
|
4
5
|
type RootWalletKeys = utxolib.bitgo.RootWalletKeys;
|
|
5
6
|
/**
|
|
@@ -10,14 +11,15 @@ type RootWalletKeys = utxolib.bitgo.RootWalletKeys;
|
|
|
10
11
|
* @param transaction - wallet transaction (builder) to be signed
|
|
11
12
|
* @param unspents - transaction unspents
|
|
12
13
|
* @param walletSigner - signing parameters
|
|
14
|
+
* @param coinName - coin name for network-specific logic
|
|
13
15
|
* @param isLastSignature - Returns full-signed transaction when true. Builds half-signed when false.
|
|
14
16
|
* @param replayProtectionAddresses - List of replay protection addresses to skip signing
|
|
15
17
|
*/
|
|
16
|
-
export declare function signAndVerifyWalletTransaction<TNumber extends number | bigint>(transaction: utxolib.bitgo.UtxoTransaction<TNumber> | utxolib.bitgo.UtxoTransactionBuilder<TNumber>, unspents: Unspent<TNumber>[], walletSigner: utxolib.bitgo.WalletUnspentSigner<RootWalletKeys>, { isLastSignature, replayProtectionAddresses, }: {
|
|
18
|
+
export declare function signAndVerifyWalletTransaction<TNumber extends number | bigint>(transaction: utxolib.bitgo.UtxoTransaction<TNumber> | utxolib.bitgo.UtxoTransactionBuilder<TNumber>, unspents: Unspent<TNumber>[], walletSigner: utxolib.bitgo.WalletUnspentSigner<RootWalletKeys>, coinName: UtxoCoinName, { isLastSignature, replayProtectionAddresses, }: {
|
|
17
19
|
isLastSignature: boolean;
|
|
18
20
|
replayProtectionAddresses?: string[];
|
|
19
21
|
}): utxolib.bitgo.UtxoTransaction<TNumber>;
|
|
20
|
-
export declare function signLegacyTransaction<TNumber extends number | bigint>(tx: utxolib.bitgo.UtxoTransaction<TNumber>, signerKeychain: BIP32Interface | undefined, params: {
|
|
22
|
+
export declare function signLegacyTransaction<TNumber extends number | bigint>(tx: utxolib.bitgo.UtxoTransaction<TNumber>, signerKeychain: BIP32Interface | undefined, coinName: UtxoCoinName, params: {
|
|
21
23
|
isLastSignature: boolean;
|
|
22
24
|
signingStep: 'signerNonce' | 'cosignerNonce' | 'signerSignature' | undefined;
|
|
23
25
|
txInfo: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signLegacyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signLegacyTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAS,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"signLegacyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/signLegacyTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAS,MAAM,kBAAkB,CAAC;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAS3C,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAExF,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AAEnD;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC5E,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,EACnG,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAC5B,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAC/D,QAAQ,EAAE,YAAY,EACtB,EACE,eAAe,EACf,yBAAyB,GAC1B,EAAE;IACD,eAAe,EAAE,OAAO,CAAC;IACzB,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC,GACA,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAwExC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACnE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAC1C,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE;IACN,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,aAAa,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAC7E,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,GAAG,SAAS,CAAC;IACpE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,GACA,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CA4BxC"}
|