testcafe 2.2.0 → 2.3.0-rc.2

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.
Files changed (78) hide show
  1. package/bin/testcafe-with-v8-flag-filter.js +16 -3
  2. package/lib/api/exportable-lib/index.mjs +27 -0
  3. package/lib/api/skip-js-errors/index.js +36 -12
  4. package/lib/api/structure/fixture.js +6 -1
  5. package/lib/api/structure/test.js +7 -1
  6. package/lib/browser/connection/gateway.js +13 -1
  7. package/lib/browser/connection/index.js +6 -1
  8. package/lib/browser/connection/service-routes.js +2 -1
  9. package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -1
  10. package/lib/browser/provider/index.js +4 -1
  11. package/lib/cli/argument-parser/index.js +58 -59
  12. package/lib/cli/cli.js +3 -2
  13. package/lib/client/automation/index.js +88 -4
  14. package/lib/client/automation/index.min.js +1 -1
  15. package/lib/client/browser/idle-page/index.js +7 -5
  16. package/lib/client/core/deps/hammerhead.js +24 -0
  17. package/lib/client/core/index.js +21 -6
  18. package/lib/client/core/index.min.js +1 -1
  19. package/lib/client/driver/index.js +140 -52
  20. package/lib/client/driver/index.min.js +1 -1
  21. package/lib/client/test-run/iframe.js.mustache +2 -1
  22. package/lib/client/test-run/index.js.mustache +30 -28
  23. package/lib/client/ui/index.js +30 -23
  24. package/lib/client/ui/index.min.js +1 -1
  25. package/lib/compiler/babel/load-libs.js +10 -9
  26. package/lib/compiler/compilers.js +7 -7
  27. package/lib/compiler/esm-loader.js +38 -0
  28. package/lib/compiler/index.js +8 -7
  29. package/lib/compiler/interfaces.js +1 -1
  30. package/lib/compiler/prevent-module-caching-suffix.js +6 -0
  31. package/lib/compiler/test-file/add-export-api.js +3 -9
  32. package/lib/compiler/test-file/api-based.js +30 -14
  33. package/lib/compiler/test-file/base.js +4 -1
  34. package/lib/compiler/test-file/formats/coffeescript/compiler.js +5 -4
  35. package/lib/compiler/test-file/formats/es-next/compiler.js +23 -11
  36. package/lib/compiler/test-file/formats/extensions.js +15 -0
  37. package/lib/compiler/test-file/formats/typescript/compiler.js +27 -17
  38. package/lib/compiler/test-file/get-exportable-lib-path.js +17 -0
  39. package/lib/configuration/option-names.js +2 -1
  40. package/lib/errors/is-internal-stack-frame.js +3 -2
  41. package/lib/errors/process-test-fn-error.js +3 -2
  42. package/lib/errors/runtime/index.js +18 -4
  43. package/lib/errors/runtime/templates.js +2 -1
  44. package/lib/errors/test-run/utils.js +8 -3
  45. package/lib/errors/types.js +2 -1
  46. package/lib/proxyless/api-base.js +25 -0
  47. package/lib/proxyless/client/event-simulator.js +35 -0
  48. package/lib/proxyless/client/types.js +11 -0
  49. package/lib/proxyless/client/utils.js +24 -0
  50. package/lib/proxyless/console-messages/formatter.js +23 -0
  51. package/lib/proxyless/console-messages/index.js +56 -0
  52. package/lib/proxyless/console-messages/types.js +5 -0
  53. package/lib/proxyless/index.js +29 -2
  54. package/lib/proxyless/js-error-handling/index.js +70 -0
  55. package/lib/proxyless/native-dialogs/index.js +40 -0
  56. package/lib/proxyless/request-pipeline/index.js +6 -3
  57. package/lib/proxyless/resource-injector.js +7 -3
  58. package/lib/proxyless/session-storage/index.js +30 -0
  59. package/lib/proxyless/types.js +8 -1
  60. package/lib/proxyless/utils/cdp.js +19 -2
  61. package/lib/runner/bootstrapper.js +3 -2
  62. package/lib/runner/browser-job.js +1 -1
  63. package/lib/services/compiler/service.js +4 -4
  64. package/lib/services/utils/ipc/interfaces.js +1 -1
  65. package/lib/services/utils/ipc/proxy.js +1 -4
  66. package/lib/shared/utils/is-file-protocol.js +9 -0
  67. package/lib/test-run/commands/actions.js +2 -2
  68. package/lib/test-run/index.js +36 -9
  69. package/lib/testcafe.js +3 -3
  70. package/lib/utils/async-event-emitter.js +1 -1
  71. package/lib/utils/convert-to-best-fit-type.js +1 -1
  72. package/lib/utils/get-options/base.js +1 -1
  73. package/lib/utils/setup-sourcemap-support.js +10 -4
  74. package/package.json +11 -7
  75. package/ts-defs/index.d.ts +4 -4
  76. package/ts-defs/selectors.d.ts +2 -2
  77. package/ts-defs/testcafe-scripts.d.ts +2 -2
  78. package/lib/compiler/test-file/exportble-lib-path.js +0 -7
@@ -19,11 +19,11 @@ const user_variables_1 = __importDefault(require("../../api/user-variables"));
19
19
  const execute_js_expression_1 = require("../../test-run/execute-js-expression");
20
20
  const test_run_1 = require("../../errors/test-run");
21
21
  const utils_1 = require("../../errors/test-run/render-error-template/utils");
22
- const setup_sourcemap_support_1 = __importDefault(require("../../utils/setup-sourcemap-support"));
22
+ const setup_sourcemap_support_1 = require("../../utils/setup-sourcemap-support");
23
23
  const handle_errors_1 = require("../../utils/handle-errors");
24
24
  const errors_1 = require("../../shared/errors");
25
25
  const lodash_1 = require("lodash");
26
- (0, setup_sourcemap_support_1.default)();
26
+ (0, setup_sourcemap_support_1.setupSourceMapSupport)();
27
27
  // This is hack for supporting the 'import { t } from "testcafe"' expression in tests.
28
28
  // It caused by using the 'esm' module.
29
29
  require('../../api/test-controller/proxy');
@@ -188,7 +188,7 @@ class CompilerService {
188
188
  await compiler_1.default.cleanUp();
189
189
  }
