UNPKG

appium-adb

Version:

Android Debug Bridge interface

186 lines (155 loc) 23.9 kB
'use strict'; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _Promise = require('babel-runtime/core-js/promise')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; var _this = this; var _libHelpers = require('../../lib/helpers'); var _appiumTestSupport = require('appium-test-support'); var _appiumSupport = require('appium-support'); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _chai = require('chai'); var _chai2 = _interopRequireDefault(_chai); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var should = _chai2['default'].should; describe('helpers', function () { describe('getPossibleActivityNames', function () { it('should correctly remove pkg from pkg.activity.name', function () { (0, _libHelpers.getPossibleActivityNames)('pkg', 'pkg.activity.name').should.include('.activity.name'); }); it('should return .act.name when act.name is passed', function () { (0, _libHelpers.getPossibleActivityNames)('pkg', 'act.name').should.include('.act.name'); }); it('should not amend a valid activity name', function () { (0, _libHelpers.getPossibleActivityNames)('pkg', '.activity.name').should.include('.activity.name'); }); it('should handle case where application id is different from package name', function () { (0, _libHelpers.getPossibleActivityNames)('com.ga.aaa.android.bbb.activities.local', 'com.ga.aaa.android.bbb.activity.FirstLaunchActivity').should.include('com.ga.aaa.android.bbb.activity.FirstLaunchActivity'); }); }); describe('getDirectories', (0, _appiumTestSupport.withMocks)({ fs: _appiumSupport.fs }, function (mocks) { it('should sort the directories', function callee$2$0() { var rootPath, directories; return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: rootPath = '/path/to/root'; directories = ['c', 'b', 'a', '1', '2']; mocks.fs.expects('readdir').once().withExactArgs(rootPath).returns(directories); mocks.fs.expects('lstat').exactly(5).returns(_Promise.resolve({ isDirectory: function isDirectory() { return true; } })); context$3$0.next = 6; return _regeneratorRuntime.awrap((0, _libHelpers.getDirectories)(rootPath)); case 6: context$3$0.t0 = ['1', '2', 'a', 'b', 'c']; context$3$0.sent.should.eql(context$3$0.t0); mocks.fs.verify(); case 9: case 'end': return context$3$0.stop(); } }, null, _this); }); })); describe('getAndroidPlatformAndPath', (0, _appiumTestSupport.withMocks)({ fs: _appiumSupport.fs, path: _path2['default'] }, function (mocks) { it('should return null if no ANDROID_HOME is set', function callee$2$0() { return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: context$3$0.next = 2; return _regeneratorRuntime.awrap((0, _libHelpers.getAndroidPlatformAndPath)()); case 2: context$3$0.t0 = context$3$0.sent; should(context$3$0.t0).not.exist; case 4: case 'end': return context$3$0.stop(); } }, null, _this); }); it('should get the latest available API', function callee$2$0() { var oldAndroidHome, platformAndPath; return _regeneratorRuntime.async(function callee$2$0$(context$3$0) { while (1) switch (context$3$0.prev = context$3$0.next) { case 0: oldAndroidHome = process.env.ANDROID_HOME; process.env.ANDROID_HOME = '/path/to/android/home'; mocks.fs.expects('exists').exactly(2).onCall(0).returns(false).onCall(1).returns(true); mocks.path.expects('resolve').exactly(4).onCall(0).returns('/path/to/apis0').onCall(1).returns('/path/to/apis1').onCall(2).returns('/path/to/apis2').onCall(3).returns('/path/to/apis3'); context$3$0.next = 6; return _regeneratorRuntime.awrap((0, _libHelpers.getAndroidPlatformAndPath)()); case 6: platformAndPath = context$3$0.sent; platformAndPath.platform.should.equal('android-23'); platformAndPath.platformPath.should.equal('/path/to/apis3'); mocks.fs.verify(); mocks.path.verify(); process.env.ANDROID_HOME = oldAndroidHome; case 12: case 'end': return context$3$0.stop(); } }, null, _this); }); })); describe('buildStartCmd', function () { var startOptions = { pkg: 'com.something', activity: '.SomeActivity' }; it('should parse optionalIntentArguments with single key', function () { var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key' }, startOptions), 20); cmd[cmd.length - 2].should.eql('-d'); cmd[cmd.length - 1].should.eql('key'); }); it('should parse optionalIntentArguments with single key/value pair', function () { var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key value' }, startOptions), 20); cmd[cmd.length - 3].should.eql('-d'); cmd[cmd.length - 2].should.eql('key'); cmd[cmd.length - 1].should.eql('value'); }); it('should parse optionalIntentArguments with single key/value pair with spaces', function () { var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key value value2' }, startOptions), 20); cmd[cmd.length - 3].should.eql('-d'); cmd[cmd.length - 2].should.eql('key'); cmd[cmd.length - 1].should.eql('value value2'); }); it('should parse optionalIntentArguments with multiple keys', function () { var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key1 -e key2' }, startOptions), 20); cmd[cmd.length - 4].should.eql('-d'); cmd[cmd.length - 3].should.eql('key1'); cmd[cmd.length - 2].should.eql('-e'); cmd[cmd.length - 1].should.eql('key2'); }); it('should parse optionalIntentArguments with multiple key/value pairs', function () { var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d key1 value1 -e key2 value2' }, startOptions), 20); cmd[cmd.length - 6].should.eql('-d'); cmd[cmd.length - 5].should.eql('key1'); cmd[cmd.length - 4].should.eql('value1'); cmd[cmd.length - 3].should.eql('-e'); cmd[cmd.length - 2].should.eql('key2'); cmd[cmd.length - 1].should.eql('value2'); }); it('should parse optionalIntentArguments with hyphens', function () { var arg = 'http://some-url-with-hyphens.com/'; var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d ' + arg }, startOptions), 20); cmd[cmd.length - 2].should.eql('-d'); cmd[cmd.length - 1].should.eql(arg); }); it('should parse optionalIntentArguments with multiple arguments with hyphens', function () { var arg1 = 'http://some-url-with-hyphens.com/'; var arg2 = 'http://some-other-url-with-hyphens.com/'; var cmd = (0, _libHelpers.buildStartCmd)(_lodash2['default'].defaults({ optionalIntentArguments: '-d ' + arg1 + ' -e key ' + arg2 }, startOptions), 20); cmd[cmd.length - 5].should.eql('-d'); cmd[cmd.length - 4].should.eql(arg1); cmd[cmd.length - 3].should.eql('-e'); cmd[cmd.length - 2].should.eql('key'); cmd[cmd.length - 1].should.eql(arg2); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvdW5pdC9oZWxwZXItc3BlY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OzswQkFDOEIsbUJBQW1COztpQ0FDdkIscUJBQXFCOzs2QkFDNUIsZ0JBQWdCOztvQkFDbEIsTUFBTTs7OztvQkFDTixNQUFNOzs7O3NCQUNULFFBQVE7Ozs7QUFHdEIsSUFBTSxNQUFNLEdBQUcsa0JBQUssTUFBTSxDQUFDOztBQUUzQixRQUFRLENBQUMsU0FBUyxFQUFFLFlBQU07QUFDeEIsVUFBUSxDQUFDLDBCQUEwQixFQUFFLFlBQU07QUFDekMsTUFBRSxDQUFDLG9EQUFvRCxFQUFFLFlBQU07QUFDN0QsZ0RBQXlCLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUNqRCxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDckMsQ0FBQyxDQUFDO0FBQ0gsTUFBRSxDQUFDLGlEQUFpRCxFQUFFLFlBQU07QUFDMUQsZ0RBQXlCLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNoQyxDQUFDLENBQUM7QUFDSCxNQUFFLENBQUMsd0NBQXdDLEVBQUUsWUFBTTtBQUNqRCxnREFBeUIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQzlDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNyQyxDQUFDLENBQUM7QUFDSCxNQUFFLENBQUMsd0VBQXdFLEVBQUUsWUFBTTtBQUNoRixnREFBeUIseUNBQXlDLEVBQUUscURBQXFELENBQUMsQ0FDdkgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQzFFLENBQUMsQ0FBQztHQUNMLENBQUMsQ0FBQzs7QUFFSCxVQUFRLENBQUMsZ0JBQWdCLEVBQUUsa0NBQVUsRUFBQyxFQUFFLG1CQUFBLEVBQUMsRUFBRSxVQUFDLEtBQUssRUFBSztBQUNwRCxNQUFFLENBQUMsNkJBQTZCLEVBQUU7VUFD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LENBQUM7S0FDbkMsQ0FBQyxDQUFDO0FBQ0gsTUFBRSxDQUFDLDJFQUEyRSxFQUFFLFlBQU07QUFDcEYsVUFBSSxJQUFJLEdBQUcsbUNBQW1DLENBQUM7QUFDL0MsVUFBSSxJQUFJLEdBQUcseUNBQXlDLENBQUM7QUFDckQsVUFBSSxHQUFHLEdBQUcsK0JBQWMsb0JBQUUsUUFBUSxDQUFDO0FBQ2pDLCtCQUF1QixVQUFRLElBQUksZ0JBQVcsSUFBSSxBQUFFO09BQ3JELEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxTQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLFNBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsU0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxTQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3BDLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKLENBQUMsQ0FBQyIsImZpbGUiOiJ0ZXN0L3VuaXQvaGVscGVyLXNwZWNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0UG9zc2libGVBY3Rpdml0eU5hbWVzLCBnZXREaXJlY3RvcmllcywgZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCxcbiAgICAgICAgIGJ1aWxkU3RhcnRDbWQgfSBmcm9tICcuLi8uLi9saWIvaGVscGVycyc7XG5pbXBvcnQgeyB3aXRoTW9ja3MgfSBmcm9tICdhcHBpdW0tdGVzdC1zdXBwb3J0JztcbmltcG9ydCB7IGZzIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuY29uc3Qgc2hvdWxkID0gY2hhaS5zaG91bGQ7XG5cbmRlc2NyaWJlKCdoZWxwZXJzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0UG9zc2libGVBY3Rpdml0eU5hbWVzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IHJlbW92ZSBwa2cgZnJvbSBwa2cuYWN0aXZpdHkubmFtZScsICgpID0+IHtcbiAgICAgIGdldFBvc3NpYmxlQWN0aXZpdHlOYW1lcygncGtnJywgJ3BrZy5hY3Rpdml0eS5uYW1lJylcbiAgICAgICAgLnNob3VsZC5pbmNsdWRlKCcuYWN0aXZpdHkubmFtZScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIC5hY3QubmFtZSB3aGVuIGFjdC5uYW1lIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGdldFBvc3NpYmxlQWN0aXZpdHlOYW1lcygncGtnJywgJ2FjdC5uYW1lJylcbiAgICAgICAgLnNob3VsZC5pbmNsdWRlKCcuYWN0Lm5hbWUnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIG5vdCBhbWVuZCBhIHZhbGlkIGFjdGl2aXR5IG5hbWUnLCAoKSA9PiB7XG4gICAgICBnZXRQb3NzaWJsZUFjdGl2aXR5TmFtZXMoJ3BrZycsICcuYWN0aXZpdHkubmFtZScpXG4gICAgICAgIC5zaG91bGQuaW5jbHVkZSgnLmFjdGl2aXR5Lm5hbWUnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBjYXNlIHdoZXJlIGFwcGxpY2F0aW9uIGlkIGlzIGRpZmZlcmVudCBmcm9tIHBhY2thZ2UgbmFtZScsICgpID0+IHtcbiAgICAgICBnZXRQb3NzaWJsZUFjdGl2aXR5TmFtZXMoJ2NvbS5nYS5hYWEuYW5kcm9pZC5iYmIuYWN0aXZpdGllcy5sb2NhbCcsICdjb20uZ2EuYWFhLmFuZHJvaWQuYmJiLmFjdGl2aXR5LkZpcnN0TGF1bmNoQWN0aXZpdHknKVxuICAgICAgICAgLnNob3VsZC5pbmNsdWRlKCdjb20uZ2EuYWFhLmFuZHJvaWQuYmJiLmFjdGl2aXR5LkZpcnN0TGF1bmNoQWN0aXZpdHknKTtcbiAgICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXREaXJlY3RvcmllcycsIHdpdGhNb2Nrcyh7ZnN9LCAobW9ja3MpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNvcnQgdGhlIGRpcmVjdG9yaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHJvb3RQYXRoID0gJy9wYXRoL3RvL3Jvb3QnO1xuICAgICAgbGV0IGRpcmVjdG9yaWVzID0gWydjJywgJ2InLCAnYScsICcxJywgJzInXTtcbiAgICAgIG1vY2tzLmZzLmV4cGVjdHMoJ3JlYWRkaXInKVxuICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3Mocm9vdFBhdGgpXG4gICAgICAgIC5yZXR1cm5zKGRpcmVjdG9yaWVzKTtcbiAgICAgIG1vY2tzLmZzLmV4cGVjdHMoJ2xzdGF0JylcbiAgICAgICAgLmV4YWN0bHkoNSlcbiAgICAgICAgLnJldHVybnMoUHJvbWlzZS5yZXNvbHZlKHtpc0RpcmVjdG9yeTogKCkgPT4ge3JldHVybiB0cnVlO319KSk7XG4gICAgICAoYXdhaXQgZ2V0RGlyZWN0b3JpZXMocm9vdFBhdGgpKS5zaG91bGQuZXFsKFsnMScsICcyJywgJ2EnLCAnYicsICdjJ10pO1xuICAgICAgbW9ja3MuZnMudmVyaWZ5KCk7XG4gICAgfSk7XG4gIH0pKTtcblxuICBkZXNjcmliZSgnZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCcsIHdpdGhNb2Nrcyh7ZnMsIHBhdGh9LCAobW9ja3MpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIGlmIG5vIEFORFJPSURfSE9NRSBpcyBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBzaG91bGQoYXdhaXQgZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCgpKS5ub3QuZXhpc3Q7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBnZXQgdGhlIGxhdGVzdCBhdmFpbGFibGUgQVBJJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IG9sZEFuZHJvaWRIb21lID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9IT01FO1xuICAgICAgcHJvY2Vzcy5lbnYuQU5EUk9JRF9IT01FID0gJy9wYXRoL3RvL2FuZHJvaWQvaG9tZSc7XG4gICAgICBtb2Nrcy5mcy5leHBlY3RzKCdleGlzdHMnKVxuICAgICAgICAuZXhhY3RseSgyKVxuICAgICAgICAub25DYWxsKDApLnJldHVybnMoZmFsc2UpXG4gICAgICAgIC5vbkNhbGwoMSkucmV0dXJucyh0cnVlKTtcbiAgICAgIG1vY2tzLnBhdGguZXhwZWN0cygncmVzb2x2ZScpXG4gICAgICAgIC5leGFjdGx5KDQpXG4gICAgICAgIC5vbkNhbGwoMCkucmV0dXJucygnL3BhdGgvdG8vYXBpczAnKVxuICAgICAgICAub25DYWxsKDEpLnJldHVybnMoJy9wYXRoL3RvL2FwaXMxJylcbiAgICAgICAgLm9uQ2FsbCgyKS5yZXR1cm5zKCcvcGF0aC90by9hcGlzMicpXG4gICAgICAgIC5vbkNhbGwoMykucmV0dXJucygnL3BhdGgvdG8vYXBpczMnKTtcblxuICAgICAgbGV0IHBsYXRmb3JtQW5kUGF0aCA9IGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgoKTtcbiAgICAgIHBsYXRmb3JtQW5kUGF0aC5wbGF0Zm9ybS5zaG91bGQuZXF1YWwoJ2FuZHJvaWQtMjMnKTtcbiAgICAgIHBsYXRmb3JtQW5kUGF0aC5wbGF0Zm9ybVBhdGguc2hvdWxkLmVxdWFsKCcvcGF0aC90by9hcGlzMycpO1xuXG4gICAgICBtb2Nrcy5mcy52ZXJpZnkoKTtcbiAgICAgIG1vY2tzLnBhdGgudmVyaWZ5KCk7XG4gICAgICBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgPSBvbGRBbmRyb2lkSG9tZTtcbiAgICB9KTtcbiAgfSkpO1xuXG4gIGRlc2NyaWJlKCdidWlsZFN0YXJ0Q21kJywgKCkgPT4ge1xuICAgIGxldCBzdGFydE9wdGlvbnMgPSB7XG4gICAgICBwa2c6ICdjb20uc29tZXRoaW5nJyxcbiAgICAgIGFjdGl2aXR5OiAnLlNvbWVBY3Rpdml0eSdcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIHNpbmdsZSBrZXknLCAoKSA9PiB7XG4gICAgICBsZXQgY21kID0gYnVpbGRTdGFydENtZChfLmRlZmF1bHRzKHtvcHRpb25hbEludGVudEFyZ3VtZW50czogJy1kIGtleSd9LCBzdGFydE9wdGlvbnMpLCAyMCk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCctZCcpO1xuICAgICAgY21kW2NtZC5sZW5ndGgtMV0uc2hvdWxkLmVxbCgna2V5Jyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIHNpbmdsZSBrZXkvdmFsdWUgcGFpcicsICgpID0+IHtcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe29wdGlvbmFsSW50ZW50QXJndW1lbnRzOiAnLWQga2V5IHZhbHVlJ30sIHN0YXJ0T3B0aW9ucyksIDIwKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTNdLnNob3VsZC5lcWwoJy1kJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCdrZXknKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTFdLnNob3VsZC5lcWwoJ3ZhbHVlJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIHNpbmdsZSBrZXkvdmFsdWUgcGFpciB3aXRoIHNwYWNlcycsICgpID0+IHtcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe29wdGlvbmFsSW50ZW50QXJndW1lbnRzOiAnLWQga2V5IHZhbHVlIHZhbHVlMid9LCBzdGFydE9wdGlvbnMpLCAyMCk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0zXS5zaG91bGQuZXFsKCctZCcpO1xuICAgICAgY21kW2NtZC5sZW5ndGgtMl0uc2hvdWxkLmVxbCgna2V5Jyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0xXS5zaG91bGQuZXFsKCd2YWx1ZSB2YWx1ZTInKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHdpdGggbXVsdGlwbGUga2V5cycsICgpID0+IHtcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe29wdGlvbmFsSW50ZW50QXJndW1lbnRzOiAnLWQga2V5MSAtZSBrZXkyJ30sIHN0YXJ0T3B0aW9ucyksIDIwKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTRdLnNob3VsZC5lcWwoJy1kJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0zXS5zaG91bGQuZXFsKCdrZXkxJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCctZScpO1xuICAgICAgY21kW2NtZC5sZW5ndGgtMV0uc2hvdWxkLmVxbCgna2V5MicpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFyc2Ugb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgd2l0aCBtdWx0aXBsZSBrZXkvdmFsdWUgcGFpcnMnLCAoKSA9PiB7XG4gICAgICBsZXQgY21kID0gYnVpbGRTdGFydENtZChfLmRlZmF1bHRzKHtvcHRpb25hbEludGVudEFyZ3VtZW50czogJy1kIGtleTEgdmFsdWUxIC1lIGtleTIgdmFsdWUyJ30sIHN0YXJ0T3B0aW9ucyksIDIwKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTZdLnNob3VsZC5lcWwoJy1kJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC01XS5zaG91bGQuZXFsKCdrZXkxJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC00XS5zaG91bGQuZXFsKCd2YWx1ZTEnKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTNdLnNob3VsZC5lcWwoJy1lJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCdrZXkyJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0xXS5zaG91bGQuZXFsKCd2YWx1ZTInKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIHdpdGggaHlwaGVucycsICgpID0+IHtcbiAgICAgIGxldCBhcmcgPSAnaHR0cDovL3NvbWUtdXJsLXdpdGgtaHlwaGVucy5jb20vJztcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe29wdGlvbmFsSW50ZW50QXJndW1lbnRzOiBgLWQgJHthcmd9YH0sIHN0YXJ0T3B0aW9ucyksIDIwKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTJdLnNob3VsZC5lcWwoJy1kJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0xXS5zaG91bGQuZXFsKGFyZyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBvcHRpb25hbEludGVudEFyZ3VtZW50cyB3aXRoIG11bHRpcGxlIGFyZ3VtZW50cyB3aXRoIGh5cGhlbnMnLCAoKSA9PiB7XG4gICAgICBsZXQgYXJnMSA9ICdodHRwOi8vc29tZS11cmwtd2l0aC1oeXBoZW5zLmNvbS8nO1xuICAgICAgbGV0IGFyZzIgPSAnaHR0cDovL3NvbWUtb3RoZXItdXJsLXdpdGgtaHlwaGVucy5jb20vJztcbiAgICAgIGxldCBjbWQgPSBidWlsZFN0YXJ0Q21kKF8uZGVmYXVsdHMoe1xuICAgICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogYC1kICR7YXJnMX0gLWUga2V5ICR7YXJnMn1gXG4gICAgICB9LCBzdGFydE9wdGlvbnMpLCAyMCk7XG4gICAgICBjbWRbY21kLmxlbmd0aC01XS5zaG91bGQuZXFsKCctZCcpO1xuICAgICAgY21kW2NtZC5sZW5ndGgtNF0uc2hvdWxkLmVxbChhcmcxKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTNdLnNob3VsZC5lcWwoJy1lJyk7XG4gICAgICBjbWRbY21kLmxlbmd0aC0yXS5zaG91bGQuZXFsKCdrZXknKTtcbiAgICAgIGNtZFtjbWQubGVuZ3RoLTFdLnNob3VsZC5lcWwoYXJnMik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=