bitgo
Version:
BitGo JavaScript SDK
129 lines • 22 kB
JavaScript
;
//
// Tests for Wallets
//
Object.defineProperty(exports, "__esModule", { value: true });
require("should");
const nock = require("nock");
const sdk_test_1 = require("@bitgo/sdk-test");
const bitgo_1 = require("../../../src/bitgo");
const sdk_coin_eth_1 = require("@bitgo/sdk-coin-eth");
const sdk_coin_xlm_1 = require("@bitgo/sdk-coin-xlm");
nock.disableNetConnect();
describe('V2 Base Coin:', function () {
let bitgo;
let basecoinEth;
let basecoinBtc;
let basecoinXlm;
let basecoinNear;
let basecoinEos;
let basecoinEosChex;
let basecoinErc20TokenWithName;
let basecoinErc20TokenWithContractHash;
let baseCoinStellarToken;
before(function () {
bitgo = sdk_test_1.TestBitGo.decorate(bitgo_1.BitGo, { env: 'test' });
bitgo.initializeTestVars();
basecoinEth = bitgo.coin('teth');
basecoinBtc = bitgo.coin('tbtc');
basecoinXlm = bitgo.coin('txlm');
basecoinNear = bitgo.coin('tnear');
basecoinEos = bitgo.coin('teos');
basecoinEosChex = bitgo.coin('teos:CHEX');
basecoinEth.keychains();
basecoinErc20TokenWithName = bitgo.coin('terc');
basecoinErc20TokenWithContractHash = bitgo.coin('0x945ac907cf021a6bcd07852bb3b8c087051706a9');
baseCoinStellarToken = bitgo.coin('txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L');
});
describe('Currency conversion', function () {
it('should convert wei amounts to ETH', function () {
// 1 wei
basecoinEth.baseUnitsToBigUnits(1).should.equal('0.000000000000000001');
// 100 wei
basecoinEth.baseUnitsToBigUnits(100).should.equal('0.0000000000000001');
// 1 ETH
basecoinEth.baseUnitsToBigUnits('1000000000000000000').should.equal('1');
// others
basecoinEth.baseUnitsToBigUnits('1000000010000000000').should.equal('1.00000001');
});
it('should convert satoshi amounts to BTC', function () {
// 1 satoshi
basecoinBtc.baseUnitsToBigUnits(1).should.equal('0.00000001');
// 100 satoshi
basecoinBtc.baseUnitsToBigUnits(100).should.equal('0.000001');
// 1 BTC
basecoinBtc.baseUnitsToBigUnits(100000000).should.equal('1');
// 2000 BTC
basecoinBtc.baseUnitsToBigUnits(200000000000).should.equal('2000');
// others
basecoinBtc.baseUnitsToBigUnits(200000397901).should.equal('2000.00397901');
});
it('should convert stroop amounts to XLM', function () {
// 1 stroop
basecoinXlm.baseUnitsToBigUnits('1').should.equal('0.0000001');
// 100 stroops
basecoinXlm.baseUnitsToBigUnits('100').should.equal('0.00001');
// 1 XLM
basecoinXlm.baseUnitsToBigUnits('10000000').should.equal('1');
// others
basecoinXlm.baseUnitsToBigUnits('10000001').should.equal('1.0000001');
});
it('should convert amounts to NEAR', function () {
basecoinNear.baseUnitsToBigUnits('5348162392287187499999010').should.equal('5.34816239228718749999901');
basecoinNear.baseUnitsToBigUnits('5555555555555555555555550').should.equal('5.55555555555555555555555');
basecoinNear.baseUnitsToBigUnits('197895229538867437499999802').should.equal('197.895229538867437499999802');
});
it('should convert amounts to EOS', function () {
basecoinEos.baseUnitsToBigUnits('1').should.equal('0.0001');
basecoinEos.baseUnitsToBigUnits('1234').should.equal('0.1234');
basecoinEos.baseUnitsToBigUnits('123456788').should.equal('12345.6788');
// for chex token, we need to round to 8 decimal places
basecoinEosChex.baseUnitsToBigUnits('1').should.equal('0.00000001');
basecoinEosChex.baseUnitsToBigUnits('1234').should.equal('0.00001234');
basecoinEosChex.baseUnitsToBigUnits('123456788').should.equal('1.23456788');
});
});
describe('supportsBlockTarget', function () {
it('should return false', function () {
basecoinEth.supportsBlockTarget().should.equal(false);
});
});
describe('Token initialization', function () {
it('ERC20 Tokens initialized with name and contract should be instances of Erc20Token', function () {
basecoinErc20TokenWithName.should.be.instanceof(sdk_coin_eth_1.Erc20Token);
basecoinErc20TokenWithContractHash.should.be.instanceof(sdk_coin_eth_1.Erc20Token);
});
it('ERC20 Tokens initialized with name and contract should be instances of each others constructor', function () {
basecoinErc20TokenWithName.should.be.instanceof(basecoinErc20TokenWithContractHash.constructor);
basecoinErc20TokenWithContractHash.should.be.instanceof(basecoinErc20TokenWithContractHash.constructor);
});
it('ERC20 Token comparison', function () {
basecoinErc20TokenWithName.getBaseFactor().should.equal(basecoinErc20TokenWithContractHash.getBaseFactor());
basecoinErc20TokenWithName.getChain().should.equal(basecoinErc20TokenWithContractHash.getChain());
basecoinErc20TokenWithName.getFamily().should.equal(basecoinErc20TokenWithContractHash.getFamily());
basecoinErc20TokenWithName.getFullName().should.equal(basecoinErc20TokenWithContractHash.getFullName());
});
it('Stellar Tokens should be instances of StellarToken', function () {
(baseCoinStellarToken instanceof sdk_coin_xlm_1.StellarToken).should.equal(true);
(baseCoinStellarToken instanceof sdk_coin_xlm_1.StellarToken).should.equal(true);
});
it('Goerli ERC20 Tokens set to gteth and Kovan ERC20 Tokens set to teth', function () {
// goerli token
const goerliToken = bitgo.coin('gusdt');
goerliToken.coin.should.equal('gteth');
goerliToken.network.should.equal('Testnet');
goerliToken.getFamily().should.equal('eth');
// kovan token
const kovanToken = bitgo.coin('terc');
kovanToken.coin.should.equal('teth');
kovanToken.network.should.equal('Testnet');
kovanToken.getFamily().should.equal('eth');
// hoodi token
const hoodiToken = bitgo.coin('bgerch');
hoodiToken.coin.should.equal('hteth');
hoodiToken.network.should.equal('Testnet');
hoodiToken.getFamily().should.equal('eth');
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUNvaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3YyL3VuaXQvYmFzZUNvaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLEVBQUU7QUFDRixvQkFBb0I7QUFDcEIsRUFBRTs7QUFFRixrQkFBZ0I7QUFDaEIsNkJBQThCO0FBRTlCLDhDQUE0QztBQUM1Qyw4Q0FBMkM7QUFDM0Msc0RBQWlEO0FBQ2pELHNEQUFtRDtBQUVuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUV6QixRQUFRLENBQUMsZUFBZSxFQUFFO0lBQ3hCLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxlQUFlLENBQUM7SUFDcEIsSUFBSSwwQkFBMEIsQ0FBQztJQUMvQixJQUFJLGtDQUFrQyxDQUFDO0lBQ3ZDLElBQUksb0JBQW9CLENBQUM7SUFFekIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGFBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pD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RUFBRTtZQUN4RSxlQUFlO1lBQ2YsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLGNBQWM7WUFDZCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsY0FBYztZQUNkLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy8gVGVzdHMgZm9yIFdhbGxldHNcbi8vXG5cbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuXG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R28gfSBmcm9tICcuLi8uLi8uLi9zcmMvYml0Z28nO1xuaW1wb3J0IHsgRXJjMjBUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1ldGgnO1xuaW1wb3J0IHsgU3RlbGxhclRva2VuIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLXhsbSc7XG5cbm5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcblxuZGVzY3JpYmUoJ1YyIEJhc2UgQ29pbjonLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbztcbiAgbGV0IGJhc2Vjb2luRXRoO1xuICBsZXQgYmFzZWNvaW5CdGM7XG4gIGxldCBiYXNlY29pblhsbTtcbiAgbGV0IGJhc2Vjb2luTmVhcjtcbiAgbGV0IGJhc2Vjb2luRW9zO1xuICBsZXQgYmFzZWNvaW5Fb3NDaGV4O1xuICBsZXQgYmFzZWNvaW5FcmMyMFRva2VuV2l0aE5hbWU7XG4gIGxldCBiYXNlY29pbkVyYzIwVG9rZW5XaXRoQ29udHJhY3RIYXNoO1xuICBsZXQgYmFzZUNvaW5TdGVsbGFyVG9rZW47XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHbywgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiYXNlY29pbkV0aCA9IGJpdGdvLmNvaW4oJ3RldGgnKTtcbiAgICBiYXNlY29pbkJ0YyA9IGJpdGdvLmNvaW4oJ3RidGMnKTtcbiAgICBiYXNlY29pblhsbSA9IGJpdGdvLmNvaW4oJ3R4bG0nKTtcbiAgICBiYXNlY29pbk5lYXIgPSBiaXRnby5jb2luKCd0bmVhcicpO1xuICAgIGJhc2Vjb2luRW9zID0gYml0Z28uY29pbigndGVvcycpO1xuICAgIGJhc2Vjb2luRW9zQ2hleCA9IGJpdGdvLmNvaW4oJ3Rlb3M6Q0hFWCcpO1xuICAgIGJhc2Vjb2luRXRoLmtleWNoYWlucygpO1xuICAgIGJhc2Vjb2luRXJjMjBUb2tlbldpdGhOYW1lID0gYml0Z28uY29pbigndGVyYycpO1xuICAgIGJhc2Vjb2luRXJjMjBUb2tlbldpdGhDb250cmFjdEhhc2ggPSBiaXRnby5jb2luKCcweDk0NWFjOTA3Y2YwMjFhNmJjZDA3ODUyYmIzYjhjMDg3MDUxNzA2YTknKTtcbiAgICBiYXNlQ29pblN0ZWxsYXJUb2tlbiA9IGJpdGdvLmNvaW4oJ3R4bG06QlNULUdCUVRJT1MzWEdIQjdMVllHQktRVkpHQ1ozUjRKTDVFNENCU1dKNUFMSUpVSEJLUzYyNjM2NDRMJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDdXJyZW5jeSBjb252ZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY29udmVydCB3ZWkgYW1vdW50cyB0byBFVEgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAxIHdlaVxuICAgICAgYmFzZWNvaW5FdGguYmFzZVVuaXRzVG9CaWdVbml0cygxKS5zaG91bGQuZXF1YWwoJzAuMDAwMDAwMDAwMDAwMDAwMDAxJyk7XG4gICAgICAvLyAxMDAgd2VpXG4gICAgICBiYXNlY29pbkV0aC5iYXNlVW5pdHNUb0JpZ1VuaXRzKDEwMCkuc2hvdWxkLmVxdWFsKCcwLjAwMDAwMDAwMDAwMDAwMDEnKTtcbiAgICAgIC8vIDEgRVRIXG4gICAgICBiYXNlY29pbkV0aC5iYXNlVW5pdHNUb0JpZ1VuaXRzKCcxMDAwMDAwMDAwMDAwMDAwMDAwJykuc2hvdWxkLmVxdWFsKCcxJyk7XG4gICAgICAvLyBvdGhlcnNcbiAgICAgIGJhc2Vjb2luRXRoLmJhc2VVbml0c1RvQmlnVW5pdHMoJzEwMDAwMDAwMTAwMDAwMDAwMDAnKS5zaG91bGQuZXF1YWwoJzEuMDAwMDAwMDEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBzYXRvc2hpIGFtb3VudHMgdG8gQlRDJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gMSBzYXRvc2hpXG4gICAgICBiYXNlY29pbkJ0Yy5iYXNlVW5pdHNUb0JpZ1VuaXRzKDEpLnNob3VsZC5lcXVhbCgnMC4wMDAwMDAwMScpO1xuICAgICAgLy8gMTAwIHNhdG9zaGlcbiAgICAgIGJhc2Vjb2luQnRjLmJhc2VVbml0c1RvQmlnVW5pdHMoMTAwKS5zaG91bGQuZXF1YWwoJzAuMDAwMDAxJyk7XG4gICAgICAvLyAxIEJUQ1xuICAgICAgYmFzZWNvaW5CdGMuYmFzZVVuaXRzVG9CaWdVbml0cygxMDAwMDAwMDApLnNob3VsZC5lcXVhbCgnMScpO1xuICAgICAgLy8gMjAwMCBCVENcbiAgICAgIGJhc2Vjb2luQnRjLmJhc2VVbml0c1RvQmlnVW5pdHMoMjAwMDAwMDAwMDAwKS5zaG91bGQuZXF1YWwoJzIwMDAnKTtcbiAgICAgIC8vIG90aGVyc1xuICAgICAgYmFzZWNvaW5CdGMuYmFzZVVuaXRzVG9CaWdVbml0cygyMDAwMDAzOTc5MDEpLnNob3VsZC5lcXVhbCgnMjAwMC4wMDM5NzkwMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHN0cm9vcCBhbW91bnRzIHRvIFhMTScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIDEgc3Ryb29wXG4gICAgICBiYXNlY29pblhsbS5iYXNlVW5pdHNUb0JpZ1VuaXRzKCcxJykuc2hvdWxkLmVxdWFsKCcwLjAwMDAwMDEnKTtcbiAgICAgIC8vIDEwMCBzdHJvb3BzXG4gICAgICBiYXNlY29pblhsbS5iYXNlVW5pdHNUb0JpZ1VuaXRzKCcxMDAnKS5zaG91bGQuZXF1YWwoJzAuMDAwMDEnKTtcbiAgICAgIC8vIDEgWExNXG4gICAgICBiYXNlY29pblhsbS5iYXNlVW5pdHNUb0JpZ1VuaXRzKCcxMDAwMDAwMCcpLnNob3VsZC5lcXVhbCgnMScpO1xuICAgICAgLy8gb3RoZXJzXG4gICAgICBiYXNlY29pblhsbS5iYXNlVW5pdHNUb0JpZ1VuaXRzKCcxMDAwMDAwMScpLnNob3VsZC5lcXVhbCgnMS4wMDAwMDAxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYW1vdW50cyB0byBORUFSJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW5OZWFyLmJhc2VVbml0c1RvQmlnVW5pdHMoJzUzNDgxNjIzOTIyODcxODc0OTk5OTkwMTAnKS5zaG91bGQuZXF1YWwoJzUuMzQ4MTYyMzkyMjg3MTg3NDk5OTk5MDEnKTtcblxuICAgICAgYmFzZWNvaW5OZWFyLmJhc2VVbml0c1RvQmlnVW5pdHMoJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTAnKS5zaG91bGQuZXF1YWwoJzUuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnKTtcblxuICAgICAgYmFzZWNvaW5OZWFyLmJhc2VVbml0c1RvQmlnVW5pdHMoJzE5Nzg5NTIyOTUzODg2NzQzNzQ5OTk5OTgwMicpLnNob3VsZC5lcXVhbCgnMTk3Ljg5NTIyOTUzODg2NzQzNzQ5OTk5OTgwMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGFtb3VudHMgdG8gRU9TJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW5Fb3MuYmFzZVVuaXRzVG9CaWdVbml0cygnMScpLnNob3VsZC5lcXVhbCgnMC4wMDAxJyk7XG5cbiAgICAgIGJhc2Vjb2luRW9zLmJhc2VVbml0c1RvQmlnVW5pdHMoJzEyMzQnKS5zaG91bGQuZXF1YWwoJzAuMTIzNCcpO1xuXG4gICAgICBiYXNlY29pbkVvcy5iYXNlVW5pdHNUb0JpZ1VuaXRzKCcxMjM0NTY3ODgnKS5zaG91bGQuZXF1YWwoJzEyMzQ1LjY3ODgnKTtcblxuICAgICAgLy8gZm9yIGNoZXggdG9rZW4sIHdlIG5lZWQgdG8gcm91bmQgdG8gOCBkZWNpbWFsIHBsYWNlc1xuICAgICAgYmFzZWNvaW5Fb3NDaGV4LmJhc2VVbml0c1RvQmlnVW5pdHMoJzEnKS5zaG91bGQuZXF1YWwoJzAuMDAwMDAwMDEnKTtcblxuICAgICAgYmFzZWNvaW5Fb3NDaGV4LmJhc2VVbml0c1RvQmlnVW5pdHMoJzEyMzQnKS5zaG91bGQuZXF1YWwoJzAuMDAwMDEyMzQnKTtcblxuICAgICAgYmFzZWNvaW5Fb3NDaGV4LmJhc2VVbml0c1RvQmlnVW5pdHMoJzEyMzQ1Njc4OCcpLnNob3VsZC5lcXVhbCgnMS4yMzQ1Njc4OCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3VwcG9ydHNCbG9ja1RhcmdldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luRXRoLnN1cHBvcnRzQmxvY2tUYXJnZXQoKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9rZW4gaW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ0VSQzIwIFRva2VucyBpbml0aWFsaXplZCB3aXRoIG5hbWUgYW5kIGNvbnRyYWN0IHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgRXJjMjBUb2tlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luRXJjMjBUb2tlbldpdGhOYW1lLnNob3VsZC5iZS5pbnN0YW5jZW9mKEVyYzIwVG9rZW4pO1xuICAgICAgYmFzZWNvaW5FcmMyMFRva2VuV2l0aENvbnRyYWN0SGFzaC5zaG91bGQuYmUuaW5zdGFuY2VvZihFcmMyMFRva2VuKTtcbiAgICB9KTtcblxuICAgIGl0KCdFUkMyMCBUb2tlbnMgaW5pdGlhbGl6ZWQgd2l0aCBuYW1lIGFuZCBjb250cmFjdCBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIGVhY2ggb3RoZXJzIGNvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW5FcmMyMFRva2VuV2l0aE5hbWUuc2hvdWxkLmJlLmluc3RhbmNlb2YoYmFzZWNvaW5FcmMyMFRva2VuV2l0aENvbnRyYWN0SGFzaC5jb25zdHJ1Y3Rvcik7XG4gICAgICBiYXNlY29pbkVyYzIwVG9rZW5XaXRoQ29udHJhY3RIYXNoLnNob3VsZC5iZS5pbnN0YW5jZW9mKGJhc2Vjb2luRXJjMjBUb2tlbldpdGhDb250cmFjdEhhc2guY29uc3RydWN0b3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ0VSQzIwIFRva2VuIGNvbXBhcmlzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbkVyYzIwVG9rZW5XaXRoTmFtZS5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKGJhc2Vjb2luRXJjMjBUb2tlbldpdGhDb250cmFjdEhhc2guZ2V0QmFzZUZhY3RvcigpKTtcbiAgICAgIGJhc2Vjb2luRXJjMjBUb2tlbldpdGhOYW1lLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKGJhc2Vjb2luRXJjMjBUb2tlbldpdGhDb250cmFjdEhhc2guZ2V0Q2hhaW4oKSk7XG4gICAgICBiYXNlY29pbkVyYzIwVG9rZW5XaXRoTmFtZS5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoYmFzZWNvaW5FcmMyMFRva2VuV2l0aENvbnRyYWN0SGFzaC5nZXRGYW1pbHkoKSk7XG4gICAgICBiYXNlY29pbkVyYzIwVG9rZW5XaXRoTmFtZS5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbChiYXNlY29pbkVyYzIwVG9rZW5XaXRoQ29udHJhY3RIYXNoLmdldEZ1bGxOYW1lKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1N0ZWxsYXIgVG9rZW5zIHNob3VsZCBiZSBpbnN0YW5jZXMgb2YgU3RlbGxhclRva2VuJywgZnVuY3Rpb24gKCkge1xuICAgICAgKGJhc2VDb2luU3RlbGxhclRva2VuIGluc3RhbmNlb2YgU3RlbGxhclRva2VuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAoYmFzZUNvaW5TdGVsbGFyVG9rZW4gaW5zdGFuY2VvZiBTdGVsbGFyVG9rZW4pLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdHb2VybGkgRVJDMjAgVG9rZW5zIHNldCB0byBndGV0aCBhbmQgS292YW4gRVJDMjAgVG9rZW5zIHNldCB0byB0ZXRoJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZ29lcmxpIHRva2VuXG4gICAgICBjb25zdCBnb2VybGlUb2tlbiA9IGJpdGdvLmNvaW4oJ2d1c2R0Jyk7XG4gICAgICBnb2VybGlUb2tlbi5jb2luLnNob3VsZC5lcXVhbCgnZ3RldGgnKTtcbiAgICAgIGdvZXJsaVRva2VuLm5ldHdvcmsuc2hvdWxkLmVxdWFsKCdUZXN0bmV0Jyk7XG4gICAgICBnb2VybGlUb2tlbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2V0aCcpO1xuICAgICAgLy8ga292YW4gdG9rZW5cbiAgICAgIGNvbnN0IGtvdmFuVG9rZW4gPSBiaXRnby5jb2luKCd0ZXJjJyk7XG4gICAgICBrb3ZhblRva2VuLmNvaW4uc2hvdWxkLmVxdWFsKCd0ZXRoJyk7XG4gICAgICBrb3ZhblRva2VuLm5ldHdvcmsuc2hvdWxkLmVxdWFsKCdUZXN0bmV0Jyk7XG4gICAgICBrb3ZhblRva2VuLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnZXRoJyk7XG4gICAgICAvLyBob29kaSB0b2tlblxuICAgICAgY29uc3QgaG9vZGlUb2tlbiA9IGJpdGdvLmNvaW4oJ2JnZXJjaCcpO1xuICAgICAgaG9vZGlUb2tlbi5jb2luLnNob3VsZC5lcXVhbCgnaHRldGgnKTtcbiAgICAgIGhvb2RpVG9rZW4ubmV0d29yay5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQnKTtcbiAgICAgIGhvb2RpVG9rZW4uZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdldGgnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==