190
190
  async getTests({ sourceList, compilerOptions, runnableConfigurationId }, baseUrl) {
191
- const compiler = new compiler_1.default(sourceList, compilerOptions, { isCompilerServiceMode: true, baseUrl });
191
+ const compiler = new compiler_1.default(sourceList, compilerOptions, { isCompilerServiceMode: true, baseUrl, experimentalEsm: false });
192
192
  const tests = await compiler.getTests();
193
193
  const units = (0, test_structure_1.flatten)(tests);
194
194
  const unitIds = this._getUnitIds(tests);
@@ -358,4 +358,4 @@ class CompilerService {
358
358
  }
359
359
  exports.default = new CompilerService();
360
360
  module.exports = exports.default;
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb21waWxlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLDhEQUFzQztBQUN0QyxzRUFBNEM7QUFDNUMsZ0ZBQXVEO0FBRXZELG9FQU95QztBQUV6Qyw2QkFJYztBQUVkLDhDQUE4QztBQUM5QyxzREFBMEQ7QUFFMUQseUNBTW9CO0FBZ0NwQixxRUFBNEM7QUFFNUMsa0dBQStFO0FBRS9FLDZEQU82QjtBQUs3Qiw4RUFBcUQ7QUFDckQsZ0ZBQXFHO0FBRXJHLG9EQUsrQjtBQUUvQiw2RUFBeUg7QUFDekgsa0dBQXdFO0FBQ3hFLDZEQUF3RDtBQUN4RCxnREFBbUU7QUFHbkUsbUNBQThCO0FBRTlCLElBQUEsaUNBQXFCLEdBQUUsQ0FBQztBQUV4QixzRkFBc0Y7QUFDdEYsdUNBQXVDO0FBQ3ZDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBc0IzQyxNQUFNLGVBQWU7SUFLakI7UUFDSSxPQUFPLENBQUMsS0FBSyxHQUFHLHVCQUFZLENBQUMsT0FBTyxDQUFDO1FBRXJDLE1BQU0sS0FBSyxHQUFJLFlBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsc0JBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxnQkFBUSxDQUFDLElBQUksNEJBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxvQkFBZSxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsb0NBQW9D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cyBmcm9tICdmcyc7XG5pbXBvcnQgQ29tcGlsZXIgZnJvbSAnLi4vLi4vY29tcGlsZXInO1xuaW1wb3J0IFRlc3RSdW5Qcm94eSBmcm9tICcuL3Rlc3QtcnVuLXByb3h5JztcbmltcG9ydCBUZXN0Q29udHJvbGxlciBmcm9tICcuLi8uLi9hcGkvdGVzdC1jb250cm9sbGVyJztcblxuaW1wb3J0IHtcbiAgICBmbGF0dGVuIGFzIGZsYXR0ZW5UZXN0U3RydWN0dXJlLFxuICAgIGlzRml4dHVyZSxcbiAgICBpc1Rlc3QsXG4gICAgc2VyaWFsaXplIGFzIHNlcmlhbGl6ZVRlc3RTdHJ1Y3R1cmUsXG4gICAgVW5pdCxcbiAgICBVbml0cyxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi90ZXN0LXN0cnVjdHVyZSc7XG5cbmltcG9ydCB7XG4gICAgU0VSVklDRV9JTlBVVF9GRCxcbiAgICBTRVJWSUNFX09VVFBVVF9GRCxcbiAgICBTRVJWSUNFX1NZTkNfRkQsXG59IGZyb20gJy4vaW8nO1xuXG5pbXBvcnQgeyBJUENQcm94eSB9IGZyb20gJy4uL3V0aWxzL2lwYy9wcm94eSc7XG5pbXBvcnQgeyBTZXJ2aWNlVHJhbnNwb3J0IH0gZnJvbSAnLi4vdXRpbHMvaXBjL3RyYW5zcG9ydCc7XG5cbmltcG9ydCB7XG4gICAgQ29tcGlsZXJQcm90b2NvbCxcbiAgICBGdW5jdGlvblByb3BlcnRpZXMsXG4gICAgaXNGaXh0dXJlRnVuY3Rpb25Qcm9wZXJ0eSxcbiAgICBpc1Rlc3RGdW5jdGlvblByb3BlcnR5LFxuICAgIFJ1blRlc3RBcmd1bWVudHMsXG59IGZyb20gJy4vcHJvdG9jb2wnO1xuXG5pbXBvcnQge1xuICAgIEV4ZWN1dGVDb21tYW5kQXJndW1lbnRzLFxuICAgIEV4ZWN1dGVNb2NrUHJlZGljYXRlLFxuICAgIEV4ZWN1dGVSZXF1ZXN0RmlsdGVyUnVsZVByZWRpY2F0ZUFyZ3VtZW50cyxcbiAgICBSZW1vdmVIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnRBcmd1bWVudHMsXG4gICAgUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyxcbiAgICBSZXF1ZXN0SG9va0xvY2F0b3IsXG4gICAgU2V0Q29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnNBcmd1bWVudHMsXG4gICAgU2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzLFxuICAgIFNldE1vY2tBcmd1bWVudHMsXG4gICAgU2V0T3B0aW9uc0FyZ3VtZW50cyxcbiAgICBBZGRSZXF1ZXN0RXZlbnRMaXN0ZW5lcnNBcmd1bWVudHMsXG4gICAgUmVtb3ZlUmVxdWVzdEV2ZW50TGlzdGVuZXJzQXJndW1lbnRzLFxuICAgIEluaXRpYWxpemVUZXN0UnVuRGF0YUFyZ3VtZW50cyxcbiAgICBUZXN0UnVuTG9jYXRvcixcbiAgICBTZXRDdHhBcmd1bWVudHMsXG4gICAgRXhlY3V0ZVJvbGVJbml0Rm5Bcmd1bWVudHMsXG4gICAgVXBkYXRlUm9sZVByb3BlcnR5QXJndW1lbnRzLFxuICAgIEV4ZWN1dGVKc0V4cHJlc3Npb25Bcmd1bWVudHMsXG4gICAgRXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uQXJndW1lbnRzLFxuICAgIENvbW1hbmRMb2NhdG9yLFxuICAgIEFkZFVuZXhwZWN0ZWRFcnJvckFyZ3VtZW50cyxcbiAgICBDaGVja1dpbmRvd0FyZ3VtZW50LFxuICAgIFJlbW92ZUZpeHR1cmVDdHhzQXJndW1lbnRzLFxuICAgIFJlbW92ZVVuaXRzRnJvbVN0YXRlQXJndW1lbnRzLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBDb21waWxlckFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL2NvbXBpbGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IFByb2Nlc3NUaXRsZSBmcm9tICcuLi9wcm9jZXNzLXRpdGxlJztcbmltcG9ydCBUZXN0IGZyb20gJy4uLy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdCc7XG5pbXBvcnQgUmVxdWVzdEhvb2tNZXRob2ROYW1lcyBmcm9tICcuLi8uLi9hcGkvcmVxdWVzdC1ob29rcy9ob29rLW1ldGhvZC1uYW1lcyc7XG5cbmltcG9ydCB7XG4gICAgQ29uZmlndXJlUmVzcG9uc2VFdmVudCxcbiAgICBJbmNvbWluZ01lc3NhZ2VMaWtlSW5pdE9wdGlvbnMsXG4gICAgUmVxdWVzdEV2ZW50LFxuICAgIFJlcXVlc3RGaWx0ZXJSdWxlLFxuICAgIFJlc3BvbnNlTW9jayxcbiAgICByZXNwb25zZU1vY2tTZXRCb2R5TWV0aG9kLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uLy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IFJlcXVlc3RNb2NrIGZyb20gJy4uLy4uL2FwaS9yZXF1ZXN0LWhvb2tzL3JlcXVlc3QtbW9jayc7XG5pbXBvcnQgUm9sZSBmcm9tICcuLi8uLi9yb2xlL3JvbGUnO1xuaW1wb3J0IHVzZXJWYXJpYWJsZXMgZnJvbSAnLi4vLi4vYXBpL3VzZXItdmFyaWFibGVzJztcbmltcG9ydCB7IGV4ZWN1dGVKc0V4cHJlc3Npb24sIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2V4ZWN1dGUtanMtZXhwcmVzc2lvbic7XG5cbmltcG9ydCB7XG4gICAgVW5jYXVnaHRFcnJvckluQ3VzdG9tU2NyaXB0LFxuICAgIFVuY2F1Z2h0RXhjZXB0aW9uRXJyb3IsXG4gICAgVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQsXG4gICAgVW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkVycm9yLFxufSBmcm9tICcuLi8uLi9lcnJvcnMvdGVzdC1ydW4nO1xuXG5pbXBvcnQgeyByZW5kZXJIdG1sV2l0aG91dFN0YWNrLCBzaG91bGRSZW5kZXJIdG1sV2l0aG91dFN0YWNrIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuL3JlbmRlci1lcnJvci10ZW1wbGF0ZS91dGlscyc7XG5pbXBvcnQgc2V0dXBTb3VyY2VNYXBTdXBwb3J0IGZyb20gJy4uLy4uL3V0aWxzL3NldHVwLXNvdXJjZW1hcC1zdXBwb3J0JztcbmltcG9ydCB7IGZvcm1hdEVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlLWVycm9ycyc7XG5pbXBvcnQgeyBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Vycm9ycyc7XG5pbXBvcnQgTWVzc2FnZUJ1cyBmcm9tICcuLi8uLi91dGlscy9tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgeyBXYXJuaW5nTG9nTWVzc2FnZSB9IGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5cbnNldHVwU291cmNlTWFwU3VwcG9ydCgpO1xuXG4vLyBUaGlzIGlzIGhhY2sgZm9yIHN1cHBvcnRpbmcgdGhlICdpbXBvcnQgeyB0IH0gZnJvbSBcInRlc3RjYWZlXCInIGV4cHJlc3Npb24gaW4gdGVzdHMuXG4vLyBJdCBjYXVzZWQgYnkgdXNpbmcgdGhlICdlc20nIG1vZHVsZS5cbnJlcXVpcmUoJy4uLy4uL2FwaS90ZXN0LWNvbnRyb2xsZXIvcHJveHknKTtcblxuaW50ZXJmYWNlIFNlcnZpY2VTdGF0ZSB7XG4gICAgdGVzdFJ1bnM6IHsgW2lkOiBzdHJpbmddOiBUZXN0UnVuUHJveHkgfTtcbiAgICBmaXh0dXJlQ3R4czogeyBbaWQ6IHN0cmluZ106IG9iamVjdCB9O1xuICAgIHVuaXRzOiBVbml0cztcbiAgICBvcHRpb25zOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICByb2xlczogTWFwPHN0cmluZywgUm9sZT47XG59XG5cbmludGVyZmFjZSBXcmFwU2V0TW9ja0FyZ3VtZW50cyBleHRlbmRzIFJlcXVlc3RIb29rTG9jYXRvciB7XG4gICAgZXZlbnQ6IFJlcXVlc3RFdmVudDtcbn1cblxuaW50ZXJmYWNlIEluaXRUZXN0UnVuUHJveHlEYXRhIHtcbiAgICB0ZXN0UnVuSWQ6IHN0cmluZztcbiAgICB0ZXN0OiBUZXN0O1xuICAgIGJyb3dzZXI6IEJyb3dzZXI7XG4gICAgYWN0aXZlV2luZG93SWQ6IHN0cmluZyB8IG51bGw7XG4gICAgbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG59XG5cbmNsYXNzIENvbXBpbGVyU2VydmljZSBpbXBsZW1lbnRzIENvbXBpbGVyUHJvdG9jb2wge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJveHk6IElQQ1Byb3h5O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU6IFNlcnZpY2VTdGF0ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydW5uYWJsZUNvbmZpZ3VyYXRpb25Vbml0c1JlbGF0aW9uczogeyBbaWQ6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBwcm9jZXNzLnRpdGxlID0gUHJvY2Vzc1RpdGxlLnNlcnZpY2U7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgID0gZnMuY3JlYXRlUmVhZFN0cmVhbSgnJywgeyBmZDogU0VSVklDRV9JTlBVVF9GRCB9KTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oJycsIHsgZmQ6IFNFUlZJQ0VfT1VUUFVUX0ZEIH0pO1xuXG4gICAgICAgIHRoaXMucHJveHkgPSBuZXcgSVBDUHJveHkobmV3IFNlcnZpY2VUcmFuc3BvcnQoaW5wdXQsIG91dHB1dCwgU0VSVklDRV9TWU5DX0ZEKSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9pbml0U3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9ydW5uYWJsZUNvbmZpZ3VyYXRpb25Vbml0c1JlbGF0aW9ucyA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRXJyb3JIYW5kbGVycygpO1xuICAgICAgICB0aGlzLl9zZXR1cFJvdXRlcygpO1xuICAgICAgICB0aGlzLnJlYWR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFN0YXRlICgpOiBTZXJ2aWNlU3RhdGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVzdFJ1bnM6ICAgIHt9LFxuICAgICAgICAgICAgZml4dHVyZUN0eHM6IHt9LFxuICAgICAgICAgICAgdW5pdHM6ICAgICAgIHt9LFxuICAgICAgICAgICAgb3B0aW9uczogICAgIHt9LFxuICAgICAgICAgICAgcm9sZXM6ICAgICAgIG5ldyBNYXA8c3RyaW5nLCBSb2xlPigpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZVVuZXhwZWN0ZWRFcnJvciAoRXJyb3JDdG9yOiBGdW5jdGlvbiwgZXJyb3I6IEVycm9yKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRFcnJvcihFcnJvckN0b3IsIGVycm9yKTtcbiAgICAgICAgY29uc3QgdHlwZSAgICA9IEVycm9yQ3Rvci5uYW1lO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkVW5leHBlY3RlZEVycm9yKHsgdHlwZSwgbWVzc2FnZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWdpc3RlckVycm9ySGFuZGxlcnMgKCk6IHZvaWQge1xuICAgICAgICBwcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBhc3luYyBlID0+IHRoaXMuX2hhbmRsZVVuZXhwZWN0ZWRFcnJvcihVbmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uRXJyb3IsIGUgYXMgRXJyb3IpKTtcbiAgICAgICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyBlID0+IHRoaXMuX2hhbmRsZVVuZXhwZWN0ZWRFcnJvcihVbmNhdWdodEV4Y2VwdGlvbkVycm9yLCBlIGFzIEVycm9yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Rml4dHVyZUN0eCAodW5pdDogVW5pdCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGlzVGVzdCh1bml0KSA/ICh1bml0LmZpeHR1cmUgYXMgRml4dHVyZSkuaWQgOiAodW5pdCBhcyBGaXh0dXJlKS5pZDtcblxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5maXh0dXJlQ3R4c1tmaXh0dXJlSWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRlc3RDdHggKHsgdGVzdFJ1bklkIH06IFJ1blRlc3RBcmd1bWVudHMsIHVuaXQ6IFVuaXQpOiBUZXN0UnVuUHJveHkge1xuICAgICAgICBjb25zdCB0ZXN0UnVuUHJveHkgPSB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCk7XG5cbiAgICAgICAgdGVzdFJ1blByb3h5LmZpeHR1cmVDdHggPSB0aGlzLl9nZXRGaXh0dXJlQ3R4KHVuaXQpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0UnVuUHJveHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Q29udGV4dCAoYXJnczogUnVuVGVzdEFyZ3VtZW50cywgdW5pdDogVW5pdCk6IFRlc3RSdW5Qcm94eSB8IHVua25vd24ge1xuICAgICAgICBjb25zdCB7IHRlc3RSdW5JZCB9ID0gYXJncztcblxuICAgICAgICBpZiAodGVzdFJ1bklkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRlc3RDdHgoYXJncywgdW5pdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZpeHR1cmVDdHgodW5pdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBSb3V0ZXMgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3h5LnJlZ2lzdGVyKFtcbiAgICAgICAgICAgIHRoaXMuZ2V0VGVzdHMsXG4gICAgICAgICAgICB0aGlzLnJ1blRlc3RGbixcbiAgICAgICAgICAgIHRoaXMuY2xlYW5VcCxcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlclZhcmlhYmxlcyxcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMub25SZXF1ZXN0SG9va0V2ZW50LFxuICAgICAgICAgICAgdGhpcy5zZXRNb2NrLFxuICAgICAgICAgICAgdGhpcy5zZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQsXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0RmlsdGVyUnVsZVByZWRpY2F0ZSxcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU1vY2tQcmVkaWNhdGUsXG4gICAgICAgICAgICB0aGlzLmdldFdhcm5pbmdNZXNzYWdlcyxcbiAgICAgICAgICAgIHRoaXMuYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMsXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUZXN0UnVuRGF0YSxcbiAgICAgICAgICAgIHRoaXMuZ2V0QXNzZXJ0aW9uQWN0dWFsVmFsdWUsXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVSb2xlSW5pdEZuLFxuICAgICAgICAgICAgdGhpcy5nZXRDdHgsXG4gICAgICAgICAgICB0aGlzLmdldEZpeHR1cmVDdHgsXG4gICAgICAgICAgICB0aGlzLnNldEN0eCxcbiAgICAgICAgICAgIHRoaXMuc2V0Rml4dHVyZUN0eCxcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm9sZVByb3BlcnR5LFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlSnNFeHByZXNzaW9uLFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlQXN5bmNKc0V4cHJlc3Npb24sXG4gICAgICAgICAgICB0aGlzLmFkZFVuZXhwZWN0ZWRFcnJvcixcbiAgICAgICAgICAgIHRoaXMuY2hlY2tXaW5kb3csXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRlc3RSdW5Gcm9tU3RhdGUsXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpeHR1cmVDdHhzRnJvbVN0YXRlLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVbml0c0Zyb21TdGF0ZSxcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RnVuY3Rpb24gKHVuaXQ6IFVuaXQsIGZ1bmN0aW9uTmFtZTogRnVuY3Rpb25Qcm9wZXJ0aWVzKTogRnVuY3Rpb258bnVsbCB7XG4gICAgICAgIGlmIChpc1Rlc3QodW5pdCkgJiYgaXNUZXN0RnVuY3Rpb25Qcm9wZXJ0eShmdW5jdGlvbk5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIHVuaXRbZnVuY3Rpb25OYW1lXTtcblxuICAgICAgICBpZiAoaXNGaXh0dXJlKHVuaXQpICYmIGlzRml4dHVyZUZ1bmN0aW9uUHJvcGVydHkoZnVuY3Rpb25OYW1lKSlcbiAgICAgICAgICAgIHJldHVybiB1bml0W2Z1bmN0aW9uTmFtZV07XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtmdW5jdGlvbk5hbWV9JyBmdW5jdGlvbiBmb3IgJHt0eXBlb2YgdW5pdH1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwRXZlbnRNZXRob2RzICh7IG5hbWUsIHRlc3RJZCwgaG9va0lkLCBldmVudERhdGEgfTogUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyk6IHZvaWQge1xuICAgICAgICBpZiAobmFtZSA9PT0gUmVxdWVzdEhvb2tNZXRob2ROYW1lcy5vblJlcXVlc3QpXG4gICAgICAgICAgICB0aGlzLl93cmFwU2V0TW9ja0ZuKHsgdGVzdElkLCBob29rSWQsIGV2ZW50OiBldmVudERhdGEgYXMgUmVxdWVzdEV2ZW50IH0pO1xuICAgICAgICBlbHNlIGlmIChuYW1lID09PSBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLl9vbkNvbmZpZ3VyZVJlc3BvbnNlKVxuICAgICAgICAgICAgdGhpcy5fd3JhcENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRNZXRob2RzKGV2ZW50RGF0YSBhcyBDb25maWd1cmVSZXNwb25zZUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwU2V0TW9ja0ZuICh7IHRlc3RJZCwgaG9va0lkLCBldmVudCB9OiBXcmFwU2V0TW9ja0FyZ3VtZW50cyk6IHZvaWQge1xuICAgICAgICBldmVudC5zZXRNb2NrID0gYXN5bmMgKG1vY2s6IFJlc3BvbnNlTW9jaykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRNb2NrKHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUV2ZW50SWQ6IGV2ZW50LmlkLFxuICAgICAgICAgICAgICAgIHJ1bGVJZDogICAgICAgICAgZXZlbnQucmVxdWVzdEZpbHRlclJ1bGUuaWQsXG4gICAgICAgICAgICAgICAgdGVzdElkLFxuICAgICAgICAgICAgICAgIGhvb2tJZCxcbiAgICAgICAgICAgICAgICBtb2NrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRNZXRob2RzIChldmVudDogQ29uZmlndXJlUmVzcG9uc2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zZXRIZWFkZXIgPSBhc3luYyAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCh7XG4gICAgICAgICAgICAgICAgZXZlbnRJZDogICAgIGV2ZW50LmlkLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICBuYW1lLFxuICAgICAgICAgICAgICAgIGhlYWRlclZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGV2ZW50LnJlbW92ZUhlYWRlciA9IGFzeW5jIChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50KHtcbiAgICAgICAgICAgICAgICBldmVudElkOiAgICBldmVudC5pZCxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVRlc3RSdW5Qcm94eSAoeyB0ZXN0UnVuSWQsIHRlc3QsIGJyb3dzZXIsIGFjdGl2ZVdpbmRvd0lkLCBtZXNzYWdlQnVzIH06IEluaXRUZXN0UnVuUHJveHlEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Qcm94eSA9IG5ldyBUZXN0UnVuUHJveHkoe1xuICAgICAgICAgICAgZGlzcGF0Y2hlcjogdGhpcyxcbiAgICAgICAgICAgIGlkOiAgICAgICAgIHRlc3RSdW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnM6ICAgIHRoaXMuc3RhdGUub3B0aW9ucyxcbiAgICAgICAgICAgIHRlc3QsXG4gICAgICAgICAgICBicm93c2VyLFxuICAgICAgICAgICAgYWN0aXZlV2luZG93SWQsXG4gICAgICAgICAgICBtZXNzYWdlQnVzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlLnRlc3RSdW5zW3Rlc3RSdW5JZF0gPSB0ZXN0UnVuUHJveHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUZpeHR1cmVDdHggKHRlc3Q6IFRlc3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZml4dHVyZUlkID0gKHRlc3QuZml4dHVyZSBhcyBGaXh0dXJlKS5pZDtcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5maXh0dXJlQ3R4c1tmaXh0dXJlSWRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3RhdGUuZml4dHVyZUN0eHNbZml4dHVyZUlkXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VGFyZ2V0VGVzdFJ1biAodGVzdFJ1bklkOiBzdHJpbmcpOiBUZXN0UnVuUHJveHkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS50ZXN0UnVuc1t0ZXN0UnVuSWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRhcmdldFJvbGUgKHJvbGVJZDogc3RyaW5nKTogUm9sZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnJvbGVzLmdldChyb2xlSWQpIGFzIFJvbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFVzZXJWYXJpYWJsZXMgKHZhbHVlOiBVc2VyVmFyaWFibGVzIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB1c2VyVmFyaWFibGVzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VW5pdElkcyAodGVzdHM6IFRlc3RbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdGVzdElkcyAgICAgPSB0ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmlkKTtcbiAgICAgICAgY29uc3QgZml4dHVyZUlkcyAgPSB0ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpeHR1cmU/LmlkKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgdGVzdEZpbGVJZHMgPSB0ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LnRlc3RGaWxlLmlkKTtcblxuICAgICAgICByZXR1cm4gdW5pcShbLi4udGVzdElkcywgLi4uZml4dHVyZUlkcywgLi4udGVzdEZpbGVJZHNdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0T3B0aW9ucyAoeyB2YWx1ZSB9OiBTZXRPcHRpb25zQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc3RhdGUub3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkeSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMucHJveHkuY2FsbCh0aGlzLnJlYWR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYW5VcCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IENvbXBpbGVyLmNsZWFuVXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGVzdHMgKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9OiBDb21waWxlckFyZ3VtZW50cywgYmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8VW5pdHM+IHtcbiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBuZXcgQ29tcGlsZXIoc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCB7IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTogdHJ1ZSwgYmFzZVVybCB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0cyAgID0gYXdhaXQgY29tcGlsZXIuZ2V0VGVzdHMoKTtcbiAgICAgICAgY29uc3QgdW5pdHMgICA9IGZsYXR0ZW5UZXN0U3RydWN0dXJlKHRlc3RzKTtcbiAgICAgICAgY29uc3QgdW5pdElkcyA9IHRoaXMuX2dldFVuaXRJZHModGVzdHMpO1xuXG4gICAgICAgIHRoaXMuX3J1bm5hYmxlQ29uZmlndXJhdGlvblVuaXRzUmVsYXRpb25zW3J1bm5hYmxlQ29uZmlndXJhdGlvbklkXSA9IHVuaXRJZHM7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLnVuaXRzLCB1bml0cyk7XG5cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRlc3RTdHJ1Y3R1cmUodW5pdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBydW5UZXN0Rm4gKGFyZ3M6IFJ1blRlc3RBcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgeyBpZCwgZnVuY3Rpb25OYW1lIH0gPSBhcmdzO1xuXG4gICAgICAgIGNvbnN0IHVuaXQgICAgICAgICAgID0gdGhpcy5zdGF0ZS51bml0c1tpZF07XG4gICAgICAgIGNvbnN0IGNvbnRleHQgICAgICAgID0gdGhpcy5fZ2V0Q29udGV4dChhcmdzLCB1bml0KTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25PYmplY3QgPSB0aGlzLl9nZXRGdW5jdGlvbih1bml0LCBmdW5jdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmICghZnVuY3Rpb25PYmplY3QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBcIiR7ZnVuY3Rpb25OYW1lfVwiIG9mICR7dHlwZW9mIHVuaXR9YCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmN0aW9uT2JqZWN0KGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRlQ29tbWFuZFN5bmMgKHsgaWQsIGNvbW1hbmQsIGNhbGxzaXRlIH06IEV4ZWN1dGVDb21tYW5kQXJndW1lbnRzKTogdW5rbm93biB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5LmNhbGxTeW5jKHRoaXMuZXhlY3V0ZUNvbW1hbmQsIHsgaWQsIGNvbW1hbmQsIGNhbGxzaXRlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlQ29tbWFuZCAoeyBjb21tYW5kLCBpZCwgY2FsbHNpdGUgfTogRXhlY3V0ZUNvbW1hbmRBcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuY2FsbCh0aGlzLmV4ZWN1dGVDb21tYW5kLCB7IGlkLCBjb21tYW5kLCBjYWxsc2l0ZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25SZXF1ZXN0SG9va0V2ZW50ICh7IG5hbWUsIHRlc3RJZCwgaG9va0lkLCBldmVudERhdGEgfTogUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl93cmFwRXZlbnRNZXRob2RzKHsgbmFtZSwgdGVzdElkLCBob29rSWQsIGV2ZW50RGF0YSB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0ICAgICAgID0gdGhpcy5zdGF0ZS51bml0c1t0ZXN0SWRdIGFzIFRlc3Q7XG4gICAgICAgIGNvbnN0IHRhcmdldEhvb2sgPSB0ZXN0LnJlcXVlc3RIb29rcy5maW5kKGhvb2sgPT4gaG9vay5pZCA9PT0gaG9va0lkKSBhcyBSZXF1ZXN0SG9vaztcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IHRhcmdldEhvb2tbbmFtZV0uY2FsbCh0YXJnZXRIb29rLCBldmVudERhdGEpO1xuXG4gICAgICAgIGlmIChuYW1lID09PSBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLl9vbkNvbmZpZ3VyZVJlc3BvbnNlICYmIHRhcmdldEhvb2suX3Jlc3BvbnNlRXZlbnRDb25maWd1cmVPcHRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wdHMsIGlkOiBldmVudElkIH0gPSBldmVudERhdGEgYXMgQ29uZmlndXJlUmVzcG9uc2VFdmVudDtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucyh7IGV2ZW50SWQsIG9wdHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TW9jayAoeyB0ZXN0SWQsIGhvb2tJZCwgcnVsZUlkLCByZXNwb25zZUV2ZW50SWQsIG1vY2sgfTogU2V0TW9ja0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNhbGwodGhpcy5zZXRNb2NrLCB7IHRlc3RJZCwgaG9va0lkLCBydWxlSWQsIHJlc3BvbnNlRXZlbnRJZCwgbW9jayB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Q29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnMgKHsgZXZlbnRJZCwgb3B0cyB9OiBTZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9uc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNhbGwodGhpcy5zZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucywgeyBldmVudElkLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQgKHsgZXZlbnRJZCwgaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUgfTogU2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY2FsbCh0aGlzLnNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCwgeyBldmVudElkLCBoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50ICh7IGV2ZW50SWQsIGhlYWRlck5hbWUgfTogUmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY2FsbCh0aGlzLnJlbW92ZUhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCwgeyBldmVudElkLCBoZWFkZXJOYW1lIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGUgKHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8gfTogRXhlY3V0ZVJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlQXJndW1lbnRzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHRlc3QgICAgICAgPSB0aGlzLnN0YXRlLnVuaXRzW3Rlc3RJZF0gYXMgVGVzdDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SG9vayA9IHRlc3QucmVxdWVzdEhvb2tzLmZpbmQoaG9vayA9PiBob29rLmlkID09PSBob29rSWQpIGFzIFJlcXVlc3RIb29rO1xuICAgICAgICBjb25zdCB0YXJnZXRSdWxlID0gdGFyZ2V0SG9vay5fcmVxdWVzdEZpbHRlclJ1bGVzLmZpbmQocnVsZSA9PiBydWxlLmlkID09PSBydWxlSWQpIGFzIFJlcXVlc3RGaWx0ZXJSdWxlO1xuICAgICAgICBjb25zdCByZXN1bHQgICAgID0gYXdhaXQgdGFyZ2V0UnVsZS5vcHRpb25zLmNhbGwodGFyZ2V0UnVsZSwgcmVxdWVzdEluZm8pO1xuXG4gICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZU1vY2tQcmVkaWNhdGUgKHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8sIHJlcyB9OiBFeGVjdXRlTW9ja1ByZWRpY2F0ZSk6IFByb21pc2U8SW5jb21pbmdNZXNzYWdlTGlrZUluaXRPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHRlc3QgICAgICAgICA9IHRoaXMuc3RhdGUudW5pdHNbdGVzdElkXSBhcyBUZXN0O1xuICAgICAgICBjb25zdCByZXF1ZXN0TW9jayAgPSB0ZXN0LnJlcXVlc3RIb29rcy5maW5kKGhvb2sgPT4gaG9vay5pZCA9PT0gaG9va0lkKSBhcyBSZXF1ZXN0TW9jaztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VNb2NrID0gcmVxdWVzdE1vY2subW9ja3MuZ2V0KHJ1bGVJZCkgYXMgUmVzcG9uc2VNb2NrO1xuXG4gICAgICAgIHJlc3BvbnNlTW9ja1NldEJvZHlNZXRob2QuYWRkKHJlcyk7XG5cbiAgICAgICAgcmVzID0gT2JqZWN0LmFzc2lnbihyZXMsIGF3YWl0IChyZXNwb25zZU1vY2suYm9keSBhcyBGdW5jdGlvbikocmVxdWVzdEluZm8sIHJlcykpO1xuXG4gICAgICAgIHJlc3BvbnNlTW9ja1NldEJvZHlNZXRob2QucmVtb3ZlKHJlcyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2FybmluZ01lc3NhZ2VzICh7IHRlc3RSdW5JZCB9OiBUZXN0UnVuTG9jYXRvcik6IFByb21pc2U8V2FybmluZ0xvZ01lc3NhZ2VbXT4ge1xuICAgICAgICAvLyBOT1RFOiBJbiBjYXNlIG9mIHJhaXNpbmcgYW4gZXJyb3IgaW50byBSZXBvcnRlclBsdWdpbkhvc3QgbWV0aG9kcyxcbiAgICAgICAgLy8gVGVzdFJ1biBoYXMgdGltZSB0byBzdGFydC5cbiAgICAgICAgY29uc3QgdGFyZ2V0VGVzdFJ1biA9IHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0VGVzdFJ1biA/IHRhcmdldFRlc3RSdW4ud2FybmluZ0xvZy5tZXNzYWdlSW5mb3MgOiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzICggeyBob29rSWQsIGhvb2tDbGFzc05hbWUsIHJ1bGVzIH06IEFkZFJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eS5jYWxsKHRoaXMuYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzLCB7IGhvb2tJZCwgaG9va0NsYXNzTmFtZSwgcnVsZXMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycyAoeyBydWxlcyB9OiBSZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnNBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHkuY2FsbCh0aGlzLnJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycywgeyBydWxlcyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZVRlc3RSdW5EYXRhICh7IHRlc3RSdW5JZCwgdGVzdElkLCBicm93c2VyLCBhY3RpdmVXaW5kb3dJZCwgbWVzc2FnZUJ1cyB9OiBJbml0aWFsaXplVGVzdFJ1bkRhdGFBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogSW4gY2FzZSBvZiByYWlzaW5nIGFuIGVycm9yIGludG8gUmVwb3J0ZXJQbHVnaW5Ib3N0IG1ldGhvZHMsXG4gICAgICAgIC8vIFRlc3RSdW4gaGFzIHRpbWUgdG8gc3RhcnQuXG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLnN0YXRlLnVuaXRzW3Rlc3RJZF0gYXMgVGVzdDtcblxuICAgICAgICBpZiAoIXRlc3QpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVRlc3RSdW5Qcm94eSh7IHRlc3RSdW5JZCwgdGVzdCwgYnJvd3NlciwgYWN0aXZlV2luZG93SWQsIG1lc3NhZ2VCdXMgfSk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVGaXh0dXJlQ3R4KHRlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMgKCk6IHZvaWQge1xuICAgICAgICBUZXN0Q29udHJvbGxlci5lbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKTogdm9pZCB7XG4gICAgICAgIFRlc3RDb250cm9sbGVyLmRpc2FibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXNzZXJ0aW9uQWN0dWFsVmFsdWUgKHsgdGVzdFJ1bklkLCBjb21tYW5kSWQgfTogQ29tbWFuZExvY2F0b3IpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKS5nZXRBc3NlcnRpb25BY3R1YWxWYWx1ZShjb21tYW5kSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlUm9sZUluaXRGbiAoeyB0ZXN0UnVuSWQsIHJvbGVJZCB9OiBFeGVjdXRlUm9sZUluaXRGbkFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCByb2xlICAgICAgICAgPSB0aGlzLl9nZXRUYXJnZXRSb2xlKHJvbGVJZCk7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Qcm94eSA9IHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKTtcblxuICAgICAgICByZXR1cm4gKHJvbGUuX2luaXRGbiBhcyBGdW5jdGlvbikodGVzdFJ1blByb3h5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q3R4ICh7IHRlc3RSdW5JZCB9OiBUZXN0UnVuTG9jYXRvcik6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCkuY3R4O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaXh0dXJlQ3R4ICh7IHRlc3RSdW5JZCB9OiBUZXN0UnVuTG9jYXRvcik6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCkuZml4dHVyZUN0eDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Q3R4ICh7IHRlc3RSdW5JZCwgdmFsdWUgfTogU2V0Q3R4QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKS5jdHggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Rml4dHVyZUN0eCAoeyB0ZXN0UnVuSWQsIHZhbHVlIH06IFNldEN0eEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCkuZml4dHVyZUN0eCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvbGVBcHBlYXJlZCAocm9sZTogUm9sZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5yb2xlcy5oYXMocm9sZS5pZCkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdGF0ZS5yb2xlcy5zZXQocm9sZS5pZCwgcm9sZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZVJvbGVQcm9wZXJ0eSAoeyByb2xlSWQsIG5hbWUsIHZhbHVlIH06IFVwZGF0ZVJvbGVQcm9wZXJ0eUFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByb2xlID0gdGhpcy5fZ2V0VGFyZ2V0Um9sZShyb2xlSWQpO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcm9sZVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlSnNFeHByZXNzaW9uICh7IGV4cHJlc3Npb24sIHRlc3RSdW5JZCwgb3B0aW9ucyB9OiBFeGVjdXRlSnNFeHByZXNzaW9uQXJndW1lbnRzKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Qcm94eSA9IHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKTtcblxuICAgICAgICByZXR1cm4gZXhlY3V0ZUpzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0ZXN0UnVuUHJveHksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24gKHsgZXhwcmVzc2lvbiwgdGVzdFJ1bklkLCBjYWxsc2l0ZSB9OiBFeGVjdXRlQXN5bmNKc0V4cHJlc3Npb25Bcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgdGVzdFJ1blByb3h5ID0gdGhpcy5fZ2V0VGFyZ2V0VGVzdFJ1bih0ZXN0UnVuSWQpO1xuXG4gICAgICAgIHJldHVybiBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24oZXhwcmVzc2lvbiwgdGVzdFJ1blByb3h5LCBjYWxsc2l0ZSwgYXN5bmMgKGVycjogVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQgfCBVbmNhdWdodEVycm9ySW5DdXN0b21TY3JpcHQpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbmNhdWdodFRlc3RDYWZlRXJyb3JJbkN1c3RvbVNjcmlwdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFcnJvciA9IGVyciBhcyBVbmNhdWdodFRlc3RDYWZlRXJyb3JJbkN1c3RvbVNjcmlwdDtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRSZW5kZXJIdG1sV2l0aG91dFN0YWNrKHRhcmdldEVycm9yKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHRlc3RSdW5Qcm94eS5yZXN0b3JlT3JpZ2luQ2FsbHNpdGVGb3JFcnJvcih0YXJnZXRFcnJvcik7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGVyci5lcnJDYWxsc2l0ZSA9IHJlbmRlckh0bWxXaXRob3V0U3RhY2sodGFyZ2V0RXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZUFzc2VydGlvbkZuICh7IHRlc3RSdW5JZCwgY29tbWFuZElkIH06IENvbW1hbmRMb2NhdG9yKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICAgICAgICAuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKVxuICAgICAgICAgICAgLmV4ZWN1dGVBc3NlcnRpb25Gbihjb21tYW5kSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhZGRVbmV4cGVjdGVkRXJyb3IgKHsgdHlwZSwgbWVzc2FnZSB9OiBBZGRVbmV4cGVjdGVkRXJyb3JBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuY2FsbCh0aGlzLmFkZFVuZXhwZWN0ZWRFcnJvciwgeyB0eXBlLCBtZXNzYWdlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja1dpbmRvdyAoeyB0ZXN0UnVuSWQsIGNvbW1hbmRJZCwgdXJsLCB0aXRsZSB9OiBDaGVja1dpbmRvd0FyZ3VtZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICAgICAgICAgIC5fZ2V0VGFyZ2V0VGVzdFJ1bih0ZXN0UnVuSWQpXG4gICAgICAgICAgICAgICAgLmNoZWNrV2luZG93KGNvbW1hbmRJZCwgeyB0aXRsZSwgdXJsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN3aXRjaFRvV2luZG93UHJlZGljYXRlRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVRlc3RSdW5Gcm9tU3RhdGUgKHsgdGVzdFJ1bklkIH06IFRlc3RSdW5Mb2NhdG9yKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlLnRlc3RSdW5zW3Rlc3RSdW5JZF07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUZpeHR1cmVDdHhzRnJvbVN0YXRlICh7IGZpeHR1cmVJZHMgfTogUmVtb3ZlRml4dHVyZUN0eHNBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaXh0dXJlSWQgb2YgZml4dHVyZUlkcylcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlLmZpeHR1cmVDdHhzW2ZpeHR1cmVJZF07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVVuaXRzRnJvbVN0YXRlICh7IHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkIH06IFJlbW92ZVVuaXRzRnJvbVN0YXRlQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVuaXRJZHMgPSB0aGlzLl9ydW5uYWJsZUNvbmZpZ3VyYXRpb25Vbml0c1JlbGF0aW9uc1tydW5uYWJsZUNvbmZpZ3VyYXRpb25JZF07XG5cbiAgICAgICAgZm9yIChjb25zdCB1bml0SWQgb2YgdW5pdElkcylcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlLnVuaXRzW3VuaXRJZF07XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3J1bm5hYmxlQ29uZmlndXJhdGlvblVuaXRzUmVsYXRpb25zW3J1bm5hYmxlQ29uZmlndXJhdGlvbklkXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb21waWxlclNlcnZpY2UoKTtcbiJdfQ==
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb21waWxlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLDhEQUFzQztBQUN0QyxzRUFBNEM7QUFDNUMsZ0ZBQXVEO0FBRXZELG9FQU95QztBQUV6Qyw2QkFJYztBQUVkLDhDQUE4QztBQUM5QyxzREFBMEQ7QUFFMUQseUNBTW9CO0FBZ0NwQixxRUFBNEM7QUFFNUMsa0dBQStFO0FBRS9FLDZEQU82QjtBQUs3Qiw4RUFBcUQ7QUFDckQsZ0ZBQXFHO0FBRXJHLG9EQUsrQjtBQUUvQiw2RUFBeUg7QUFDekgsaUZBQTRFO0FBQzVFLDZEQUF3RDtBQUN4RCxnREFBbUU7QUFHbkUsbUNBQThCO0FBRTlCLElBQUEsK0NBQXFCLEdBQUUsQ0FBQztBQUV4QixzRkFBc0Y7QUFDdEYsdUNBQXVDO0FBQ3ZDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBc0IzQyxNQUFNLGVBQWU7SUFLakI7UUFDSSxPQUFPLENBQUMsS0FBSyxHQUFHLHVCQUFZLENBQUMsT0FBTyxDQUFDO1FBRXJDLE1BQU0sS0FBSyxHQUFJLFlBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLFlBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsc0JBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxnQkFBUSxDQUFDLElBQUksNEJBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxvQkFBZSxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsb0NBQW9D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c0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBDb21waWxlciBmcm9tICcuLi8uLi9jb21waWxlcic7XG5pbXBvcnQgVGVzdFJ1blByb3h5IGZyb20gJy4vdGVzdC1ydW4tcHJveHknO1xuaW1wb3J0IFRlc3RDb250cm9sbGVyIGZyb20gJy4uLy4uL2FwaS90ZXN0LWNvbnRyb2xsZXInO1xuXG5pbXBvcnQge1xuICAgIGZsYXR0ZW4gYXMgZmxhdHRlblRlc3RTdHJ1Y3R1cmUsXG4gICAgaXNGaXh0dXJlLFxuICAgIGlzVGVzdCxcbiAgICBzZXJpYWxpemUgYXMgc2VyaWFsaXplVGVzdFN0cnVjdHVyZSxcbiAgICBVbml0LFxuICAgIFVuaXRzLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL3Rlc3Qtc3RydWN0dXJlJztcblxuaW1wb3J0IHtcbiAgICBTRVJWSUNFX0lOUFVUX0ZELFxuICAgIFNFUlZJQ0VfT1VUUFVUX0ZELFxuICAgIFNFUlZJQ0VfU1lOQ19GRCxcbn0gZnJvbSAnLi9pbyc7XG5cbmltcG9ydCB7IElQQ1Byb3h5IH0gZnJvbSAnLi4vdXRpbHMvaXBjL3Byb3h5JztcbmltcG9ydCB7IFNlcnZpY2VUcmFuc3BvcnQgfSBmcm9tICcuLi91dGlscy9pcGMvdHJhbnNwb3J0JztcblxuaW1wb3J0IHtcbiAgICBDb21waWxlclByb3RvY29sLFxuICAgIEZ1bmN0aW9uUHJvcGVydGllcyxcbiAgICBpc0ZpeHR1cmVGdW5jdGlvblByb3BlcnR5LFxuICAgIGlzVGVzdEZ1bmN0aW9uUHJvcGVydHksXG4gICAgUnVuVGVzdEFyZ3VtZW50cyxcbn0gZnJvbSAnLi9wcm90b2NvbCc7XG5cbmltcG9ydCB7XG4gICAgRXhlY3V0ZUNvbW1hbmRBcmd1bWVudHMsXG4gICAgRXhlY3V0ZU1vY2tQcmVkaWNhdGUsXG4gICAgRXhlY3V0ZVJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlQXJndW1lbnRzLFxuICAgIFJlbW92ZUhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudEFyZ3VtZW50cyxcbiAgICBSZXF1ZXN0SG9va0V2ZW50QXJndW1lbnRzLFxuICAgIFJlcXVlc3RIb29rTG9jYXRvcixcbiAgICBTZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9uc0FyZ3VtZW50cyxcbiAgICBTZXRIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnRBcmd1bWVudHMsXG4gICAgU2V0TW9ja0FyZ3VtZW50cyxcbiAgICBTZXRPcHRpb25zQXJndW1lbnRzLFxuICAgIEFkZFJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyxcbiAgICBSZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnNBcmd1bWVudHMsXG4gICAgSW5pdGlhbGl6ZVRlc3RSdW5EYXRhQXJndW1lbnRzLFxuICAgIFRlc3RSdW5Mb2NhdG9yLFxuICAgIFNldEN0eEFyZ3VtZW50cyxcbiAgICBFeGVjdXRlUm9sZUluaXRGbkFyZ3VtZW50cyxcbiAgICBVcGRhdGVSb2xlUHJvcGVydHlBcmd1bWVudHMsXG4gICAgRXhlY3V0ZUpzRXhwcmVzc2lvbkFyZ3VtZW50cyxcbiAgICBFeGVjdXRlQXN5bmNKc0V4cHJlc3Npb25Bcmd1bWVudHMsXG4gICAgQ29tbWFuZExvY2F0b3IsXG4gICAgQWRkVW5leHBlY3RlZEVycm9yQXJndW1lbnRzLFxuICAgIENoZWNrV2luZG93QXJndW1lbnQsXG4gICAgUmVtb3ZlRml4dHVyZUN0eHNBcmd1bWVudHMsXG4gICAgUmVtb3ZlVW5pdHNGcm9tU3RhdGVBcmd1bWVudHMsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IENvbXBpbGVyQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vY29tcGlsZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgUHJvY2Vzc1RpdGxlIGZyb20gJy4uL3Byb2Nlc3MtdGl0bGUnO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCBSZXF1ZXN0SG9va01ldGhvZE5hbWVzIGZyb20gJy4uLy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2hvb2stbWV0aG9kLW5hbWVzJztcblxuaW1wb3J0IHtcbiAgICBDb25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgIEluY29taW5nTWVzc2FnZUxpa2VJbml0T3B0aW9ucyxcbiAgICBSZXF1ZXN0RXZlbnQsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgUmVzcG9uc2VNb2NrLFxuICAgIHJlc3BvbnNlTW9ja1NldEJvZHlNZXRob2QsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG5pbXBvcnQgUmVxdWVzdEhvb2sgZnJvbSAnLi4vLi4vYXBpL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgUmVxdWVzdE1vY2sgZnJvbSAnLi4vLi4vYXBpL3JlcXVlc3QtaG9va3MvcmVxdWVzdC1tb2NrJztcbmltcG9ydCBSb2xlIGZyb20gJy4uLy4uL3JvbGUvcm9sZSc7XG5pbXBvcnQgdXNlclZhcmlhYmxlcyBmcm9tICcuLi8uLi9hcGkvdXNlci12YXJpYWJsZXMnO1xuaW1wb3J0IHsgZXhlY3V0ZUpzRXhwcmVzc2lvbiwgZXhlY3V0ZUFzeW5jSnNFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vZXhlY3V0ZS1qcy1leHByZXNzaW9uJztcblxuaW1wb3J0IHtcbiAgICBVbmNhdWdodEVycm9ySW5DdXN0b21TY3JpcHQsXG4gICAgVW5jYXVnaHRFeGNlcHRpb25FcnJvcixcbiAgICBVbmNhdWdodFRlc3RDYWZlRXJyb3JJbkN1c3RvbVNjcmlwdCxcbiAgICBVbmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uRXJyb3IsXG59IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5cbmltcG9ydCB7IHJlbmRlckh0bWxXaXRob3V0U3RhY2ssIHNob3VsZFJlbmRlckh0bWxXaXRob3V0U3RhY2sgfSBmcm9tICcuLi8uLi9lcnJvcnMvdGVzdC1ydW4vcmVuZGVyLWVycm9yLXRlbXBsYXRlL3V0aWxzJztcbmltcG9ydCB7IHNldHVwU291cmNlTWFwU3VwcG9ydCB9IGZyb20gJy4uLy4uL3V0aWxzL3NldHVwLXNvdXJjZW1hcC1zdXBwb3J0JztcbmltcG9ydCB7IGZvcm1hdEVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlLWVycm9ycyc7XG5pbXBvcnQgeyBTd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Vycm9ycyc7XG5pbXBvcnQgTWVzc2FnZUJ1cyBmcm9tICcuLi8uLi91dGlscy9tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgeyBXYXJuaW5nTG9nTWVzc2FnZSB9IGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJ2xvZGFzaCc7XG5cbnNldHVwU291cmNlTWFwU3VwcG9ydCgpO1xuXG4vLyBUaGlzIGlzIGhhY2sgZm9yIHN1cHBvcnRpbmcgdGhlICdpbXBvcnQgeyB0IH0gZnJvbSBcInRlc3RjYWZlXCInIGV4cHJlc3Npb24gaW4gdGVzdHMuXG4vLyBJdCBjYXVzZWQgYnkgdXNpbmcgdGhlICdlc20nIG1vZHVsZS5cbnJlcXVpcmUoJy4uLy4uL2FwaS90ZXN0LWNvbnRyb2xsZXIvcHJveHknKTtcblxuaW50ZXJmYWNlIFNlcnZpY2VTdGF0ZSB7XG4gICAgdGVzdFJ1bnM6IHsgW2lkOiBzdHJpbmddOiBUZXN0UnVuUHJveHkgfTtcbiAgICBmaXh0dXJlQ3R4czogeyBbaWQ6IHN0cmluZ106IG9iamVjdCB9O1xuICAgIHVuaXRzOiBVbml0cztcbiAgICBvcHRpb25zOiBEaWN0aW9uYXJ5PE9wdGlvblZhbHVlPjtcbiAgICByb2xlczogTWFwPHN0cmluZywgUm9sZT47XG59XG5cbmludGVyZmFjZSBXcmFwU2V0TW9ja0FyZ3VtZW50cyBleHRlbmRzIFJlcXVlc3RIb29rTG9jYXRvciB7XG4gICAgZXZlbnQ6IFJlcXVlc3RFdmVudDtcbn1cblxuaW50ZXJmYWNlIEluaXRUZXN0UnVuUHJveHlEYXRhIHtcbiAgICB0ZXN0UnVuSWQ6IHN0cmluZztcbiAgICB0ZXN0OiBUZXN0O1xuICAgIGJyb3dzZXI6IEJyb3dzZXI7XG4gICAgYWN0aXZlV2luZG93SWQ6IHN0cmluZyB8IG51bGw7XG4gICAgbWVzc2FnZUJ1cz86IE1lc3NhZ2VCdXM7XG59XG5cbmNsYXNzIENvbXBpbGVyU2VydmljZSBpbXBsZW1lbnRzIENvbXBpbGVyUHJvdG9jb2wge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJveHk6IElQQ1Byb3h5O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU6IFNlcnZpY2VTdGF0ZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydW5uYWJsZUNvbmZpZ3VyYXRpb25Vbml0c1JlbGF0aW9uczogeyBbaWQ6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBwcm9jZXNzLnRpdGxlID0gUHJvY2Vzc1RpdGxlLnNlcnZpY2U7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgID0gZnMuY3JlYXRlUmVhZFN0cmVhbSgnJywgeyBmZDogU0VSVklDRV9JTlBVVF9GRCB9KTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oJycsIHsgZmQ6IFNFUlZJQ0VfT1VUUFVUX0ZEIH0pO1xuXG4gICAgICAgIHRoaXMucHJveHkgPSBuZXcgSVBDUHJveHkobmV3IFNlcnZpY2VUcmFuc3BvcnQoaW5wdXQsIG91dHB1dCwgU0VSVklDRV9TWU5DX0ZEKSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9pbml0U3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9ydW5uYWJsZUNvbmZpZ3VyYXRpb25Vbml0c1JlbGF0aW9ucyA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRXJyb3JIYW5kbGVycygpO1xuICAgICAgICB0aGlzLl9zZXR1cFJvdXRlcygpO1xuICAgICAgICB0aGlzLnJlYWR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFN0YXRlICgpOiBTZXJ2aWNlU3RhdGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVzdFJ1bnM6ICAgIHt9LFxuICAgICAgICAgICAgZml4dHVyZUN0eHM6IHt9LFxuICAgICAgICAgICAgdW5pdHM6ICAgICAgIHt9LFxuICAgICAgICAgICAgb3B0aW9uczogICAgIHt9LFxuICAgICAgICAgICAgcm9sZXM6ICAgICAgIG5ldyBNYXA8c3RyaW5nLCBSb2xlPigpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZVVuZXhwZWN0ZWRFcnJvciAoRXJyb3JDdG9yOiBGdW5jdGlvbiwgZXJyb3I6IEVycm9yKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRFcnJvcihFcnJvckN0b3IsIGVycm9yKTtcbiAgICAgICAgY29uc3QgdHlwZSAgICA9IEVycm9yQ3Rvci5uYW1lO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkVW5leHBlY3RlZEVycm9yKHsgdHlwZSwgbWVzc2FnZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWdpc3RlckVycm9ySGFuZGxlcnMgKCk6IHZvaWQge1xuICAgICAgICBwcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBhc3luYyBlID0+IHRoaXMuX2hhbmRsZVVuZXhwZWN0ZWRFcnJvcihVbmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uRXJyb3IsIGUgYXMgRXJyb3IpKTtcbiAgICAgICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyBlID0+IHRoaXMuX2hhbmRsZVVuZXhwZWN0ZWRFcnJvcihVbmNhdWdodEV4Y2VwdGlvbkVycm9yLCBlIGFzIEVycm9yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Rml4dHVyZUN0eCAodW5pdDogVW5pdCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGlzVGVzdCh1bml0KSA/ICh1bml0LmZpeHR1cmUgYXMgRml4dHVyZSkuaWQgOiAodW5pdCBhcyBGaXh0dXJlKS5pZDtcblxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5maXh0dXJlQ3R4c1tmaXh0dXJlSWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRlc3RDdHggKHsgdGVzdFJ1bklkIH06IFJ1blRlc3RBcmd1bWVudHMsIHVuaXQ6IFVuaXQpOiBUZXN0UnVuUHJveHkge1xuICAgICAgICBjb25zdCB0ZXN0UnVuUHJveHkgPSB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCk7XG5cbiAgICAgICAgdGVzdFJ1blByb3h5LmZpeHR1cmVDdHggPSB0aGlzLl9nZXRGaXh0dXJlQ3R4KHVuaXQpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0UnVuUHJveHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Q29udGV4dCAoYXJnczogUnVuVGVzdEFyZ3VtZW50cywgdW5pdDogVW5pdCk6IFRlc3RSdW5Qcm94eSB8IHVua25vd24ge1xuICAgICAgICBjb25zdCB7IHRlc3RSdW5JZCB9ID0gYXJncztcblxuICAgICAgICBpZiAodGVzdFJ1bklkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRlc3RDdHgoYXJncywgdW5pdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZpeHR1cmVDdHgodW5pdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0dXBSb3V0ZXMgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3h5LnJlZ2lzdGVyKFtcbiAgICAgICAgICAgIHRoaXMuZ2V0VGVzdHMsXG4gICAgICAgICAgICB0aGlzLnJ1blRlc3RGbixcbiAgICAgICAgICAgIHRoaXMuY2xlYW5VcCxcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlclZhcmlhYmxlcyxcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMub25SZXF1ZXN0SG9va0V2ZW50LFxuICAgICAgICAgICAgdGhpcy5zZXRNb2NrLFxuICAgICAgICAgICAgdGhpcy5zZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQsXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0RmlsdGVyUnVsZVByZWRpY2F0ZSxcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU1vY2tQcmVkaWNhdGUsXG4gICAgICAgICAgICB0aGlzLmdldFdhcm5pbmdNZXNzYWdlcyxcbiAgICAgICAgICAgIHRoaXMuYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMsXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVUZXN0UnVuRGF0YSxcbiAgICAgICAgICAgIHRoaXMuZ2V0QXNzZXJ0aW9uQWN0dWFsVmFsdWUsXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVSb2xlSW5pdEZuLFxuICAgICAgICAgICAgdGhpcy5nZXRDdHgsXG4gICAgICAgICAgICB0aGlzLmdldEZpeHR1cmVDdHgsXG4gICAgICAgICAgICB0aGlzLnNldEN0eCxcbiAgICAgICAgICAgIHRoaXMuc2V0Rml4dHVyZUN0eCxcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm9sZVByb3BlcnR5LFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlSnNFeHByZXNzaW9uLFxuICAgICAgICAgICAgdGhpcy5leGVjdXRlQXN5bmNKc0V4cHJlc3Npb24sXG4gICAgICAgICAgICB0aGlzLmFkZFVuZXhwZWN0ZWRFcnJvcixcbiAgICAgICAgICAgIHRoaXMuY2hlY2tXaW5kb3csXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRlc3RSdW5Gcm9tU3RhdGUsXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpeHR1cmVDdHhzRnJvbVN0YXRlLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVbml0c0Zyb21TdGF0ZSxcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RnVuY3Rpb24gKHVuaXQ6IFVuaXQsIGZ1bmN0aW9uTmFtZTogRnVuY3Rpb25Qcm9wZXJ0aWVzKTogRnVuY3Rpb258bnVsbCB7XG4gICAgICAgIGlmIChpc1Rlc3QodW5pdCkgJiYgaXNUZXN0RnVuY3Rpb25Qcm9wZXJ0eShmdW5jdGlvbk5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIHVuaXRbZnVuY3Rpb25OYW1lXTtcblxuICAgICAgICBpZiAoaXNGaXh0dXJlKHVuaXQpICYmIGlzRml4dHVyZUZ1bmN0aW9uUHJvcGVydHkoZnVuY3Rpb25OYW1lKSlcbiAgICAgICAgICAgIHJldHVybiB1bml0W2Z1bmN0aW9uTmFtZV07XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAnJHtmdW5jdGlvbk5hbWV9JyBmdW5jdGlvbiBmb3IgJHt0eXBlb2YgdW5pdH1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwRXZlbnRNZXRob2RzICh7IG5hbWUsIHRlc3RJZCwgaG9va0lkLCBldmVudERhdGEgfTogUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyk6IHZvaWQge1xuICAgICAgICBpZiAobmFtZSA9PT0gUmVxdWVzdEhvb2tNZXRob2ROYW1lcy5vblJlcXVlc3QpXG4gICAgICAgICAgICB0aGlzLl93cmFwU2V0TW9ja0ZuKHsgdGVzdElkLCBob29rSWQsIGV2ZW50OiBldmVudERhdGEgYXMgUmVxdWVzdEV2ZW50IH0pO1xuICAgICAgICBlbHNlIGlmIChuYW1lID09PSBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLl9vbkNvbmZpZ3VyZVJlc3BvbnNlKVxuICAgICAgICAgICAgdGhpcy5fd3JhcENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRNZXRob2RzKGV2ZW50RGF0YSBhcyBDb25maWd1cmVSZXNwb25zZUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwU2V0TW9ja0ZuICh7IHRlc3RJZCwgaG9va0lkLCBldmVudCB9OiBXcmFwU2V0TW9ja0FyZ3VtZW50cyk6IHZvaWQge1xuICAgICAgICBldmVudC5zZXRNb2NrID0gYXN5bmMgKG1vY2s6IFJlc3BvbnNlTW9jaykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRNb2NrKHtcbiAgICAgICAgICAgICAgICByZXNwb25zZUV2ZW50SWQ6IGV2ZW50LmlkLFxuICAgICAgICAgICAgICAgIHJ1bGVJZDogICAgICAgICAgZXZlbnQucmVxdWVzdEZpbHRlclJ1bGUuaWQsXG4gICAgICAgICAgICAgICAgdGVzdElkLFxuICAgICAgICAgICAgICAgIGhvb2tJZCxcbiAgICAgICAgICAgICAgICBtb2NrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcENvbmZpZ3VyZVJlc3BvbnNlRXZlbnRNZXRob2RzIChldmVudDogQ29uZmlndXJlUmVzcG9uc2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zZXRIZWFkZXIgPSBhc3luYyAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCh7XG4gICAgICAgICAgICAgICAgZXZlbnRJZDogICAgIGV2ZW50LmlkLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICBuYW1lLFxuICAgICAgICAgICAgICAgIGhlYWRlclZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGV2ZW50LnJlbW92ZUhlYWRlciA9IGFzeW5jIChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50KHtcbiAgICAgICAgICAgICAgICBldmVudElkOiAgICBldmVudC5pZCxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVRlc3RSdW5Qcm94eSAoeyB0ZXN0UnVuSWQsIHRlc3QsIGJyb3dzZXIsIGFjdGl2ZVdpbmRvd0lkLCBtZXNzYWdlQnVzIH06IEluaXRUZXN0UnVuUHJveHlEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Qcm94eSA9IG5ldyBUZXN0UnVuUHJveHkoe1xuICAgICAgICAgICAgZGlzcGF0Y2hlcjogdGhpcyxcbiAgICAgICAgICAgIGlkOiAgICAgICAgIHRlc3RSdW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnM6ICAgIHRoaXMuc3RhdGUub3B0aW9ucyxcbiAgICAgICAgICAgIHRlc3QsXG4gICAgICAgICAgICBicm93c2VyLFxuICAgICAgICAgICAgYWN0aXZlV2luZG93SWQsXG4gICAgICAgICAgICBtZXNzYWdlQnVzLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlLnRlc3RSdW5zW3Rlc3RSdW5JZF0gPSB0ZXN0UnVuUHJveHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUZpeHR1cmVDdHggKHRlc3Q6IFRlc3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZml4dHVyZUlkID0gKHRlc3QuZml4dHVyZSBhcyBGaXh0dXJlKS5pZDtcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5maXh0dXJlQ3R4c1tmaXh0dXJlSWRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3RhdGUuZml4dHVyZUN0eHNbZml4dHVyZUlkXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VGFyZ2V0VGVzdFJ1biAodGVzdFJ1bklkOiBzdHJpbmcpOiBUZXN0UnVuUHJveHkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS50ZXN0UnVuc1t0ZXN0UnVuSWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRhcmdldFJvbGUgKHJvbGVJZDogc3RyaW5nKTogUm9sZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnJvbGVzLmdldChyb2xlSWQpIGFzIFJvbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFVzZXJWYXJpYWJsZXMgKHZhbHVlOiBVc2VyVmFyaWFibGVzIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB1c2VyVmFyaWFibGVzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VW5pdElkcyAodGVzdHM6IFRlc3RbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdGVzdElkcyAgICAgPSB0ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmlkKTtcbiAgICAgICAgY29uc3QgZml4dHVyZUlkcyAgPSB0ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpeHR1cmU/LmlkKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgdGVzdEZpbGVJZHMgPSB0ZXN0cy5tYXAodGVzdCA9PiB0ZXN0LnRlc3RGaWxlLmlkKTtcblxuICAgICAgICByZXR1cm4gdW5pcShbLi4udGVzdElkcywgLi4uZml4dHVyZUlkcywgLi4udGVzdEZpbGVJZHNdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0T3B0aW9ucyAoeyB2YWx1ZSB9OiBTZXRPcHRpb25zQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuc3RhdGUub3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkeSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMucHJveHkuY2FsbCh0aGlzLnJlYWR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYW5VcCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IENvbXBpbGVyLmNsZWFuVXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGVzdHMgKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9OiBDb21waWxlckFyZ3VtZW50cywgYmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8VW5pdHM+IHtcbiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBuZXcgQ29tcGlsZXIoc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCB7IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTogdHJ1ZSwgYmFzZVVybCwgZXhwZXJpbWVudGFsRXNtOiBmYWxzZSB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0cyAgID0gYXdhaXQgY29tcGlsZXIuZ2V0VGVzdHMoKTtcbiAgICAgICAgY29uc3QgdW5pdHMgICA9IGZsYXR0ZW5UZXN0U3RydWN0dXJlKHRlc3RzKTtcbiAgICAgICAgY29uc3QgdW5pdElkcyA9IHRoaXMuX2dldFVuaXRJZHModGVzdHMpO1xuXG4gICAgICAgIHRoaXMuX3J1bm5hYmxlQ29uZmlndXJhdGlvblVuaXRzUmVsYXRpb25zW3J1bm5hYmxlQ29uZmlndXJhdGlvbklkXSA9IHVuaXRJZHM7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLnVuaXRzLCB1bml0cyk7XG5cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRlc3RTdHJ1Y3R1cmUodW5pdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBydW5UZXN0Rm4gKGFyZ3M6IFJ1blRlc3RBcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgeyBpZCwgZnVuY3Rpb25OYW1lIH0gPSBhcmdzO1xuXG4gICAgICAgIGNvbnN0IHVuaXQgICAgICAgICAgID0gdGhpcy5zdGF0ZS51bml0c1tpZF07XG4gICAgICAgIGNvbnN0IGNvbnRleHQgICAgICAgID0gdGhpcy5fZ2V0Q29udGV4dChhcmdzLCB1bml0KTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25PYmplY3QgPSB0aGlzLl9nZXRGdW5jdGlvbih1bml0LCBmdW5jdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmICghZnVuY3Rpb25PYmplY3QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBcIiR7ZnVuY3Rpb25OYW1lfVwiIG9mICR7dHlwZW9mIHVuaXR9YCk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmN0aW9uT2JqZWN0KGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRlQ29tbWFuZFN5bmMgKHsgaWQsIGNvbW1hbmQsIGNhbGxzaXRlIH06IEV4ZWN1dGVDb21tYW5kQXJndW1lbnRzKTogdW5rbm93biB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5LmNhbGxTeW5jKHRoaXMuZXhlY3V0ZUNvbW1hbmQsIHsgaWQsIGNvbW1hbmQsIGNhbGxzaXRlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlQ29tbWFuZCAoeyBjb21tYW5kLCBpZCwgY2FsbHNpdGUgfTogRXhlY3V0ZUNvbW1hbmRBcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuY2FsbCh0aGlzLmV4ZWN1dGVDb21tYW5kLCB7IGlkLCBjb21tYW5kLCBjYWxsc2l0ZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25SZXF1ZXN0SG9va0V2ZW50ICh7IG5hbWUsIHRlc3RJZCwgaG9va0lkLCBldmVudERhdGEgfTogUmVxdWVzdEhvb2tFdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl93cmFwRXZlbnRNZXRob2RzKHsgbmFtZSwgdGVzdElkLCBob29rSWQsIGV2ZW50RGF0YSB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0ICAgICAgID0gdGhpcy5zdGF0ZS51bml0c1t0ZXN0SWRdIGFzIFRlc3Q7XG4gICAgICAgIGNvbnN0IHRhcmdldEhvb2sgPSB0ZXN0LnJlcXVlc3RIb29rcy5maW5kKGhvb2sgPT4gaG9vay5pZCA9PT0gaG9va0lkKSBhcyBSZXF1ZXN0SG9vaztcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IHRhcmdldEhvb2tbbmFtZV0uY2FsbCh0YXJnZXRIb29rLCBldmVudERhdGEpO1xuXG4gICAgICAgIGlmIChuYW1lID09PSBSZXF1ZXN0SG9va01ldGhvZE5hbWVzLl9vbkNvbmZpZ3VyZVJlc3BvbnNlICYmIHRhcmdldEhvb2suX3Jlc3BvbnNlRXZlbnRDb25maWd1cmVPcHRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wdHMsIGlkOiBldmVudElkIH0gPSBldmVudERhdGEgYXMgQ29uZmlndXJlUmVzcG9uc2VFdmVudDtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucyh7IGV2ZW50SWQsIG9wdHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TW9jayAoeyB0ZXN0SWQsIGhvb2tJZCwgcnVsZUlkLCByZXNwb25zZUV2ZW50SWQsIG1vY2sgfTogU2V0TW9ja0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNhbGwodGhpcy5zZXRNb2NrLCB7IHRlc3RJZCwgaG9va0lkLCBydWxlSWQsIHJlc3BvbnNlRXZlbnRJZCwgbW9jayB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Q29uZmlndXJlUmVzcG9uc2VFdmVudE9wdGlvbnMgKHsgZXZlbnRJZCwgb3B0cyB9OiBTZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9uc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNhbGwodGhpcy5zZXRDb25maWd1cmVSZXNwb25zZUV2ZW50T3B0aW9ucywgeyBldmVudElkLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRIZWFkZXJPbkNvbmZpZ3VyZVJlc3BvbnNlRXZlbnQgKHsgZXZlbnRJZCwgaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUgfTogU2V0SGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY2FsbCh0aGlzLnNldEhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCwgeyBldmVudElkLCBoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50ICh7IGV2ZW50SWQsIGhlYWRlck5hbWUgfTogUmVtb3ZlSGVhZGVyT25Db25maWd1cmVSZXNwb25zZUV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY2FsbCh0aGlzLnJlbW92ZUhlYWRlck9uQ29uZmlndXJlUmVzcG9uc2VFdmVudCwgeyBldmVudElkLCBoZWFkZXJOYW1lIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlUmVxdWVzdEZpbHRlclJ1bGVQcmVkaWNhdGUgKHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8gfTogRXhlY3V0ZVJlcXVlc3RGaWx0ZXJSdWxlUHJlZGljYXRlQXJndW1lbnRzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHRlc3QgICAgICAgPSB0aGlzLnN0YXRlLnVuaXRzW3Rlc3RJZF0gYXMgVGVzdDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SG9vayA9IHRlc3QucmVxdWVzdEhvb2tzLmZpbmQoaG9vayA9PiBob29rLmlkID09PSBob29rSWQpIGFzIFJlcXVlc3RIb29rO1xuICAgICAgICBjb25zdCB0YXJnZXRSdWxlID0gdGFyZ2V0SG9vay5fcmVxdWVzdEZpbHRlclJ1bGVzLmZpbmQocnVsZSA9PiBydWxlLmlkID09PSBydWxlSWQpIGFzIFJlcXVlc3RGaWx0ZXJSdWxlO1xuICAgICAgICBjb25zdCByZXN1bHQgICAgID0gYXdhaXQgdGFyZ2V0UnVsZS5vcHRpb25zLmNhbGwodGFyZ2V0UnVsZSwgcmVxdWVzdEluZm8pO1xuXG4gICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZU1vY2tQcmVkaWNhdGUgKHsgdGVzdElkLCBob29rSWQsIHJ1bGVJZCwgcmVxdWVzdEluZm8sIHJlcyB9OiBFeGVjdXRlTW9ja1ByZWRpY2F0ZSk6IFByb21pc2U8SW5jb21pbmdNZXNzYWdlTGlrZUluaXRPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHRlc3QgICAgICAgICA9IHRoaXMuc3RhdGUudW5pdHNbdGVzdElkXSBhcyBUZXN0O1xuICAgICAgICBjb25zdCByZXF1ZXN0TW9jayAgPSB0ZXN0LnJlcXVlc3RIb29rcy5maW5kKGhvb2sgPT4gaG9vay5pZCA9PT0gaG9va0lkKSBhcyBSZXF1ZXN0TW9jaztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VNb2NrID0gcmVxdWVzdE1vY2subW9ja3MuZ2V0KHJ1bGVJZCkgYXMgUmVzcG9uc2VNb2NrO1xuXG4gICAgICAgIHJlc3BvbnNlTW9ja1NldEJvZHlNZXRob2QuYWRkKHJlcyk7XG5cbiAgICAgICAgcmVzID0gT2JqZWN0LmFzc2lnbihyZXMsIGF3YWl0IChyZXNwb25zZU1vY2suYm9keSBhcyBGdW5jdGlvbikocmVxdWVzdEluZm8sIHJlcykpO1xuXG4gICAgICAgIHJlc3BvbnNlTW9ja1NldEJvZHlNZXRob2QucmVtb3ZlKHJlcyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2FybmluZ01lc3NhZ2VzICh7IHRlc3RSdW5JZCB9OiBUZXN0UnVuTG9jYXRvcik6IFByb21pc2U8V2FybmluZ0xvZ01lc3NhZ2VbXT4ge1xuICAgICAgICAvLyBOT1RFOiBJbiBjYXNlIG9mIHJhaXNpbmcgYW4gZXJyb3IgaW50byBSZXBvcnRlclBsdWdpbkhvc3QgbWV0aG9kcyxcbiAgICAgICAgLy8gVGVzdFJ1biBoYXMgdGltZSB0byBzdGFydC5cbiAgICAgICAgY29uc3QgdGFyZ2V0VGVzdFJ1biA9IHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0VGVzdFJ1biA/IHRhcmdldFRlc3RSdW4ud2FybmluZ0xvZy5tZXNzYWdlSW5mb3MgOiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzICggeyBob29rSWQsIGhvb2tDbGFzc05hbWUsIHJ1bGVzIH06IEFkZFJlcXVlc3RFdmVudExpc3RlbmVyc0FyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eS5jYWxsKHRoaXMuYWRkUmVxdWVzdEV2ZW50TGlzdGVuZXJzLCB7IGhvb2tJZCwgaG9va0NsYXNzTmFtZSwgcnVsZXMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycyAoeyBydWxlcyB9OiBSZW1vdmVSZXF1ZXN0RXZlbnRMaXN0ZW5lcnNBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHkuY2FsbCh0aGlzLnJlbW92ZVJlcXVlc3RFdmVudExpc3RlbmVycywgeyBydWxlcyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZVRlc3RSdW5EYXRhICh7IHRlc3RSdW5JZCwgdGVzdElkLCBicm93c2VyLCBhY3RpdmVXaW5kb3dJZCwgbWVzc2FnZUJ1cyB9OiBJbml0aWFsaXplVGVzdFJ1bkRhdGFBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogSW4gY2FzZSBvZiByYWlzaW5nIGFuIGVycm9yIGludG8gUmVwb3J0ZXJQbHVnaW5Ib3N0IG1ldGhvZHMsXG4gICAgICAgIC8vIFRlc3RSdW4gaGFzIHRpbWUgdG8gc3RhcnQuXG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLnN0YXRlLnVuaXRzW3Rlc3RJZF0gYXMgVGVzdDtcblxuICAgICAgICBpZiAoIXRlc3QpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVRlc3RSdW5Qcm94eSh7IHRlc3RSdW5JZCwgdGVzdCwgYnJvd3NlciwgYWN0aXZlV2luZG93SWQsIG1lc3NhZ2VCdXMgfSk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVGaXh0dXJlQ3R4KHRlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMgKCk6IHZvaWQge1xuICAgICAgICBUZXN0Q29udHJvbGxlci5lbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKTogdm9pZCB7XG4gICAgICAgIFRlc3RDb250cm9sbGVyLmRpc2FibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXNzZXJ0aW9uQWN0dWFsVmFsdWUgKHsgdGVzdFJ1bklkLCBjb21tYW5kSWQgfTogQ29tbWFuZExvY2F0b3IpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKS5nZXRBc3NlcnRpb25BY3R1YWxWYWx1ZShjb21tYW5kSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlUm9sZUluaXRGbiAoeyB0ZXN0UnVuSWQsIHJvbGVJZCB9OiBFeGVjdXRlUm9sZUluaXRGbkFyZ3VtZW50cyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCByb2xlICAgICAgICAgPSB0aGlzLl9nZXRUYXJnZXRSb2xlKHJvbGVJZCk7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Qcm94eSA9IHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKTtcblxuICAgICAgICByZXR1cm4gKHJvbGUuX2luaXRGbiBhcyBGdW5jdGlvbikodGVzdFJ1blByb3h5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q3R4ICh7IHRlc3RSdW5JZCB9OiBUZXN0UnVuTG9jYXRvcik6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCkuY3R4O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaXh0dXJlQ3R4ICh7IHRlc3RSdW5JZCB9OiBUZXN0UnVuTG9jYXRvcik6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCkuZml4dHVyZUN0eDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Q3R4ICh7IHRlc3RSdW5JZCwgdmFsdWUgfTogU2V0Q3R4QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKS5jdHggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Rml4dHVyZUN0eCAoeyB0ZXN0UnVuSWQsIHZhbHVlIH06IFNldEN0eEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9nZXRUYXJnZXRUZXN0UnVuKHRlc3RSdW5JZCkuZml4dHVyZUN0eCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvbGVBcHBlYXJlZCAocm9sZTogUm9sZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5yb2xlcy5oYXMocm9sZS5pZCkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdGF0ZS5yb2xlcy5zZXQocm9sZS5pZCwgcm9sZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZVJvbGVQcm9wZXJ0eSAoeyByb2xlSWQsIG5hbWUsIHZhbHVlIH06IFVwZGF0ZVJvbGVQcm9wZXJ0eUFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByb2xlID0gdGhpcy5fZ2V0VGFyZ2V0Um9sZShyb2xlSWQpO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcm9sZVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlSnNFeHByZXNzaW9uICh7IGV4cHJlc3Npb24sIHRlc3RSdW5JZCwgb3B0aW9ucyB9OiBFeGVjdXRlSnNFeHByZXNzaW9uQXJndW1lbnRzKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Qcm94eSA9IHRoaXMuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKTtcblxuICAgICAgICByZXR1cm4gZXhlY3V0ZUpzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0ZXN0UnVuUHJveHksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24gKHsgZXhwcmVzc2lvbiwgdGVzdFJ1bklkLCBjYWxsc2l0ZSB9OiBFeGVjdXRlQXN5bmNKc0V4cHJlc3Npb25Bcmd1bWVudHMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgdGVzdFJ1blByb3h5ID0gdGhpcy5fZ2V0VGFyZ2V0VGVzdFJ1bih0ZXN0UnVuSWQpO1xuXG4gICAgICAgIHJldHVybiBleGVjdXRlQXN5bmNKc0V4cHJlc3Npb24oZXhwcmVzc2lvbiwgdGVzdFJ1blByb3h5LCBjYWxsc2l0ZSwgYXN5bmMgKGVycjogVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQgfCBVbmNhdWdodEVycm9ySW5DdXN0b21TY3JpcHQpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbmNhdWdodFRlc3RDYWZlRXJyb3JJbkN1c3RvbVNjcmlwdCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFcnJvciA9IGVyciBhcyBVbmNhdWdodFRlc3RDYWZlRXJyb3JJbkN1c3RvbVNjcmlwdDtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRSZW5kZXJIdG1sV2l0aG91dFN0YWNrKHRhcmdldEVycm9yKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHRlc3RSdW5Qcm94eS5yZXN0b3JlT3JpZ2luQ2FsbHNpdGVGb3JFcnJvcih0YXJnZXRFcnJvcik7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGVyci5lcnJDYWxsc2l0ZSA9IHJlbmRlckh0bWxXaXRob3V0U3RhY2sodGFyZ2V0RXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZUFzc2VydGlvbkZuICh7IHRlc3RSdW5JZCwgY29tbWFuZElkIH06IENvbW1hbmRMb2NhdG9yKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICAgICAgICAuX2dldFRhcmdldFRlc3RSdW4odGVzdFJ1bklkKVxuICAgICAgICAgICAgLmV4ZWN1dGVBc3NlcnRpb25Gbihjb21tYW5kSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhZGRVbmV4cGVjdGVkRXJyb3IgKHsgdHlwZSwgbWVzc2FnZSB9OiBBZGRVbmV4cGVjdGVkRXJyb3JBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHkuY2FsbCh0aGlzLmFkZFVuZXhwZWN0ZWRFcnJvciwgeyB0eXBlLCBtZXNzYWdlIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja1dpbmRvdyAoeyB0ZXN0UnVuSWQsIGNvbW1hbmRJZCwgdXJsLCB0aXRsZSB9OiBDaGVja1dpbmRvd0FyZ3VtZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICAgICAgICAgIC5fZ2V0VGFyZ2V0VGVzdFJ1bih0ZXN0UnVuSWQpXG4gICAgICAgICAgICAgICAgLmNoZWNrV2luZG93KGNvbW1hbmRJZCwgeyB0aXRsZSwgdXJsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN3aXRjaFRvV2luZG93UHJlZGljYXRlRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVRlc3RSdW5Gcm9tU3RhdGUgKHsgdGVzdFJ1bklkIH06IFRlc3RSdW5Mb2NhdG9yKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlLnRlc3RSdW5zW3Rlc3RSdW5JZF07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUZpeHR1cmVDdHhzRnJvbVN0YXRlICh7IGZpeHR1cmVJZHMgfTogUmVtb3ZlRml4dHVyZUN0eHNBcmd1bWVudHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmaXh0dXJlSWQgb2YgZml4dHVyZUlkcylcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlLmZpeHR1cmVDdHhzW2ZpeHR1cmVJZF07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZVVuaXRzRnJvbVN0YXRlICh7IHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkIH06IFJlbW92ZVVuaXRzRnJvbVN0YXRlQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVuaXRJZHMgPSB0aGlzLl9ydW5uYWJsZUNvbmZpZ3VyYXRpb25Vbml0c1JlbGF0aW9uc1tydW5uYWJsZUNvbmZpZ3VyYXRpb25JZF07XG5cbiAgICAgICAgZm9yIChjb25zdCB1bml0SWQgb2YgdW5pdElkcylcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlLnVuaXRzW3VuaXRJZF07XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3J1bm5hYmxlQ29uZmlndXJhdGlvblVuaXRzUmVsYXRpb25zW3J1bm5hYmxlQ29uZmlndXJhdGlvbklkXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb21waWxlclNlcnZpY2UoKTtcbiJdfQ==
@@ -26,4 +26,4 @@ function isIPCResponsePacket(message) {
26
26
  return ['id', 'type', 'sync', 'data'].every(prop => prop in message);
27
27
  }
28
28
  exports.isIPCResponsePacket = isIPCResponsePacket;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91dGlscy9pcGMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSw0RUFBMkQ7QUFLM0QsSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3JCLHVEQUFPLENBQUE7SUFDUCx5REFBUSxDQUFBO0FBQ1osQ0FBQyxFQUhXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBR3hCO0FBZ0NELElBQVksa0JBRVg7QUFGRCxXQUFZLGtCQUFrQjtJQUMxQixtQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFGVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQUU3QjtBQVlELFNBQWdCLG1CQUFtQixDQUFFLEdBQWtCO0lBQ25ELE9BQVEsR0FBeUIsQ0FBQyxJQUFJLEtBQUssb0JBQWlCLENBQUMsSUFBSSxDQUFDO0FBQ3RFLENBQUM7QUFGRCxrREFFQztBQUVELFNBQWdCLGtCQUFrQixDQUFFLFFBQWtEO0lBQ2xGLE9BQU8sQ0FBQyxDQUFFLFFBQTZCLENBQUMsS0FBSyxDQUFDO0FBQ2xELENBQUM7QUFGRCxnREFFQztBQUVELFNBQWdCLG1CQUFtQixDQUFFLE9BQWU7SUFDaEQsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRkQsa0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVbnN1YnNjcmliZUZuIH0gZnJvbSAnZW1pdHRlcnknO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuLi8uLi8uLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCBUZXN0Q2FmZUVycm9yTGlzdCBmcm9tICcuLi8uLi8uLi9lcnJvcnMvZXJyb3ItbGlzdCc7XG5cblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxFcnJvciA9IEVycm9yIHwgVGVzdENhZmVFcnJvckxpc3Q7XG5cbmV4cG9ydCBlbnVtIElQQ1BhY2tldFR5cGUge1xuICAgIHJlcXVlc3QsXG4gICAgcmVzcG9uc2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENQYWNrZXQge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHlwZTogSVBDUGFja2V0VHlwZTtcbiAgICBzeW5jOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlcXVlc3REYXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGFyZ3M6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlcXVlc3RQYWNrZXQgZXh0ZW5kcyBJUENQYWNrZXQge1xuICAgIGRhdGE6IElQQ1JlcXVlc3REYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1N1Y2Nlc3NmdWxSZXNwb25zZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXN1bHQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENFcnJvclJlc3BvbnNlIHtcbiAgICBlcnJvcjogRXh0ZXJuYWxFcnJvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENSZXNwb25zZVBhY2tldCBleHRlbmRzIElQQ1BhY2tldCB7XG4gICAgZGF0YTogSVBDU3VjY2Vzc2Z1bFJlc3BvbnNlIHwgSVBDRXJyb3JSZXNwb25zZTtcbn1cblxuZXhwb3J0IGVudW0gSVBDVHJhbnNwb3J0RXZlbnRzIHtcbiAgICBkYXRhID0gJ2RhdGEnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBDVHJhbnNwb3J0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBvbihldmVudDogSVBDVHJhbnNwb3J0RXZlbnRzLmRhdGEsIGhhbmRsZXI6IChkYXRhOiBJUENQYWNrZXQpID0+IFByb21pc2U8dm9pZD4pOiBVbnN1YnNjcmliZUZuO1xuXG4gICAgcmVhZCgpOiB2b2lkO1xuICAgIHdyaXRlKHBhY2tldDogSVBDUGFja2V0KTogUHJvbWlzZTx2b2lkPjtcblxuICAgIHJlYWRTeW5jKCk6IElQQ1Jlc3BvbnNlUGFja2V0O1xuICAgIHdyaXRlU3luYyhwYWNrZXQ6IElQQ1BhY2tldCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RDYWZlRXJyb3JMaXN0IChlcnI6IEV4dGVybmFsRXJyb3IpOiBlcnIgaXMgVGVzdENhZmVFcnJvckxpc3Qge1xuICAgIHJldHVybiAoZXJyIGFzIFRlc3RDYWZlRXJyb3JMaXN0KS5uYW1lID09PSBUZXN0Q2FmZUVycm9yTGlzdC5uYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJUENFcnJvclJlc3BvbnNlIChyZXNwb25zZTogSVBDU3VjY2Vzc2Z1bFJlc3BvbnNlIHwgSVBDRXJyb3JSZXNwb25zZSk6IHJlc3BvbnNlIGlzIElQQ0Vycm9yUmVzcG9uc2Uge1xuICAgIHJldHVybiAhIShyZXNwb25zZSBhcyBJUENFcnJvclJlc3BvbnNlKS5lcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSVBDUmVzcG9uc2VQYWNrZXQgKG1lc3NhZ2U6IG9iamVjdCk6IG1lc3NhZ2UgaXMgSVBDUmVzcG9uc2VQYWNrZXQge1xuICAgIHJldHVybiBbJ2lkJywgJ3R5cGUnLCAnc3luYycsICdkYXRhJ10uZXZlcnkocHJvcCA9PiBwcm9wIGluIG1lc3NhZ2UpO1xufVxuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91dGlscy9pcGMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSw0RUFBMkQ7QUFLM0QsSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3JCLHVEQUFPLENBQUE7SUFDUCx5REFBUSxDQUFBO0FBQ1osQ0FBQyxFQUhXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBR3hCO0FBOEJELElBQVksa0JBRVg7QUFGRCxXQUFZLGtCQUFrQjtJQUMxQixtQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFGVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQUU3QjtBQVlELFNBQWdCLG1CQUFtQixDQUFFLEdBQWtCO0lBQ25ELE9BQVEsR0FBeUIsQ0FBQyxJQUFJLEtBQUssb0JBQWlCLENBQUMsSUFBSSxDQUFDO0FBQ3RFLENBQUM7QUFGRCxrREFFQztBQUVELFNBQWdCLGtCQUFrQixDQUFFLFFBQWtEO0lBQ2xGLE9BQU8sQ0FBQyxDQUFFLFFBQTZCLENBQUMsS0FBSyxDQUFDO0FBQ2xELENBQUM7QUFGRCxnREFFQztBQUVELFNBQWdCLG1CQUFtQixDQUFFLE9BQWU7SUFDaEQsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRkQsa0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVbnN1YnNjcmliZUZuIH0gZnJvbSAnZW1pdHRlcnknO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuLi8uLi8uLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCBUZXN0Q2FmZUVycm9yTGlzdCBmcm9tICcuLi8uLi8uLi9lcnJvcnMvZXJyb3ItbGlzdCc7XG5cblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxFcnJvciA9IEVycm9yIHwgVGVzdENhZmVFcnJvckxpc3Q7XG5cbmV4cG9ydCBlbnVtIElQQ1BhY2tldFR5cGUge1xuICAgIHJlcXVlc3QsXG4gICAgcmVzcG9uc2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENQYWNrZXQge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHlwZTogSVBDUGFja2V0VHlwZTtcbiAgICBzeW5jOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1JlcXVlc3REYXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICBhcmdzOiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENSZXF1ZXN0UGFja2V0IGV4dGVuZHMgSVBDUGFja2V0IHtcbiAgICBkYXRhOiBJUENSZXF1ZXN0RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENTdWNjZXNzZnVsUmVzcG9uc2Uge1xuICAgIHJlc3VsdDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQQ0Vycm9yUmVzcG9uc2Uge1xuICAgIGVycm9yOiBFeHRlcm5hbEVycm9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQQ1Jlc3BvbnNlUGFja2V0IGV4dGVuZHMgSVBDUGFja2V0IHtcbiAgICBkYXRhOiBJUENTdWNjZXNzZnVsUmVzcG9uc2UgfCBJUENFcnJvclJlc3BvbnNlO1xufVxuXG5leHBvcnQgZW51bSBJUENUcmFuc3BvcnRFdmVudHMge1xuICAgIGRhdGEgPSAnZGF0YSdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUENUcmFuc3BvcnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIG9uKGV2ZW50OiBJUENUcmFuc3BvcnRFdmVudHMuZGF0YSwgaGFuZGxlcjogKGRhdGE6IElQQ1BhY2tldCkgPT4gUHJvbWlzZTx2b2lkPik6IFVuc3Vic2NyaWJlRm47XG5cbiAgICByZWFkKCk6IHZvaWQ7XG4gICAgd3JpdGUocGFja2V0OiBJUENQYWNrZXQpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcmVhZFN5bmMoKTogSVBDUmVzcG9uc2VQYWNrZXQ7XG4gICAgd3JpdGVTeW5jKHBhY2tldDogSVBDUGFja2V0KTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVzdENhZmVFcnJvckxpc3QgKGVycjogRXh0ZXJuYWxFcnJvcik6IGVyciBpcyBUZXN0Q2FmZUVycm9yTGlzdCB7XG4gICAgcmV0dXJuIChlcnIgYXMgVGVzdENhZmVFcnJvckxpc3QpLm5hbWUgPT09IFRlc3RDYWZlRXJyb3JMaXN0Lm5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lQQ0Vycm9yUmVzcG9uc2UgKHJlc3BvbnNlOiBJUENTdWNjZXNzZnVsUmVzcG9uc2UgfCBJUENFcnJvclJlc3BvbnNlKTogcmVzcG9uc2UgaXMgSVBDRXJyb3JSZXNwb25zZSB7XG4gICAgcmV0dXJuICEhKHJlc3BvbnNlIGFzIElQQ0Vycm9yUmVzcG9uc2UpLmVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJUENSZXNwb25zZVBhY2tldCAobWVzc2FnZTogb2JqZWN0KTogbWVzc2FnZSBpcyBJUENSZXNwb25zZVBhY2tldCB7XG4gICAgcmV0dXJuIFsnaWQnLCAndHlwZScsICdzeW5jJywgJ2RhdGEnXS5ldmVyeShwcm9wID0+IHByb3AgaW4gbWVzc2FnZSk7XG59XG4iXX0=
@@ -56,7 +56,6 @@ class IPCProxy extends async_event_emitter_1.default {
56
56
  Object.assign(error, errorData);
57
57
  return error;
58
58
  }
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
59
  register(func, context = null) {
61
60
  func = (0, lodash_1.castArray)(func);
62
61
  func.forEach(fn => {
@@ -65,7 +64,6 @@ class IPCProxy extends async_event_emitter_1.default {
65
64
  this._handlers[fn.name] = fn.bind(context);
66
65
  });
67
66
  }
68
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
67
  async call(target, ...args) {
70
68
  const name = typeof target === 'string' ? target : target.name;
71
69
  const packet = this._createPacket({ data: { name, args }, sync: false });
@@ -76,7 +74,6 @@ class IPCProxy extends async_event_emitter_1.default {
76
74
  throw data.error;
77
75
  return data.result;
78
76
  }
79
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
77
  callSync(target, ...args) {
81
78
  const name = typeof target === 'string' ? target : target.name;
82
79
  const requestPacket = this._createPacket({ data: { name, args }, sync: true });
@@ -94,4 +91,4 @@ class IPCProxy extends async_event_emitter_1.default {
94
91
  }
95
92
  }
96
93
  exports.IPCProxy = IPCProxy;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvdXRpbHMvaXBjL3Byb3h5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZGQUE4RDtBQUM5RCxtQ0FBbUM7QUFFbkMsNkNBU3NCO0FBUXRCLE1BQWEsUUFBUyxTQUFRLDZCQUFZO0lBTXRDLFlBQW9CLFNBQXVCO1FBQ3ZDLEtBQUssRUFBRSxDQUFDO1FBTEosb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFPeEIsSUFBSSxDQUFDLFFBQVEsR0FBSyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFFNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQywrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUUsTUFBaUI7UUFDcEMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLDBCQUFhLENBQUMsUUFBUTtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztZQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FBRSxhQUErQjtRQUNyRCxJQUFJLFVBQVUsR0FB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QUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6QyxJQUFJLGNBQWMsR0FBc0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVuRSxPQUFPLGNBQWMsQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUU7WUFDekMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztRQUVyQyxJQUFJLElBQUEsK0JBQWtCLEVBQUMsUUFBUSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUV6QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVNLElBQUk7UUFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0NBQ0o7QUF2SEQsNEJBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuLi8uLi8uLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCB7IGNhc3RBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7XG4gICAgSVBDUGFja2V0LFxuICAgIElQQ1BhY2tldFR5cGUsXG4gICAgSVBDUmVxdWVzdFBhY2tldCxcbiAgICBJUENSZXNwb25zZVBhY2tldCxcbiAgICBJUENSZXF1ZXN0RGF0YSxcbiAgICBpc0lQQ0Vycm9yUmVzcG9uc2UsXG4gICAgSVBDVHJhbnNwb3J0RXZlbnRzLFxuICAgIElQQ1RyYW5zcG9ydCxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICAgIGRhdGE6IElQQ1JlcXVlc3REYXRhO1xuICAgIHN5bmM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBJUENQcm94eSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBfdHJhbnNwb3J0OiBJUENUcmFuc3BvcnQ7XG4gICAgcHJpdmF0ZSBfcmVxdWVzdENvdW50ZXIgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBGdW5jdGlvbiB9O1xuICAgIHByaXZhdGUgX3N0b3BwZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRyYW5zcG9ydDogSVBDVHJhbnNwb3J0KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fc3RvcHBlZCAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcblxuICAgICAgICB0aGlzLl9oYW5kbGVycyA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydC5yZWFkKCk7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydC5vbihJUENUcmFuc3BvcnRFdmVudHMuZGF0YSwgcmF3UGFja2V0ID0+IHRoaXMuX29uUmVhZChyYXdQYWNrZXQpKTtcbiAgICAgICAgdGhpcy5vbigncmVxdWVzdCcsIGRhdGEgPT4gdGhpcy5fb25SZXF1ZXN0KGRhdGEpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblJlYWQgKHBhY2tldDogSVBDUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChwYWNrZXQudHlwZSA9PT0gSVBDUGFja2V0VHlwZS5yZXNwb25zZSlcbiAgICAgICAgICAgIHRoaXMuZW1pdChgcmVzcG9uc2UtJHtwYWNrZXQuaWR9YCwgcGFja2V0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgcGFja2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblJlcXVlc3QgKHJlcXVlc3RQYWNrZXQ6IElQQ1JlcXVlc3RQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdERhdGEgPSBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHREYXRhID0geyByZXN1bHQ6IGF3YWl0IHRoaXMuX2hhbmRsZXJzW3JlcXVlc3RQYWNrZXQuZGF0YS5uYW1lXSguLi5yZXF1ZXN0UGFja2V0LmRhdGEuYXJncykgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgcmVzdWx0RGF0YSA9IHsgZXJyb3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUGFja2V0OiBJUENSZXNwb25zZVBhY2tldCA9IHtcbiAgICAgICAgICAgIGlkOiAgIHJlcXVlc3RQYWNrZXQuaWQsXG4gICAgICAgICAgICB0eXBlOiBJUENQYWNrZXRUeXBlLnJlc3BvbnNlLFxuICAgICAgICAgICAgc3luYzogcmVxdWVzdFBhY2tldC5zeW5jLFxuXG4gICAgICAgICAgICBkYXRhOiByZXN1bHREYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgb2YgbG9uZy1ydW5uaW5nIGFjdGlvbiBjYW4gY29tZSBhZnRlciB0aGUgY29tcGlsZXIgc2VydmljZSB3YXMgdGVybWluYXRlZC5cbiAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNwb3J0LndyaXRlKHJlc3BvbnNlUGFja2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVQYWNrZXQgKG9wdHM6IFJlcXVlc3RPcHRpb25zKTogSVBDUmVxdWVzdFBhY2tldCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogICB0aGlzLl9yZXF1ZXN0Q291bnRlcisrLFxuICAgICAgICAgICAgdHlwZTogSVBDUGFja2V0VHlwZS5yZXF1ZXN0LFxuICAgICAgICAgICAgc3luYzogb3B0cy5zeW5jLFxuICAgICAgICAgICAgZGF0YTogb3B0cy5kYXRhLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVBsYWluRXJyb3IgKGVycm9yRGF0YTogRXJyb3IpOiBFcnJvciB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcblxuICAgICAgICBPYmplY3QuYXNzaWduKGVycm9yLCBlcnJvckRhdGEpO1xuXG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyByZWdpc3RlciAoZnVuYzogRnVuY3Rpb24gfCBGdW5jdGlvbltdLCBjb250ZXh0OiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGZ1bmMgPSBjYXN0QXJyYXkoZnVuYyk7XG5cbiAgICAgICAgZnVuYy5mb3JFYWNoKGZuID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYW5kbGVyc1tmbi5uYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXJzW2ZuLm5hbWVdID0gZm4uYmluZChjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgYXN5bmMgY2FsbCAodGFyZ2V0OiBzdHJpbmd8RnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgbmFtZSAgICAgICAgICAgID0gdHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycgPyB0YXJnZXQgOiB0YXJnZXQubmFtZTtcbiAgICAgICAgY29uc3QgcGFja2V0ICAgICAgICAgID0gdGhpcy5fY3JlYXRlUGFja2V0KHsgZGF0YTogeyBuYW1lLCBhcmdzIH0sIHN5bmM6IGZhbHNlIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZVByb21pc2UgPSB0aGlzLm9uY2UoYHJlc3BvbnNlLSR7cGFja2V0LmlkfWApO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3RyYW5zcG9ydC53cml0ZShwYWNrZXQpO1xuXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgcmVzcG9uc2VQcm9taXNlO1xuXG4gICAgICAgIGlmIChpc0lQQ0Vycm9yUmVzcG9uc2UoZGF0YSkpXG4gICAgICAgICAgICB0aHJvdyBkYXRhLmVycm9yO1xuXG4gICAgICAgIHJldHVybiBkYXRhLnJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyBjYWxsU3luYyAodGFyZ2V0OiBzdHJpbmd8RnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSAgICAgICAgICA9IHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnID8gdGFyZ2V0IDogdGFyZ2V0Lm5hbWU7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYWNrZXQgPSB0aGlzLl9jcmVhdGVQYWNrZXQoeyBkYXRhOiB7IG5hbWUsIGFyZ3MgfSwgc3luYzogdHJ1ZSB9KTtcblxuICAgICAgICB0aGlzLl90cmFuc3BvcnQud3JpdGVTeW5jKHJlcXVlc3RQYWNrZXQpO1xuXG4gICAgICAgIGxldCByZXNwb25zZVBhY2tldDogSVBDUmVzcG9uc2VQYWNrZXQgPSB0aGlzLl90cmFuc3BvcnQucmVhZFN5bmMoKTtcblxuICAgICAgICB3aGlsZSAocmVzcG9uc2VQYWNrZXQuaWQgIT09IHJlcXVlc3RQYWNrZXQuaWQpXG4gICAgICAgICAgICByZXNwb25zZVBhY2tldCA9IHRoaXMuX3RyYW5zcG9ydC5yZWFkU3luYygpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VQYWNrZXQuZGF0YTtcblxuICAgICAgICBpZiAoaXNJUENFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgICAgIHRocm93IHJlc3BvbnNlLmVycm9yO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdG9wcGVkID0gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvdXRpbHMvaXBjL3Byb3h5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZGQUE4RDtBQUM5RCxtQ0FBbUM7QUFFbkMsNkNBU3NCO0FBUXRCLE1BQWEsUUFBUyxTQUFRLDZCQUFZO0lBTXRDLFlBQW9CLFNBQXVCO1FBQ3ZDLEtBQUssRUFBRSxDQUFDO1FBTEosb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFPeEIsSUFBSSxDQUFDLFFBQVEsR0FBSyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFFNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQywrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUUsTUFBaUI7UUFDcEMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLDBCQUFhLENBQUMsUUFBUTtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztZQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FBRSxhQUErQjtRQUNyRCxJQUFJLFVBQVUsR0FB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Q0FBQyxJQUFJLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6QyxJQUFJLGNBQWMsR0FBc0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVuRSxPQUFPLGNBQWMsQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUU7WUFDekMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztRQUVyQyxJQUFJLElBQUEsK0JBQWtCLEVBQUMsUUFBUSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUV6QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVNLElBQUk7UUFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0NBQ0o7QUFwSEQsNEJBb0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuLi8uLi8uLi91dGlscy9hc3luYy1ldmVudC1lbWl0dGVyJztcbmltcG9ydCB7IGNhc3RBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7XG4gICAgSVBDUGFja2V0LFxuICAgIElQQ1BhY2tldFR5cGUsXG4gICAgSVBDUmVxdWVzdFBhY2tldCxcbiAgICBJUENSZXNwb25zZVBhY2tldCxcbiAgICBJUENSZXF1ZXN0RGF0YSxcbiAgICBpc0lQQ0Vycm9yUmVzcG9uc2UsXG4gICAgSVBDVHJhbnNwb3J0RXZlbnRzLFxuICAgIElQQ1RyYW5zcG9ydCxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICAgIGRhdGE6IElQQ1JlcXVlc3REYXRhO1xuICAgIHN5bmM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBJUENQcm94eSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBfdHJhbnNwb3J0OiBJUENUcmFuc3BvcnQ7XG4gICAgcHJpdmF0ZSBfcmVxdWVzdENvdW50ZXIgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBGdW5jdGlvbiB9O1xuICAgIHByaXZhdGUgX3N0b3BwZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRyYW5zcG9ydDogSVBDVHJhbnNwb3J0KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fc3RvcHBlZCAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcblxuICAgICAgICB0aGlzLl9oYW5kbGVycyA9IHt9O1xuXG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydC5yZWFkKCk7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydC5vbihJUENUcmFuc3BvcnRFdmVudHMuZGF0YSwgcmF3UGFja2V0ID0+IHRoaXMuX29uUmVhZChyYXdQYWNrZXQpKTtcbiAgICAgICAgdGhpcy5vbigncmVxdWVzdCcsIGRhdGEgPT4gdGhpcy5fb25SZXF1ZXN0KGRhdGEpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblJlYWQgKHBhY2tldDogSVBDUGFja2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChwYWNrZXQudHlwZSA9PT0gSVBDUGFja2V0VHlwZS5yZXNwb25zZSlcbiAgICAgICAgICAgIHRoaXMuZW1pdChgcmVzcG9uc2UtJHtwYWNrZXQuaWR9YCwgcGFja2V0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgcGFja2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblJlcXVlc3QgKHJlcXVlc3RQYWNrZXQ6IElQQ1JlcXVlc3RQYWNrZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdERhdGEgPSBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHREYXRhID0geyByZXN1bHQ6IGF3YWl0IHRoaXMuX2hhbmRsZXJzW3JlcXVlc3RQYWNrZXQuZGF0YS5uYW1lXSguLi5yZXF1ZXN0UGFja2V0LmRhdGEuYXJncykgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgcmVzdWx0RGF0YSA9IHsgZXJyb3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUGFja2V0OiBJUENSZXNwb25zZVBhY2tldCA9IHtcbiAgICAgICAgICAgIGlkOiAgIHJlcXVlc3RQYWNrZXQuaWQsXG4gICAgICAgICAgICB0eXBlOiBJUENQYWNrZXRUeXBlLnJlc3BvbnNlLFxuICAgICAgICAgICAgc3luYzogcmVxdWVzdFBhY2tldC5zeW5jLFxuXG4gICAgICAgICAgICBkYXRhOiByZXN1bHREYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgb2YgbG9uZy1ydW5uaW5nIGFjdGlvbiBjYW4gY29tZSBhZnRlciB0aGUgY29tcGlsZXIgc2VydmljZSB3YXMgdGVybWluYXRlZC5cbiAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNwb3J0LndyaXRlKHJlc3BvbnNlUGFja2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVQYWNrZXQgKG9wdHM6IFJlcXVlc3RPcHRpb25zKTogSVBDUmVxdWVzdFBhY2tldCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogICB0aGlzLl9yZXF1ZXN0Q291bnRlcisrLFxuICAgICAgICAgICAgdHlwZTogSVBDUGFja2V0VHlwZS5yZXF1ZXN0LFxuICAgICAgICAgICAgc3luYzogb3B0cy5zeW5jLFxuICAgICAgICAgICAgZGF0YTogb3B0cy5kYXRhLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVBsYWluRXJyb3IgKGVycm9yRGF0YTogRXJyb3IpOiBFcnJvciB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcblxuICAgICAgICBPYmplY3QuYXNzaWduKGVycm9yLCBlcnJvckRhdGEpO1xuXG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXIgKGZ1bmM6IEZ1bmN0aW9uIHwgRnVuY3Rpb25bXSwgY29udGV4dDogYW55ID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBmdW5jID0gY2FzdEFycmF5KGZ1bmMpO1xuXG4gICAgICAgIGZ1bmMuZm9yRWFjaChmbiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5faGFuZGxlcnNbZm4ubmFtZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyc1tmbi5uYW1lXSA9IGZuLmJpbmQoY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYWxsICh0YXJnZXQ6IHN0cmluZ3xGdW5jdGlvbiwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBuYW1lICAgICAgICAgICAgPSB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyA/IHRhcmdldCA6IHRhcmdldC5uYW1lO1xuICAgICAgICBjb25zdCBwYWNrZXQgICAgICAgICAgPSB0aGlzLl9jcmVhdGVQYWNrZXQoeyBkYXRhOiB7IG5hbWUsIGFyZ3MgfSwgc3luYzogZmFsc2UgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IHRoaXMub25jZShgcmVzcG9uc2UtJHtwYWNrZXQuaWR9YCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fdHJhbnNwb3J0LndyaXRlKHBhY2tldCk7XG5cbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCByZXNwb25zZVByb21pc2U7XG5cbiAgICAgICAgaWYgKGlzSVBDRXJyb3JSZXNwb25zZShkYXRhKSlcbiAgICAgICAgICAgIHRocm93IGRhdGEuZXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIGRhdGEucmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsU3luYyAodGFyZ2V0OiBzdHJpbmd8RnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSAgICAgICAgICA9IHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnID8gdGFyZ2V0IDogdGFyZ2V0Lm5hbWU7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYWNrZXQgPSB0aGlzLl9jcmVhdGVQYWNrZXQoeyBkYXRhOiB7IG5hbWUsIGFyZ3MgfSwgc3luYzogdHJ1ZSB9KTtcblxuICAgICAgICB0aGlzLl90cmFuc3BvcnQud3JpdGVTeW5jKHJlcXVlc3RQYWNrZXQpO1xuXG4gICAgICAgIGxldCByZXNwb25zZVBhY2tldDogSVBDUmVzcG9uc2VQYWNrZXQgPSB0aGlzLl90cmFuc3BvcnQucmVhZFN5bmMoKTtcblxuICAgICAgICB3aGlsZSAocmVzcG9uc2VQYWNrZXQuaWQgIT09IHJlcXVlc3RQYWNrZXQuaWQpXG4gICAgICAgICAgICByZXNwb25zZVBhY2tldCA9IHRoaXMuX3RyYW5zcG9ydC5yZWFkU3luYygpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VQYWNrZXQuZGF0YTtcblxuICAgICAgICBpZiAoaXNJUENFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgICAgIHRocm93IHJlc3BvbnNlLmVycm9yO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdG9wcGVkID0gdHJ1ZTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const FILE_PROTOCOL = 'file:///';
4
+ function isFileProtocol(url = '') {
5
+ return url.indexOf(FILE_PROTOCOL) === 0;
6
+ }
7
+ exports.default = isFileProtocol;
8
+ module.exports = exports.default;
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZmlsZS1wcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvaXMtZmlsZS1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQyxTQUFTLGNBQWMsQ0FBRSxHQUFHLEdBQUcsRUFBRTtJQUM3QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxrQkFBZSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBGSUxFX1BST1RPQ09MID0gJ2ZpbGU6Ly8vJztcblxuZnVuY3Rpb24gaXNGaWxlUHJvdG9jb2wgKHVybCA9ICcnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHVybC5pbmRleE9mKEZJTEVfUFJPVE9DT0wpID09PSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZpbGVQcm90b2NvbDtcbiJdfQ==