nextlove 2.8.1 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -295,19 +295,40 @@ var createWithRouteSpec = (setupParams) => {
295
295
  globalSchemas = setupParams.addOkStatus ? {
296
296
  ok: z2.boolean()
297
297
  } : {},
298
- supportedArrayFormats = DEFAULT_ARRAY_FORMATS
298
+ supportedArrayFormats = DEFAULT_ARRAY_FORMATS,
299
+ onMultipleAuthMiddlewareFailures
299
300
  } = setupParams;
300
301
  const withRouteSpec = (spec) => {
301
302
  const createRouteExport = (userDefinedRouteFn) => {
302
303
  const rootRequestHandler = async (req, res) => {
303
304
  authMiddlewareMap["none"] = (next) => next;
304
- const auth_middleware = authMiddlewareMap[spec.auth];
305
- if (!auth_middleware)
306
- throw new Error(`Unknown auth type: ${spec.auth}`);
305
+ const authMiddlewares = (Array.isArray(spec.auth) ? spec.auth : [spec.auth]).map((authType) => authMiddlewareMap[authType]);
306
+ const undefinedAuthType = authMiddlewares.find((mw) => !mw);
307
+ if (undefinedAuthType)
308
+ throw new Error(`Unknown auth type: ${undefinedAuthType}`);
309
+ const firstAuthMiddlewareThatSucceeds = (next) => async (req2, res2) => {
310
+ let errors = [];
311
+ let didAuthMiddlewareThrow = true;
312
+ for (const middleware of authMiddlewares) {
313
+ try {
314
+ return await middleware((...args) => {
315
+ didAuthMiddlewareThrow = false;
316
+ return next(...args);
317
+ })(req2, res2);
318
+ } catch (error) {
319
+ errors.push(error);
320
+ continue;
321
+ }
322
+ }
323
+ if (onMultipleAuthMiddlewareFailures && didAuthMiddlewareThrow) {
324
+ onMultipleAuthMiddlewareFailures(errors);
325
+ }
326
+ throw errors[errors.length - 1];
327
+ };
307
328
  return wrappers_default(
308
329
  ...exceptionHandlingMiddleware ? [exceptionHandlingMiddleware] : [],
309
330
  ...globalMiddlewares || [],
310
- auth_middleware,
331
+ firstAuthMiddlewareThatSucceeds,
311
332
  ...globalMiddlewaresAfterAuth || [],
312
333
  ...spec.middlewares || [],
313
334
  with_methods_default(spec.methods),
@@ -351,4 +372,4 @@ export {
351
372
  withExceptionHandling,
352
373
  wrappers
353
374
  };
354
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvaW5kZXgudHMiLCAiLi4vc3JjL3dyYXBwZXJzL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzLnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC12YWxpZGF0aW9uLnRzIiwgIi4uL3NyYy90eXBlcy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmV4cG9ydCAqIGZyb20gXCIuL3dpdGgtcm91dGUtc3BlY1wiXG5leHBvcnQgeyB3cmFwcGVycyB9IGZyb20gXCIuL3dyYXBwZXJzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCJcbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVzcG9uc2UsIE5leHRBcGlSZXF1ZXN0IH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nIH0gZnJvbSBcIi4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgd3JhcHBlcnMsIHsgTWlkZGxld2FyZSB9IGZyb20gXCIuLi93cmFwcGVyc1wiXG5pbXBvcnQge1xuICBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24sXG4gIFF1ZXJ5QXJyYXlGb3JtYXRzLFxuICBSb3V0ZVNwZWMsXG59IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgd2l0aE1ldGhvZHMsIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHNcIlxuaW1wb3J0IHdpdGhWYWxpZGF0aW9uIGZyb20gXCIuL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvblwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgY29uc3QgY2hlY2tSb3V0ZVNwZWMgPSA8XG4gIEF1dGhUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBNZXRob2RzIGV4dGVuZHMgSFRUUE1ldGhvZHNbXSA9IEhUVFBNZXRob2RzW10sXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgIGFueSxcbiAgICBhbnlcbiAgPltdLFxuICBGb3JtRGF0YSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBTcGVjIGV4dGVuZHMgUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID4gPSBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPlxuPihcbiAgc3BlYzogU3BlY1xuKTogc3RyaW5nIGV4dGVuZHMgU3BlY1tcImF1dGhcIl1cbiAgPyBgeW91ciByb3V0ZSBzcGVjIGlzIHVuZGVyc3BlY2lmaWVkLCBhZGQgXCJhcyBjb25zdFwiYFxuICA6IFNwZWMgPT4gc3BlYyBhcyBhbnlcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVJSQVlfRk9STUFUUzogUXVlcnlBcnJheUZvcm1hdHMgPSBbXG4gIFwiYnJhY2tldHNcIixcbiAgXCJjb21tYVwiLFxuICBcInJlcGVhdFwiLFxuXVxuXG5leHBvcnQgY29uc3QgY3JlYXRlV2l0aFJvdXRlU3BlYzogQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uID0gKChcbiAgc2V0dXBQYXJhbXNcbikgPT4ge1xuICBjb25zdCB7XG4gICAgYXV0aE1pZGRsZXdhcmVNYXAgPSB7fSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlcyA9IFtdLFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoID0gW10sXG4gICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSA9IHRydWUsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyxcbiAgICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9uczoge1xuICAgICAgICBnZXRFcnJvckNvbnRleHQ6IChyZXEsIGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pIGFzIGFueSxcbiAgICBnbG9iYWxTY2hlbWFzID0gc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgID8ge1xuICAgICAgICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMsXG4gIH0gPSBzZXR1cFBhcmFtc1xuXG4gIGNvbnN0IHdpdGhSb3V0ZVNwZWMgPSAoc3BlYzogUm91dGVTcGVjKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlUm91dGVFeHBvcnQgPSAodXNlckRlZmluZWRSb3V0ZUZuKSA9PiB7XG4gICAgICBjb25zdCByb290UmVxdWVzdEhhbmRsZXIgPSBhc3luYyAoXG4gICAgICAgIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gICAgICAgIHJlczogTmV4dEFwaVJlc3BvbnNlXG4gICAgICApID0+IHtcbiAgICAgICAgYXV0aE1pZGRsZXdhcmVNYXBbXCJub25lXCJdID0gKG5leHQpID0+IG5leHRcblxuICAgICAgICBjb25zdCBhdXRoX21pZGRsZXdhcmUgPSBhdXRoTWlkZGxld2FyZU1hcFtzcGVjLmF1dGhdXG4gICAgICAgIGlmICghYXV0aF9taWRkbGV3YXJlKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXV0aCB0eXBlOiAke3NwZWMuYXV0aH1gKVxuXG4gICAgICAgIHJldHVybiB3cmFwcGVycyhcbiAgICAgICAgICAuLi4oKGV4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZVxuICAgICAgICAgICAgPyBbZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXVxuICAgICAgICAgICAgOiBbXSkgYXMgW2FueV0pLFxuICAgICAgICAgIC4uLigoZ2xvYmFsTWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICBhdXRoX21pZGRsZXdhcmUsXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIC4uLigoc3BlYy5taWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIHdpdGhNZXRob2RzKHNwZWMubWV0aG9kcyksXG4gICAgICAgICAgd2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAganNvbkJvZHk6IHNwZWMuanNvbkJvZHksXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogc3BlYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbW1vblBhcmFtczogc3BlYy5jb21tb25QYXJhbXMsXG4gICAgICAgICAgICBmb3JtRGF0YTogc3BlYy5mb3JtRGF0YSxcbiAgICAgICAgICAgIGpzb25SZXNwb25zZTogc3BlYy5qc29uUmVzcG9uc2UsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHksXG4gICAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdXNlckRlZmluZWRSb3V0ZUZuXG4gICAgICAgICkocmVxIGFzIGFueSwgcmVzKVxuICAgICAgfVxuXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IE1pZGRsZXdhcmUgYXMgV3JhcHBlck1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiLi4vd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kc1wiXG5pbXBvcnQge1xuICBTZWN1cml0eVNjaGVtZU9iamVjdCxcbiAgU2VjdXJpdHlSZXF1aXJlbWVudE9iamVjdCxcbn0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSBXcmFwcGVyTWlkZGxld2FyZTxULCBEZXA+ICYge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgbW92ZWQgdG8gc2V0dXBQYXJhbXNcbiAgICovXG4gIHNlY3VyaXR5U2NoZW1hPzogU2VjdXJpdHlTY2hlbWVPYmplY3RcbiAgc2VjdXJpdHlPYmplY3RzPzogU2VjdXJpdHlSZXF1aXJlbWVudE9iamVjdFtdXG59XG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlU3BlYzxcbiAgQXV0aCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgTWV0aG9kcyBleHRlbmRzIEhUVFBNZXRob2RzW10gPSBhbnksXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZE9iamVjdDxhbnksIGFueSwgYW55LCBhbnksIGFueT4sXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZE9iamVjdDxhbnksIGFueSwgYW55LCBhbnksIGFueT4sXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RPYmplY3Q8YW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSBhbnlbXSxcbiAgSnNvblJlc3BvbnNlIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnlcbj4ge1xuICBvcGVuQXBpTWV0YWRhdGE/OiBhbnlcbiAgbWV0aG9kczogTWV0aG9kc1xuICBhdXRoOiBBdXRoXG4gIGpzb25Cb2R5PzogSnNvbkJvZHlcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc1xuICBjb21tb25QYXJhbXM/OiBDb21tb25QYXJhbXNcbiAgbWlkZGxld2FyZXM/OiBNaWRkbGV3YXJlc1xuICBqc29uUmVzcG9uc2U/OiBKc29uUmVzcG9uc2VcbiAgZm9ybURhdGE/OiBGb3JtRGF0YVxuICAvKipcbiAgICogYWRkIHgtZmVybi1zZGstcmV0dXJuLXZhbHVlIHRvIHRoZSBvcGVuYXBpIHNwZWMsIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJldHVybiBvbmx5IGEgc3Vic2V0IG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgc2RrUmV0dXJuVmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXVxufVxuXG5leHBvcnQgdHlwZSBNaWRkbGV3YXJlQ2hhaW5PdXRwdXQ8XG4gIE1XQ2hhaW4gZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdXG4+ID0gTVdDaGFpbiBleHRlbmRzIHJlYWRvbmx5IFtdXG4gID8ge31cbiAgOiBNV0NoYWluIGV4dGVuZHMgcmVhZG9ubHkgW2luZmVyIEZpcnN0LCAuLi5pbmZlciBSZXN0XVxuICA/IEZpcnN0IGV4dGVuZHMgTWlkZGxld2FyZTxpbmZlciBULCBhbnk+XG4gICAgPyBUICZcbiAgICAgICAgKFJlc3QgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdXG4gICAgICAgICAgPyBNaWRkbGV3YXJlQ2hhaW5PdXRwdXQ8UmVzdD5cbiAgICAgICAgICA6IG5ldmVyKVxuICAgIDogbmV2ZXJcbiAgOiBuZXZlclxuXG5leHBvcnQgdHlwZSBBdXRoTWlkZGxld2FyZXMgPSB7XG4gIFthdXRoX3R5cGU6IHN0cmluZ106IE1pZGRsZXdhcmU8YW55LCBhbnk+XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5QXJyYXlGb3JtYXQgPSBcImJyYWNrZXRzXCIgfCBcImNvbW1hXCIgfCBcInJlcGVhdFwiXG5cbmV4cG9ydCB0eXBlIFF1ZXJ5QXJyYXlGb3JtYXRzID0gcmVhZG9ubHkgUXVlcnlBcnJheUZvcm1hdFtdXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBQYXJhbXM8XG4gIEF1dGhNVyBleHRlbmRzIEF1dGhNaWRkbGV3YXJlcyA9IEF1dGhNaWRkbGV3YXJlcyxcbiAgR2xvYmFsTVcgZXh0ZW5kcyBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gYW55W10sXG4gIEdsb2JhbE1XQWZ0ZXJBdXRoIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXSA9IGFueVtdXG4+IHtcbiAgYXV0aE1pZGRsZXdhcmVNYXA6IEF1dGhNV1xuICBnbG9iYWxNaWRkbGV3YXJlczogR2xvYmFsTVdcbiAgZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGg/OiBHbG9iYWxNV0FmdGVyQXV0aFxuICBleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmU/OiAoKG5leHQ6IEZ1bmN0aW9uKSA9PiBGdW5jdGlvbikgfCBudWxsXG5cbiAgLy8gVGhlc2UgaW1wcm92ZSBPcGVuQVBJIGdlbmVyYXRpb25cbiAgYXBpTmFtZTogc3RyaW5nXG4gIHByb2R1Y3Rpb25TZXJ2ZXJVcmw6IHN0cmluZ1xuXG4gIGFkZE9rU3RhdHVzPzogYm9vbGVhblxuXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzZWN1cml0eVNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCBTZWN1cml0eVNjaGVtZU9iamVjdD5cbiAgZ2xvYmFsU2NoZW1hcz86IFJlY29yZDxzdHJpbmcsIHouWm9kVHlwZUFueT5cblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCBkZWZhdWx0TWlkZGxld2FyZU1hcCA9IHtcbiAgbm9uZTogKG5leHQpID0+IG5leHQsXG59IGFzIGNvbnN0XG5cbnR5cGUgU2VuZDxUPiA9IChib2R5OiBUKSA9PiB2b2lkXG50eXBlIE5leHRBcGlSZXNwb25zZVdpdGhvdXRKc29uQW5kU3RhdHVzTWV0aG9kcyA9IE9taXQ8XG4gIE5leHRBcGlSZXNwb25zZSxcbiAgXCJqc29uXCIgfCBcInN0YXR1c1wiXG4+XG5cbnR5cGUgU3VjY2Vzc2Z1bE5leHRBcGlSZXNwb25zZU1ldGhvZHM8VD4gPSB7XG4gIHN0YXR1czogKFxuICAgIHN0YXR1c0NvZGU6IDIwMCB8IDIwMVxuICApID0+IE5leHRBcGlSZXNwb25zZVdpdGhvdXRKc29uQW5kU3RhdHVzTWV0aG9kcyAmIHtcbiAgICBqc29uOiBTZW5kPFQ+XG4gIH1cbiAganNvbjogU2VuZDxUPlxufVxuXG50eXBlIEVycm9yTmV4dEFwaVJlc3BvbnNlTWV0aG9kcyA9IHtcbiAgc3RhdHVzOiAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiBOZXh0QXBpUmVzcG9uc2VXaXRob3V0SnNvbkFuZFN0YXR1c01ldGhvZHMgJiB7XG4gICAganNvbjogU2VuZDxhbnk+XG4gIH1cbiAganNvbjogU2VuZDxhbnk+XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlRnVuY3Rpb248U1AgZXh0ZW5kcyBTZXR1cFBhcmFtcywgUlMgZXh0ZW5kcyBSb3V0ZVNwZWM+ID0gKFxuICByZXE6IChTUFtcImF1dGhNaWRkbGV3YXJlTWFwXCJdICZcbiAgICB0eXBlb2YgZGVmYXVsdE1pZGRsZXdhcmVNYXApW1JTW1wiYXV0aFwiXV0gZXh0ZW5kcyBNaWRkbGV3YXJlPFxuICAgIGluZmVyIEF1dGhNV091dCxcbiAgICBhbnlcbiAgPlxuICAgID8gT21pdDxOZXh0QXBpUmVxdWVzdCwgXCJxdWVyeVwiIHwgXCJib2R5XCI+ICZcbiAgICAgICAgQXV0aE1XT3V0ICZcbiAgICAgICAgTWlkZGxld2FyZUNoYWluT3V0cHV0PFxuICAgICAgICAgIFNQW1wiZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGhcIl0gZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgICAgICAgICAgYW55LFxuICAgICAgICAgICAgYW55XG4gICAgICAgICAgPltdXG4gICAgICAgICAgICA/IFNQW1wiZ2xvYmFsTWlkZGxld2FyZXNBZnRlckF1dGhcIl1cbiAgICAgICAgICAgIDogW11cbiAgICAgICAgPiAmXG4gICAgICAgIE1pZGRsZXdhcmVDaGFpbk91dHB1dDxcbiAgICAgICAgICBSU1tcIm1pZGRsZXdhcmVzXCJdIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXVxuICAgICAgICAgICAgPyBbLi4uU1BbXCJnbG9iYWxNaWRkbGV3YXJlc1wiXSwgLi4uUlNbXCJtaWRkbGV3YXJlc1wiXV1cbiAgICAgICAgICAgIDogU1BbXCJnbG9iYWxNaWRkbGV3YXJlc1wiXVxuICAgICAgICA+ICYge1xuICAgICAgICAgIGJvZHk6IFJTW1wiZm9ybURhdGFcIl0gZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgICAgICAgICAgID8gei5pbmZlcjxSU1tcImZvcm1EYXRhXCJdPlxuICAgICAgICAgICAgOiBSU1tcImpzb25Cb2R5XCJdIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gICAgICAgICAgICA/IHouaW5mZXI8UlNbXCJqc29uQm9keVwiXT5cbiAgICAgICAgICAgIDoge31cbiAgICAgICAgICBxdWVyeTogUlNbXCJxdWVyeVBhcmFtc1wiXSBleHRlbmRzIHouWm9kVHlwZUFueVxuICAgICAgICAgICAgPyB6LmluZmVyPFJTW1wicXVlcnlQYXJhbXNcIl0+XG4gICAgICAgICAgICA6IHt9XG4gICAgICAgICAgY29tbW9uUGFyYW1zOiBSU1tcImNvbW1vblBhcmFtc1wiXSBleHRlbmRzIHouWm9kVHlwZUFueVxuICAgICAgICAgICAgPyB6LmluZmVyPFJTW1wiY29tbW9uUGFyYW1zXCJdPlxuICAgICAgICAgICAgOiB7fVxuICAgICAgICB9XG4gICAgOiBgdW5rbm93biBhdXRoIHR5cGU6ICR7UlNbXCJhdXRoXCJdfS4gWW91IHNob3VsZCBjb25maWd1cmUgdGhpcyBhdXRoIHR5cGUgaW4geW91ciBhdXRoX21pZGRsZXdhcmVzIHcvIGNyZWF0ZVdpdGhSb3V0ZVNwZWMsIG9yIG1heWJlIHlvdSBuZWVkIHRvIGFkZCBcImFzIGNvbnN0XCIgdG8geW91ciByb3V0ZSBzcGVjIGRlZmluaXRpb24uYCxcbiAgcmVzOiBOZXh0QXBpUmVzcG9uc2VXaXRob3V0SnNvbkFuZFN0YXR1c01ldGhvZHMgJlxuICAgIFN1Y2Nlc3NmdWxOZXh0QXBpUmVzcG9uc2VNZXRob2RzPFxuICAgICAgUlNbXCJqc29uUmVzcG9uc2VcIl0gZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgICAgICAgPyB6LmluZmVyPFJTW1wianNvblJlc3BvbnNlXCJdPlxuICAgICAgICA6IGFueVxuICAgID4gJlxuICAgIEVycm9yTmV4dEFwaVJlc3BvbnNlTWV0aG9kc1xuKSA9PiBQcm9taXNlPHZvaWQ+XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbiA9IDxcbiAgU1AgZXh0ZW5kcyBTZXR1cFBhcmFtczxBdXRoTWlkZGxld2FyZXMsIGFueSwgYW55PlxuPihcbiAgc2V0dXBQYXJhbXM6IFNQXG4pID0+IDxSUyBleHRlbmRzIFJvdXRlU3BlYzxzdHJpbmcsIGFueSwgYW55LCBhbnksIGFueSwgYW55LCB6LlpvZFR5cGVBbnksIGFueT4+KFxuICByb3V0ZV9zcGVjOiBSU1xuKSA9PiAobmV4dDogUm91dGVGdW5jdGlvbjxTUCwgUlM+KSA9PiBhbnlcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7OztBQ0FBOzs7QUNBQTtBQWlVTyxJQUFNLFdBQXFCLElBQUksaUJBQXdCO0FBQzVELFFBQU0sa0JBQWtCLGFBQWEsYUFBYSxTQUFTO0FBQzNELFFBQU0sTUFBTSxhQUFhLE1BQU0sR0FBRyxFQUFFO0FBRXBDLE1BQUksc0JBQXNCO0FBQzFCLFdBQVMsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsS0FBSztBQUN4QywwQkFBdUIsSUFBSSxHQUFXLG1CQUFtQjtBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUNUO0FBRUEsSUFBTyxtQkFBUTs7O0FDN1VmO0FBV08sSUFBTSxjQUFjLENBQUMsWUFBMkIsQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRO0FBQzdFLE1BQUksQ0FBQyxRQUFRLFNBQVMsSUFBSSxNQUFNLEdBQUc7QUFDakMsVUFBTSxJQUFJLDBCQUEwQjtBQUFBLE1BQ2xDLE1BQU07QUFBQSxNQUNOLFNBQVMsUUFBUSxRQUFRLEtBQUssR0FBRztBQUFBLElBQ25DLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTyxLQUFLLEtBQUssR0FBRztBQUN0QjtBQUVBLElBQU8sdUJBQVE7OztBQ3JCZjtBQUNBLFNBQVMsR0FBRyw2QkFBNkI7QUFDekMsT0FBTyxPQUFPO0FBU2QsSUFBTSx3Q0FBd0MsQ0FDNUMsYUFDQSxXQUNvQztBQUNwQyxNQUFJLENBQUMsYUFBYTtBQUNoQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksZ0JBQWdCO0FBRXBCLFNBQU8seUJB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
375
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvaW5kZXgudHMiLCAiLi4vc3JjL3dyYXBwZXJzL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzLnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC12YWxpZGF0aW9uLnRzIiwgIi4uL3NyYy90eXBlcy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmV4cG9ydCAqIGZyb20gXCIuL3dpdGgtcm91dGUtc3BlY1wiXG5leHBvcnQgeyB3cmFwcGVycyB9IGZyb20gXCIuL3dyYXBwZXJzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCJcbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVzcG9uc2UsIE5leHRBcGlSZXF1ZXN0IH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nIH0gZnJvbSBcIi4uL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgd3JhcHBlcnMsIHsgTWlkZGxld2FyZSB9IGZyb20gXCIuLi93cmFwcGVyc1wiXG5pbXBvcnQge1xuICBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24sXG4gIFF1ZXJ5QXJyYXlGb3JtYXRzLFxuICBSb3V0ZVNwZWMsXG59IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgd2l0aE1ldGhvZHMsIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHNcIlxuaW1wb3J0IHdpdGhWYWxpZGF0aW9uIGZyb20gXCIuL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvblwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgY29uc3QgY2hlY2tSb3V0ZVNwZWMgPSA8XG4gIEF1dGhUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBNZXRob2RzIGV4dGVuZHMgSFRUUE1ldGhvZHNbXSA9IEhUVFBNZXRob2RzW10sXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgIGFueSxcbiAgICBhbnlcbiAgPltdLFxuICBGb3JtRGF0YSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBTcGVjIGV4dGVuZHMgUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID4gPSBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXMsXG4gICAgRm9ybURhdGFcbiAgPlxuPihcbiAgc3BlYzogU3BlY1xuKTogc3RyaW5nIGV4dGVuZHMgU3BlY1tcImF1dGhcIl1cbiAgPyBgeW91ciByb3V0ZSBzcGVjIGlzIHVuZGVyc3BlY2lmaWVkLCBhZGQgXCJhcyBjb25zdFwiYFxuICA6IFNwZWMgPT4gc3BlYyBhcyBhbnlcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVJSQVlfRk9STUFUUzogUXVlcnlBcnJheUZvcm1hdHMgPSBbXG4gIFwiYnJhY2tldHNcIixcbiAgXCJjb21tYVwiLFxuICBcInJlcGVhdFwiLFxuXVxuXG5leHBvcnQgY29uc3QgY3JlYXRlV2l0aFJvdXRlU3BlYzogQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uID0gKChcbiAgc2V0dXBQYXJhbXNcbikgPT4ge1xuICBjb25zdCB7XG4gICAgYXV0aE1pZGRsZXdhcmVNYXAgPSB7fSxcbiAgICBnbG9iYWxNaWRkbGV3YXJlcyA9IFtdLFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoID0gW10sXG4gICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSA9IHRydWUsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyxcbiAgICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9uczoge1xuICAgICAgICBnZXRFcnJvckNvbnRleHQ6IChyZXEsIGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pIGFzIGFueSxcbiAgICBnbG9iYWxTY2hlbWFzID0gc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgID8ge1xuICAgICAgICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMgPSBERUZBVUxUX0FSUkFZX0ZPUk1BVFMsXG4gICAgb25NdWx0aXBsZUF1dGhNaWRkbGV3YXJlRmFpbHVyZXMsXG4gIH0gPSBzZXR1cFBhcmFtc1xuXG4gIGNvbnN0IHdpdGhSb3V0ZVNwZWMgPSAoc3BlYzogUm91dGVTcGVjKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlUm91dGVFeHBvcnQgPSAodXNlckRlZmluZWRSb3V0ZUZuKSA9PiB7XG4gICAgICBjb25zdCByb290UmVxdWVzdEhhbmRsZXIgPSBhc3luYyAoXG4gICAgICAgIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gICAgICAgIHJlczogTmV4dEFwaVJlc3BvbnNlXG4gICAgICApID0+IHtcbiAgICAgICAgYXV0aE1pZGRsZXdhcmVNYXBbXCJub25lXCJdID0gKG5leHQpID0+IG5leHRcblxuICAgICAgICBjb25zdCBhdXRoTWlkZGxld2FyZXMgPSAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShzcGVjLmF1dGgpID8gc3BlYy5hdXRoIDogW3NwZWMuYXV0aF1cbiAgICAgICAgKS5tYXAoKGF1dGhUeXBlKSA9PiBhdXRoTWlkZGxld2FyZU1hcFthdXRoVHlwZV0pXG4gICAgICAgIGNvbnN0IHVuZGVmaW5lZEF1dGhUeXBlID0gYXV0aE1pZGRsZXdhcmVzLmZpbmQoKG13KSA9PiAhbXcpXG4gICAgICAgIGlmICh1bmRlZmluZWRBdXRoVHlwZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXV0aCB0eXBlOiAke3VuZGVmaW5lZEF1dGhUeXBlfWApXG5cbiAgICAgICAgY29uc3QgZmlyc3RBdXRoTWlkZGxld2FyZVRoYXRTdWNjZWVkcyA9IChuZXh0KSA9PiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgICBsZXQgZXJyb3JzOiB1bmtub3duW10gPSBbXVxuICAgICAgICAgIGxldCBkaWRBdXRoTWlkZGxld2FyZVRocm93ID0gdHJ1ZVxuXG4gICAgICAgICAgZm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIGF1dGhNaWRkbGV3YXJlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG1pZGRsZXdhcmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgZXJyb3JzIHVucmVsYXRlZCB0byBhdXRoIHRocm93biBieSBidWlsdC1pbiBtaWRkbGV3YXJlICh3aXRoTWV0aG9kcywgd2l0aFZhbGlkYXRpb24pIHdpbGwgYmUgY2F1Z2h0IGhlcmVcbiAgICAgICAgICAgICAgICBkaWRBdXRoTWlkZGxld2FyZVRocm93ID0gZmFsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dCguLi5hcmdzKVxuICAgICAgICAgICAgICB9KShyZXEsIHJlcylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyAmJiBkaWRBdXRoTWlkZGxld2FyZVRocm93KSB7XG4gICAgICAgICAgICBvbk11bHRpcGxlQXV0aE1pZGRsZXdhcmVGYWlsdXJlcyhlcnJvcnMpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JzW2Vycm9ycy5sZW5ndGggLSAxXVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZXJzKFxuICAgICAgICAgIC4uLigoZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXG4gICAgICAgICAgICA/IFtleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVdXG4gICAgICAgICAgICA6IFtdKSBhcyBbYW55XSksXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIGZpcnN0QXV0aE1pZGRsZXdhcmVUaGF0U3VjY2VlZHMsXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aCB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIC4uLigoc3BlYy5taWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIHdpdGhNZXRob2RzKHNwZWMubWV0aG9kcyksXG4gICAgICAgICAgd2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAganNvbkJvZHk6IHNwZWMuanNvbkJvZHksXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogc3BlYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbW1vblBhcmFtczogc3BlYy5jb21tb25QYXJhbXMsXG4gICAgICAgICAgICBmb3JtRGF0YTogc3BlYy5mb3JtRGF0YSxcbiAgICAgICAgICAgIGpzb25SZXNwb25zZTogc3BlYy5qc29uUmVzcG9uc2UsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcyxcbiAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHksXG4gICAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdXNlckRlZmluZWRSb3V0ZUZuXG4gICAgICAgICkocmVxIGFzIGFueSwgcmVzKVxuICAgICAgfVxuXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QgYXMgUmVxLCBOZXh0QXBpUmVzcG9uc2UgYXMgUmVzIH0gZnJvbSBcIm5leHRcIlxuLypcblxuV3JhcHMgYSBmdW5jdGlvbiBpbiBsYXllcnMgb2Ygb3RoZXIgZnVuY3Rpb25zLCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC9vdXRwdXRcbnR5cGUuIFRoZSBvdXRwdXQgb2Ygd3JhcHBlcnMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgdHlwZSBvZiBpdCdzIGxhc3QgcGFyYW1ldGVyXG4odGhlIHdyYXBwZWQgZnVuY3Rpb24pXG5cblRoaXMgZnVuY3Rpb24gdHVybnMgdGhpcyB0eXBlIG9mIGNvbXBvc2l0aW9uLi4uXG5cbmxvZ2dlci53aXRoQ29udGV4dChcInNvbWVjb250ZXh0XCIpKFxuICBhc3luYyAoYSwgYikgPT4ge1xuICAgIHJldHVybiBhXG4gIH1cbilcblxuSW50by4uLlxuXG53cmFwcGVycyhcbiAgbG9nZ2VyLndpdGhDb250ZXh0KFwic29tZWNvbnRleHRcIiksXG4gIGFzeW5jIChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGFcbiAgfVxuKVxuXG5IYXZpbmcgdGhpcyBhcyBhIHV0aWxpdHkgbWV0aG9kIGhlbHBzIHByZXNlcnZlIHR5cGVzLCB3aGljaCBvdGhlcndpc2UgY2FuIGdldFxubWVzc2VkIHVwIGJ5IHRoZSBtaWRkbGV3YXJlcy4gSXQgYWxzbyBjYW4gbWFrZSB0aGUgY29kZSBjbGVhbmVyIHdoZXJlIHRoZXJlIGFyZVxubXVsdGlwbGUgd3JhcHBlcnMuXG5cbiMjIEVYQU1QTEVTXG5cbkluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWlkZGxld2FyZSB5b3UgbWlnaHQgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpcy4uLlxuXG5jb25zdCB3aXRoUmVxdWVzdExvZ2dpbmdNaWRkbGV3YXJlID0gKG5leHQpID0+IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICBjb25zb2xlLmxvZyhgR09UIFJFUVVFU1QgJHtyZXEubWV0aG9kfSAke3JlcS5wYXRofWApXG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5IZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIHdyYXBwZXIgdGhhdCB0YWtlcyBzb21lIHBhcmFtZXRlcnMuLi5cblxuY29uc3Qgd2l0aExvZ2dlZEFyZ3VtZW50cyA9XG4gICAgKGxvZ1ByZWZpeDogc3RyaW5nKSA9PlxuICAgIChuZXh0KSA9PlxuICAgIGFzeW5jICguLi5mdW5jQXJncykgPT4ge1xuICAgICAgY29uc29sZS5sb2cobG9nUHJlZml4LCAuLi5mdW5jQXJncylcbiAgICAgIHJldHVybiBuZXh0KC4uLmZ1bmNBcmdzKVxuICAgIH1cblxuKi9cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSAoXG4gIG5leHQ6IChyZXE6IFJlcSAmIERlcCAmIFQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuXG4vLyBTYWZlciBNaWRkbGV3YXJlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgZXh0ZW5kUmVxdWVzdCB0byBlbnN1cmUgdGhhdCB0aGVcbi8vIG5ldyBjb250ZXh0IChUKSB3YXMgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIHJlcXVlc3QuIEl0J3Mga2luZCBvZiBhbm5veWluZ1xuLy8gdG8gdXNlIGluIHByYWN0aWNlLCBzbyB3ZSBkb24ndCB1c2UgaXQgZm9yIG91ciBXcmFwcGVycyAoeWV0KVxuZXhwb3J0IHR5cGUgU2FmZXJNaWRkbGV3YXJlPFQsIERlcCA9IHt9PiA9IChcbiAgbmV4dDogKHJlcTogUmVxICYgRGVwICYgVCwgcmVzOiBSZXMpID0+IGFueVxuKSA9PiAocmVxOiBSZXEgJiBEZXAsIHJlczogUmVzKSA9PiBhbnlcblxuZXhwb3J0IGNvbnN0IGV4dGVuZFJlcXVlc3QgPSA8VCBleHRlbmRzIFJlcSwgSyBleHRlbmRzIHt9PihcbiAgcmVxOiBULFxuICBtZXJnZTogS1xuKTogVCAmIEsgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlKSkge1xuICAgIDsocmVxIGFzIGFueSlba2V5XSA9IHZcbiAgfVxuICByZXR1cm4gcmVxIGFzIGFueVxufVxuXG50eXBlIFdyYXBwZXJzMSA9IDxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBlbmRwb2ludDogKHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbnR5cGUgV3JhcHBlcnMyID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgZW5kcG9pbnQ6IChyZXE6IFJlcSAmIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQsIHJlczogUmVzKSA9PiBhbnlcbikgPT4gKHJlcTogUmVxLCByZXM6IFJlcykgPT4gYW55XG5cbi8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZG8gYSByZWN1cnNpdmUgZGVmaW5pdGlvbiwgb3Igb25lIHRoYXQgc2ltcGxpZmllc1xuLy8gdGhlc2UgcmVkdW5kYW50IHdyYXBwZXJzXG5cbnR5cGUgV3JhcHBlcnMzID0gPFxuICBNdzFSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13MkRlcCxcbiAgTXcxRGVwLFxuICBNdzJSZXF1ZXN0Q29udGV4dCxcbiAgTXcyRGVwLFxuICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgTXczRGVwXG4+KFxuICBtdzE6IE1pZGRsZXdhcmU8TXcxUmVxdWVzdENvbnRleHQsIE13MURlcD4sXG4gIG13MjogTWlkZGxld2FyZTxNdzJSZXF1ZXN0Q29udGV4dCwgTXcyRGVwPixcbiAgbXczOiBNaWRkbGV3YXJlPFxuICAgIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzNEZXAgPyBNdzNEZXAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICYgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCAmIE13M1JlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNCA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczUgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVyczYgPSA8XG4gIE13MVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXcyRGVwLFxuICBNdzFEZXAsXG4gIE13MlJlcXVlc3RDb250ZXh0LFxuICBNdzJEZXAsXG4gIE13M1JlcXVlc3RDb250ZXh0LFxuICBNdzNEZXAsXG4gIE13NFJlcXVlc3RDb250ZXh0LFxuICBNdzREZXAsXG4gIE13NVJlcXVlc3RDb250ZXh0LFxuICBNdzVEZXAsXG4gIE13NlJlcXVlc3RDb250ZXh0LFxuICBNdzZEZXBcbj4oXG4gIG13MTogTWlkZGxld2FyZTxNdzFSZXF1ZXN0Q29udGV4dCwgTXcxRGVwPixcbiAgbXcyOiBNaWRkbGV3YXJlPE13MlJlcXVlc3RDb250ZXh0LCBNdzJEZXA+LFxuICBtdzM6IE1pZGRsZXdhcmU8XG4gICAgTXczUmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJiBNdzJSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13M0RlcCA/IE13M0RlcCA6IG5ldmVyXG4gID4sXG4gIG13NDogTWlkZGxld2FyZTxcbiAgICBNdzRSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0ICYgTXczUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzREZXBcbiAgICAgID8gTXc0RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NTogTWlkZGxld2FyZTxcbiAgICBNdzVSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NURlcFxuICAgICAgPyBNdzVEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc2OiBNaWRkbGV3YXJlPFxuICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc2RGVwXG4gICAgICA/IE13NkRlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBlbmRwb2ludDogKFxuICAgIHJlcTogUmVxICZcbiAgICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NlJlcXVlc3RDb250ZXh0LFxuICAgIHJlczogUmVzXG4gICkgPT4gYW55XG4pID0+IChyZXE6IFJlcSwgcmVzOiBSZXMpID0+IGFueVxuXG50eXBlIFdyYXBwZXJzNyA9IDxcbiAgTXcxUmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzJEZXAsXG4gIE13MURlcCxcbiAgTXcyUmVxdWVzdENvbnRleHQsXG4gIE13MkRlcCxcbiAgTXczUmVxdWVzdENvbnRleHQsXG4gIE13M0RlcCxcbiAgTXc0UmVxdWVzdENvbnRleHQsXG4gIE13NERlcCxcbiAgTXc1UmVxdWVzdENvbnRleHQsXG4gIE13NURlcCxcbiAgTXc2UmVxdWVzdENvbnRleHQsXG4gIE13NkRlcCxcbiAgTXc3UmVxdWVzdENvbnRleHQsXG4gIE13N0RlcFxuPihcbiAgbXcxOiBNaWRkbGV3YXJlPE13MVJlcXVlc3RDb250ZXh0LCBNdzFEZXA+LFxuICBtdzI6IE1pZGRsZXdhcmU8TXcyUmVxdWVzdENvbnRleHQsIE13MkRlcD4sXG4gIG13MzogTWlkZGxld2FyZTxcbiAgICBNdzNSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmIE13MlJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXczRGVwID8gTXczRGVwIDogbmV2ZXJcbiAgPixcbiAgbXc0OiBNaWRkbGV3YXJlPFxuICAgIE13NFJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICYgTXcyUmVxdWVzdENvbnRleHQgJiBNdzNSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13NERlcFxuICAgICAgPyBNdzREZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgbXc1OiBNaWRkbGV3YXJlPFxuICAgIE13NVJlcXVlc3RDb250ZXh0LFxuICAgIE13MVJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13MlJlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13M1JlcXVlc3RDb250ZXh0ICZcbiAgICAgIE13NFJlcXVlc3RDb250ZXh0IGV4dGVuZHMgTXc1RGVwXG4gICAgICA/IE13NURlcFxuICAgICAgOiBuZXZlclxuICA+LFxuICBtdzY6IE1pZGRsZXdhcmU8XG4gICAgTXc2UmVxdWVzdENvbnRleHQsXG4gICAgTXcxUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXcyUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXczUmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc0UmVxdWVzdENvbnRleHQgJlxuICAgICAgTXc1UmVxdWVzdENvbnRleHQgZXh0ZW5kcyBNdzZEZXBcbiAgICAgID8gTXc2RGVwXG4gICAgICA6IG5ldmVyXG4gID4sXG4gIG13NzogTWlkZGxld2FyZTxcbiAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCBleHRlbmRzIE13N0RlcFxuICAgICAgPyBNdzdEZXBcbiAgICAgIDogbmV2ZXJcbiAgPixcbiAgZW5kcG9pbnQ6IChcbiAgICByZXE6IFJlcSAmXG4gICAgICBNdzFSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzJSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzNSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzRSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzVSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzZSZXF1ZXN0Q29udGV4dCAmXG4gICAgICBNdzdSZXF1ZXN0Q29udGV4dCxcbiAgICByZXM6IFJlc1xuICApID0+IGFueVxuKSA9PiAocmVxOiBSZXEsIHJlczogUmVzKSA9PiBhbnlcblxudHlwZSBXcmFwcGVycyA9IFdyYXBwZXJzMSAmXG4gIFdyYXBwZXJzMiAmXG4gIFdyYXBwZXJzMyAmXG4gIFdyYXBwZXJzNCAmXG4gIFdyYXBwZXJzNSAmXG4gIFdyYXBwZXJzNiAmXG4gIFdyYXBwZXJzN1xuXG5leHBvcnQgY29uc3Qgd3JhcHBlcnM6IFdyYXBwZXJzID0gKC4uLndyYXBwZXJzQXJnczogYW55W10pID0+IHtcbiAgY29uc3Qgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcHBlcnNBcmdzW3dyYXBwZXJzQXJncy5sZW5ndGggLSAxXVxuICBjb25zdCBtd3MgPSB3cmFwcGVyc0FyZ3Muc2xpY2UoMCwgLTEpXG5cbiAgbGV0IGxhc3RXcmFwcGVkRnVuY3Rpb24gPSB3cmFwcGVkRnVuY3Rpb25cbiAgZm9yIChsZXQgaSA9IG13cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGxhc3RXcmFwcGVkRnVuY3Rpb24gPSAobXdzW2ldIGFzIGFueSkobGFzdFdyYXBwZWRGdW5jdGlvbilcbiAgfVxuXG4gIHJldHVybiBsYXN0V3JhcHBlZEZ1bmN0aW9uXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJzXG4iLCAiaW1wb3J0IHsgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuXG5leHBvcnQgdHlwZSBIVFRQTWV0aG9kcyA9XG4gIHwgXCJHRVRcIlxuICB8IFwiUE9TVFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkhFQURcIlxuICB8IFwiT1BUSU9OU1wiXG5cbmV4cG9ydCBjb25zdCB3aXRoTWV0aG9kcyA9IChtZXRob2RzOiBIVFRQTWV0aG9kc1tdKSA9PiAobmV4dCkgPT4gKHJlcSwgcmVzKSA9PiB7XG4gIGlmICghbWV0aG9kcy5pbmNsdWRlcyhyZXEubWV0aG9kKSkge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uKHtcbiAgICAgIHR5cGU6IFwibWV0aG9kX25vdF9hbGxvd2VkXCIsXG4gICAgICBtZXNzYWdlOiBgb25seSAke21ldGhvZHMuam9pbihcIixcIil9IGFjY2VwdGVkYCxcbiAgICB9KVxuICB9XG4gIHJldHVybiBuZXh0KHJlcSwgcmVzKVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoTWV0aG9kc1xuIiwgImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24sXG59IGZyb20gXCIuLi8uLi9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgUXVlcnlBcnJheUZvcm1hdHMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgREVGQVVMVF9BUlJBWV9GT1JNQVRTIH0gZnJvbSBcIi4uXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0ID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RPYmplY3Q8YW55PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmICghaXNab2RPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICByZXR1cm4gc2FmZV9zY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG5jb25zdCBpc1pvZFNjaGVtYUFycmF5ID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IGRlZiA9IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzKHNjaGVtYSlcbiAgcmV0dXJuIGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG59XG5cbmNvbnN0IGlzWm9kU2NoZW1hQm9vbGVhbiA9IChzY2hlbWE6IHouWm9kVHlwZUFueSkgPT4ge1xuICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyhzY2hlbWEpXG4gIHJldHVybiBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN1cHBvcnRlZEFycmF5Rm9ybWF0czogUXVlcnlBcnJheUZvcm1hdHNcbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3Qgb2JqX3NjaGVtYSA9IHRyeUdldFpvZFNjaGVtYUFzT2JqZWN0KHNjaGVtYSlcblxuICBpZiAob2JqX3NjaGVtYSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheSh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJjb21tYVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzLmluY2x1ZGVzKFwiYnJhY2tldHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSAmJlxuICAgICAgICAgIHN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcImJyYWNrZXRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1pvZFNjaGVtYUJvb2xlYW4odmFsdWUgYXMgei5ab2RUeXBlQW55KSkge1xuICAgICAgICBjb25zdCBib29sZWFuX2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYm9vbGVhbl9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYm9vbGVhbl9pbnB1dCA9PT0gXCJ0cnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5jb25zdCB2YWxpZGF0ZVF1ZXJ5UGFyYW1zID0gKFxuICBpbnB1dFVybDogc3RyaW5nLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzOiBRdWVyeUFycmF5Rm9ybWF0c1xuKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5wdXRVcmwsIFwiaHR0cDovL2R1bW15LmNvbVwiKVxuXG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBjb25zdCBvYmpfc2NoZW1hID0gdHJ5R2V0Wm9kU2NoZW1hQXNPYmplY3Qoc2NoZW1hKVxuICBpZiAoIW9ial9zY2hlbWEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHVybC5zZWFyY2hQYXJhbXMua2V5cygpKSB7XG4gICAgZm9yIChjb25zdCBbc2NoZW1hS2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqX3NjaGVtYS5zaGFwZSkpIHtcbiAgICAgIGlmIChpc1pvZFNjaGVtYUFycmF5KHZhbHVlIGFzIHouWm9kVHlwZUFueSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gYCR7c2NoZW1hS2V5fVtdYCAmJlxuICAgICAgICAgICFzdXBwb3J0ZWRBcnJheUZvcm1hdHMuaW5jbHVkZXMoXCJicmFja2V0c1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImludmFsaWRfcXVlcnlfcGFyYW1zXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQnJhY2tldCBzeW50YXggbm90IHN1cHBvcnRlZCBmb3IgcXVlcnkgcGFyYW0gXCIke3NjaGVtYUtleX1cImAsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleV9zY2hlbWEgPSBvYmpfc2NoZW1hLnNoYXBlW2tleV1cblxuICAgIGlmIChrZXlfc2NoZW1hKSB7XG4gICAgICBpZiAoaXNab2RTY2hlbWFBcnJheShrZXlfc2NoZW1hKSkge1xuICAgICAgICBpZiAoc2VlbktleXMuaGFzKGtleSkgJiYgIXN1cHBvcnRlZEFycmF5Rm9ybWF0cy5pbmNsdWRlcyhcInJlcGVhdFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9xdWVyeV9wYXJhbXNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXBlYXRlZCBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQgZm9yIGR1cGxpY2F0ZSBxdWVyeSBwYXJhbSBcIiR7a2V5fVwiYCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VlbktleXMuYWRkKGtleSlcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIHNob3VsZFZhbGlkYXRlUmVzcG9uc2VzPzogYm9vbGVhblxuICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5PzogYm9vbGVhblxuICBzdXBwb3J0ZWRBcnJheUZvcm1hdHM/OiBRdWVyeUFycmF5Rm9ybWF0c1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblJlc3BvbnNlPEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueT4oXG4gIGpzb25SZXNwb25zZTogSnNvblJlc3BvbnNlIHwgdW5kZWZpbmVkLFxuICByZXM6IE5leHRBcGlSZXNwb25zZVxuKSB7XG4gIGNvbnN0IG9yaWdpbmFsX3Jlc19qc29uID0gcmVzLmpzb25cbiAgY29uc3Qgb3ZlcnJpZGVfcmVzX2pzb24gPSAoanNvbjogYW55KSA9PiB7XG4gICAgY29uc3QgaXNfc3VjY2VzcyA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgIGlmICghaXNfc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGpzb25SZXNwb25zZT8ucGFyc2UoanNvbilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX3Jlc3BvbnNlXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidGhlIHJlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHdpdGgganNvblJlc3BvbnNlXCIsXG4gICAgICAgIHpvZEVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICB9XG4gIHJlcy5qc29uID0gb3ZlcnJpZGVfcmVzX2pzb25cbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PFxuICAgICAgSnNvbkJvZHksXG4gICAgICBRdWVyeVBhcmFtcyxcbiAgICAgIENvbW1vblBhcmFtcyxcbiAgICAgIEZvcm1EYXRhLFxuICAgICAgSnNvblJlc3BvbnNlXG4gICAgPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCB7IHN1cHBvcnRlZEFycmF5Rm9ybWF0cyA9IERFRkFVTFRfQVJSQVlfRk9STUFUUyB9ID0gaW5wdXRcblxuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIV8uaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIiAmJiByZXEubWV0aG9kICE9PSBcIkRFTEVURVwiXG5cbiAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSBCb29sZWFuKGlucHV0LmZvcm1EYXRhKVxuXG4gICAgICBpZiAoaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0LmZvcm1EYXRhPy5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKCFyZXEudXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxLnVybCBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlUXVlcnlQYXJhbXMocmVxLnVybCwgaW5wdXQucXVlcnlQYXJhbXMsIHN1cHBvcnRlZEFycmF5Rm9ybWF0cylcblxuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcS5xdWVyeSxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhcyBjb21tb25QYXJhbXMgaW5jbHVkZXMgcXVlcnkgcGFyYW1zLCB3ZSBjYW4gdXNlIHRoZSBwYXJzZVF1ZXJ5UGFyYW1zIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlUXVlcnlQYXJhbXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyxcbiAgICAgICAgICBzdXBwb3J0ZWRBcnJheUZvcm1hdHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhZFJlcXVlc3RFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIHJlcy5qc29uIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzcG9uc2VcbiAgICAgKi9cbiAgICBpZiAoaW5wdXQuc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMpIHtcbiAgICAgIHZhbGlkYXRlSnNvblJlc3BvbnNlKGlucHV0Lmpzb25SZXNwb25zZSwgcmVzKVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iLCAiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IE1pZGRsZXdhcmUgYXMgV3JhcHBlck1pZGRsZXdhcmUgfSBmcm9tIFwiLi4vd3JhcHBlcnNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiLi4vd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kc1wiXG5pbXBvcnQge1xuICBTZWN1cml0eVNjaGVtZU9iamVjdCxcbiAgU2VjdXJpdHlSZXF1aXJlbWVudE9iamVjdCxcbn0gZnJvbSBcIm9wZW5hcGkzLXRzL29hczMxXCJcblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSBXcmFwcGVyTWlkZGxld2FyZTxULCBEZXA+ICYge1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgbW92ZWQgdG8gc2V0dXBQYXJhbXNcbiAgICovXG4gIHNlY3VyaXR5U2NoZW1hPzogU2VjdXJpdHlTY2hlbWVPYmplY3RcbiAgc2VjdXJpdHlPYmplY3RzPzogU2VjdXJpdHlSZXF1aXJlbWVudE9iamVjdFtdXG59XG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlU3BlYzxcbiAgQXV0aCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdID0gc3RyaW5nW10sXG4gIE1ldGhvZHMgZXh0ZW5kcyBIVFRQTWV0aG9kc1tdID0gYW55LFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RPYmplY3Q8YW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RPYmplY3Q8YW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kT2JqZWN0PGFueSwgYW55LCBhbnksIGFueSwgYW55PixcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gYW55W10sXG4gIEpzb25SZXNwb25zZSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBGb3JtRGF0YSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55XG4+IHtcbiAgb3BlbkFwaU1ldGFkYXRhPzogYW55XG4gIG1ldGhvZHM6IE1ldGhvZHNcbiAgYXV0aDogQXV0aFxuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG4gIG1pZGRsZXdhcmVzPzogTWlkZGxld2FyZXNcbiAganNvblJlc3BvbnNlPzogSnNvblJlc3BvbnNlXG4gIGZvcm1EYXRhPzogRm9ybURhdGFcbiAgLyoqXG4gICAqIGFkZCB4LWZlcm4tc2RrLXJldHVybi12YWx1ZSB0byB0aGUgb3BlbmFwaSBzcGVjLCB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byByZXR1cm4gb25seSBhIHN1YnNldCBvZiB0aGUgcmVzcG9uc2VcbiAgICovXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbn1cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZUNoYWluT3V0cHV0PFxuICBNV0NoYWluIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXVxuPiA9IE1XQ2hhaW4gZXh0ZW5kcyByZWFkb25seSBbXVxuICA/IHt9XG4gIDogTVdDaGFpbiBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF1cbiAgPyBGaXJzdCBleHRlbmRzIE1pZGRsZXdhcmU8aW5mZXIgVCwgYW55PlxuICAgID8gVCAmXG4gICAgICAgIChSZXN0IGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXVxuICAgICAgICAgID8gTWlkZGxld2FyZUNoYWluT3V0cHV0PFJlc3Q+XG4gICAgICAgICAgOiBuZXZlcilcbiAgICA6IG5ldmVyXG4gIDogbmV2ZXJcblxuZXhwb3J0IHR5cGUgQXV0aE1pZGRsZXdhcmVzID0ge1xuICBbYXV0aF90eXBlOiBzdHJpbmddOiBNaWRkbGV3YXJlPGFueSwgYW55PlxufVxuXG5leHBvcnQgdHlwZSBRdWVyeUFycmF5Rm9ybWF0ID0gXCJicmFja2V0c1wiIHwgXCJjb21tYVwiIHwgXCJyZXBlYXRcIlxuXG5leHBvcnQgdHlwZSBRdWVyeUFycmF5Rm9ybWF0cyA9IHJlYWRvbmx5IFF1ZXJ5QXJyYXlGb3JtYXRbXVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHVwUGFyYW1zPFxuICBBdXRoTVcgZXh0ZW5kcyBBdXRoTWlkZGxld2FyZXMgPSBBdXRoTWlkZGxld2FyZXMsXG4gIEdsb2JhbE1XIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXSA9IGFueVtdLFxuICBHbG9iYWxNV0FmdGVyQXV0aCBleHRlbmRzIE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSBhbnlbXVxuPiB7XG4gIGF1dGhNaWRkbGV3YXJlTWFwOiBBdXRoTVdcbiAgZ2xvYmFsTWlkZGxld2FyZXM6IEdsb2JhbE1XXG4gIGdsb2JhbE1pZGRsZXdhcmVzQWZ0ZXJBdXRoPzogR2xvYmFsTVdBZnRlckF1dGhcbiAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlPzogKChuZXh0OiBGdW5jdGlvbikgPT4gRnVuY3Rpb24pIHwgbnVsbFxuXG4gIC8vIFRoZXNlIGltcHJvdmUgT3BlbkFQSSBnZW5lcmF0aW9uXG4gIGFwaU5hbWU6IHN0cmluZ1xuICBwcm9kdWN0aW9uU2VydmVyVXJsOiBzdHJpbmdcblxuICBhZGRPa1N0YXR1cz86IGJvb2xlYW5cblxuICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcz86IGJvb2xlYW5cbiAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keT86IGJvb2xlYW5cbiAgc2VjdXJpdHlTY2hlbWFzPzogUmVjb3JkPHN0cmluZywgU2VjdXJpdHlTY2hlbWVPYmplY3Q+XG4gIGdsb2JhbFNjaGVtYXM/OiBSZWNvcmQ8c3RyaW5nLCB6LlpvZFR5cGVBbnk+XG5cbiAgc3VwcG9ydGVkQXJyYXlGb3JtYXRzPzogUXVlcnlBcnJheUZvcm1hdHNcblxuICAvKipcbiAgICogSWYgYW4gZW5kcG9pbnQgYWNjZXB0cyBtdWx0aXBsZSBhdXRoIG1ldGhvZHMgYW5kIHRoZXkgYWxsIGZhaWwsIHRoaXMgaG9vayB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBlcnJvcnMgdGhyb3duIGJ5IHRoZSBtaWRkbGV3YXJlcy5cbiAgICogWW91IGNhbiBpbnNwZWN0IHRoZSBlcnJvcnMgYW5kIHRocm93IGEgbW9yZSBnZW5lcmljIGVycm9yIGluIHRoaXMgaG9vayBpZiB5b3Ugd2FudC5cbiAgICovXG4gIG9uTXVsdGlwbGVBdXRoTWlkZGxld2FyZUZhaWx1cmVzPzogKGVycm9yczogdW5rbm93bltdKSA9PiB2b2lkXG59XG5cbmNvbnN0IGRlZmF1bHRNaWRkbGV3YXJlTWFwID0ge1xuICBub25lOiAobmV4dCkgPT4gbmV4dCxcbn0gYXMgY29uc3RcblxudHlwZSBTZW5kPFQ+ID0gKGJvZHk6IFQpID0+IHZvaWRcbnR5cGUgTmV4dEFwaVJlc3BvbnNlV2l0aG91dEpzb25BbmRTdGF0dXNNZXRob2RzID0gT21pdDxcbiAgTmV4dEFwaVJlc3BvbnNlLFxuICBcImpzb25cIiB8IFwic3RhdHVzXCJcbj5cblxudHlwZSBTdWNjZXNzZnVsTmV4dEFwaVJlc3BvbnNlTWV0aG9kczxUPiA9IHtcbiAgc3RhdHVzOiAoXG4gICAgc3RhdHVzQ29kZTogMjAwIHwgMjAxXG4gICkgPT4gTmV4dEFwaVJlc3BvbnNlV2l0aG91dEpzb25BbmRTdGF0dXNNZXRob2RzICYge1xuICAgIGpzb246IFNlbmQ8VD5cbiAgfVxuICBqc29uOiBTZW5kPFQ+XG59XG5cbnR5cGUgRXJyb3JOZXh0QXBpUmVzcG9uc2VNZXRob2RzID0ge1xuICBzdGF0dXM6IChzdGF0dXNDb2RlOiBudW1iZXIpID0+IE5leHRBcGlSZXNwb25zZVdpdGhvdXRKc29uQW5kU3RhdHVzTWV0aG9kcyAmIHtcbiAgICBqc29uOiBTZW5kPGFueT5cbiAgfVxuICBqc29uOiBTZW5kPGFueT5cbn1cblxudHlwZSBHZXRBcHBsaWNhYmxlQXV0aE1pZGRsZXdhcmU8XG4gIFNQIGV4dGVuZHMgU2V0dXBQYXJhbXMsXG4gIFJTIGV4dGVuZHMgUm91dGVTcGVjXG4+ID0gUlNbXCJhdXRoXCJdIGV4dGVuZHMgc3RyaW5nXG4gID8gKFNQW1wiYXV0aE1pZGRsZXdhcmVNYXBcIl0gJiB0eXBlb2YgZGVmYXVsdE1pZGRsZXdhcmVNYXApW1JTW1wiYXV0aFwiXV1cbiAgOiBSU1tcImF1dGhcIl0gZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXVxuICA/IChTUFtcImF1dGhNaWRkbGV3YXJlTWFwXCJdICYgdHlwZW9mIGRlZmF1bHRNaWRkbGV3YXJlTWFwKVtSU1tcImF1dGhcIl1bbnVtYmVyXV1cbiAgOiBuZXZlclxuXG50eXBlIE1pZGRsZXdhcmVVbmlvblRvT25lT2ZPdXRwdXQ8TSBleHRlbmRzIE1pZGRsZXdhcmU8YW55LCBhbnk+PiA9XG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlPGluZmVyIFQsIGFueT4gPyBUIDogbmV2ZXJcblxuZXhwb3J0IHR5cGUgUm91dGVGdW5jdGlvbjxTUCBleHRlbmRzIFNldHVwUGFyYW1zLCBSUyBleHRlbmRzIFJvdXRlU3BlYz4gPSAoXG4gIHJlcTogR2V0QXBwbGljYWJsZUF1dGhNaWRkbGV3YXJlPFNQLCBSUz4gZXh0ZW5kcyBNaWRkbGV3YXJlPGFueSwgYW55PlxuICAgID8gT21pdDxOZXh0QXBpUmVxdWVzdCwgXCJxdWVyeVwiIHwgXCJib2R5XCI+ICZcbiAgICAgICAgTWlkZGxld2FyZVVuaW9uVG9PbmVPZk91dHB1dDxHZXRBcHBsaWNhYmxlQXV0aE1pZGRsZXdhcmU8U1AsIFJTPj4gJlxuICAgICAgICBNaWRkbGV3YXJlQ2hhaW5PdXRwdXQ8XG4gICAgICAgICAgU1BbXCJnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aFwiXSBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8XG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgICA+W11cbiAgICAgICAgICAgID8gU1BbXCJnbG9iYWxNaWRkbGV3YXJlc0FmdGVyQXV0aFwiXVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICA+ICZcbiAgICAgICAgTWlkZGxld2FyZUNoYWluT3V0cHV0PFxuICAgICAgICAgIFJTW1wibWlkZGxld2FyZXNcIl0gZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdXG4gICAgICAgICAgICA/IFsuLi5TUFtcImdsb2JhbE1pZGRsZXdhcmVzXCJdLCAuLi5SU1tcIm1pZGRsZXdhcmVzXCJdXVxuICAgICAgICAgICAgOiBTUFtcImdsb2JhbE1pZGRsZXdhcmVzXCJdXG4gICAgICAgID4gJiB7XG4gICAgICAgICAgYm9keTogUlNbXCJmb3JtRGF0YVwiXSBleHRlbmRzIHouWm9kVHlwZUFueVxuICAgICAgICAgICAgPyB6LmluZmVyPFJTW1wiZm9ybURhdGFcIl0+XG4gICAgICAgICAgICA6IFJTW1wianNvbkJvZHlcIl0gZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgICAgICAgICAgID8gei5pbmZlcjxSU1tcImpzb25Cb2R5XCJdPlxuICAgICAgICAgICAgOiB7fVxuICAgICAgICAgIHF1ZXJ5OiBSU1tcInF1ZXJ5UGFyYW1zXCJdIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gICAgICAgICAgICA/IHouaW5mZXI8UlNbXCJxdWVyeVBhcmFtc1wiXT5cbiAgICAgICAgICAgIDoge31cbiAgICAgICAgICBjb21tb25QYXJhbXM6IFJTW1wiY29tbW9uUGFyYW1zXCJdIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gICAgICAgICAgICA/IHouaW5mZXI8UlNbXCJjb21tb25QYXJhbXNcIl0+XG4gICAgICAgICAgICA6IHt9XG4gICAgICAgIH1cbiAgICA6IGB1bmtub3duIGF1dGggdHlwZTogJHtSU1tcImF1dGhcIl0gZXh0ZW5kcyBzdHJpbmdcbiAgICAgICAgPyBSU1tcImF1dGhcIl1cbiAgICAgICAgOiBSU1tcImF1dGhcIl1bbnVtYmVyXX0uIFlvdSBzaG91bGQgY29uZmlndXJlIHRoaXMgYXV0aCB0eXBlIGluIHlvdXIgYXV0aF9taWRkbGV3YXJlcyB3LyBjcmVhdGVXaXRoUm91dGVTcGVjLCBvciBtYXliZSB5b3UgbmVlZCB0byBhZGQgXCJhcyBjb25zdFwiIHRvIHlvdXIgcm91dGUgc3BlYyBkZWZpbml0aW9uLmAsXG4gIHJlczogTmV4dEFwaVJlc3BvbnNlV2l0aG91dEpzb25BbmRTdGF0dXNNZXRob2RzICZcbiAgICBTdWNjZXNzZnVsTmV4dEFwaVJlc3BvbnNlTWV0aG9kczxcbiAgICAgIFJTW1wianNvblJlc3BvbnNlXCJdIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gICAgICAgID8gei5pbmZlcjxSU1tcImpzb25SZXNwb25zZVwiXT5cbiAgICAgICAgOiBhbnlcbiAgICA+ICZcbiAgICBFcnJvck5leHRBcGlSZXNwb25zZU1ldGhvZHNcbikgPT4gUHJvbWlzZTx2b2lkPlxuXG5leHBvcnQgdHlwZSBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24gPSA8XG4gIFNQIGV4dGVuZHMgU2V0dXBQYXJhbXM8QXV0aE1pZGRsZXdhcmVzLCBhbnksIGFueT5cbj4oXG4gIHNldHVwUGFyYW1zOiBTUFxuKSA9PiA8UlMgZXh0ZW5kcyBSb3V0ZVNwZWM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgei5ab2RUeXBlQW55LCBhbnk+PihcbiAgcm91dGVfc3BlYzogUlNcbikgPT4gKG5leHQ6IFJvdXRlRnVuY3Rpb248U1AsIFJTPikgPT4gYW55XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7OztBQUFBOzs7QUNBQTs7O0FDQUE7QUFpVU8sSUFBTSxXQUFxQixJQUFJLGlCQUF3QjtBQUM1RCxRQUFNLGtCQUFrQixhQUFhLGFBQWEsU0FBUztBQUMzRCxRQUFNLE1BQU0sYUFBYSxNQUFNLEdBQUcsRUFBRTtBQUVwQyxNQUFJLHNCQUFzQjtBQUMxQixXQUFTLElBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLEtBQUs7QUFDeEMsMEJBQXVCLElBQUksR0FBVyxtQkFBbUI7QUFBQSxFQUMzRDtBQUVBLFNBQU87QUFDVDtBQUVBLElBQU8sbUJBQVE7OztBQzdVZjtBQVdPLElBQU0sY0FBYyxDQUFDLFlBQTJCLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUTtBQUM3RSxNQUFJLENBQUMsUUFBUSxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ2pDLFVBQU0sSUFBSSwwQkFBMEI7QUFBQSxNQUNsQyxNQUFNO0FBQUEsTUFDTixTQUFTLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUNuQyxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sS0FBSyxLQUFLLEdBQUc7QUFDdEI7QUFFQSxJQUFPLHVCQUFROzs7QUNyQmY7QUFDQSxT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LG9CQUFvQixDQUFDLHVCQUF1QjtBQUNoRCxZQUFNLHFCQUFxQixPQUN6QixLQUNBLFFBQ0c7QUFDSCwwQkFBa0IsVUFBVSxDQUFDLFNBQVM7QUFFdEMsY0FBTSxtQkFDSixNQUFNLFFBQVEsS0FBSyxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQ2pELElBQUksQ0FBQyxhQUFhLGtCQUFrQixTQUFTO0FBQy9DLGNBQU0sb0JBQW9CLGdCQUFnQixLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDMUQsWUFBSTtBQUNGLGdCQUFNLElBQUksTUFBTSxzQkFBc0IsbUJBQW1CO0FBRTNELGNBQU0sa0NBQWtDLENBQUMsU0FBUyxPQUFPQyxNQUFLQyxTQUFRO0FBQ3BFLGNBQUksU0FBb0IsQ0FBQztBQUN6QixjQUFJLHlCQUF5QjtBQUU3QixxQkFBVyxjQUFjLGlCQUFpQjtBQUN4QyxnQkFBSTtBQUNGLHFCQUFPLE1BQU0sV0FBVyxJQUFJLFNBQVM7QUFFbkMseUNBQXlCO0FBQ3pCLHVCQUFPLEtBQUssR0FBRyxJQUFJO0FBQUEsY0FDckIsQ0FBQyxFQUFFRCxNQUFLQyxJQUFHO0FBQUEsWUFDYixTQUFTLE9BQVA7QUFDQSxxQkFBTyxLQUFLLEtBQUs7QUFDakI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUVBLGNBQUksb0NBQW9DLHdCQUF3QjtBQUM5RCw2Q0FBaUMsTUFBTTtBQUFBLFVBQ3pDO0FBRUEsZ0JBQU0sT0FBTyxPQUFPLFNBQVM7QUFBQSxRQUMvQjtBQUVBLGVBQU87QUFBQSxVQUNMLEdBQUssOEJBQ0QsQ0FBQywyQkFBMkIsSUFDNUIsQ0FBQztBQUFBLFVBQ0wsR0FBSyxxQkFBcUIsQ0FBQztBQUFBLFVBQzNCO0FBQUEsVUFDQSxHQUFLLDhCQUE4QixDQUFDO0FBQUEsVUFDcEMsR0FBSyxLQUFLLGVBQWUsQ0FBQztBQUFBLFVBQzFCLHFCQUFZLEtBQUssT0FBTztBQUFBLFVBQ3hCLHdCQUFlO0FBQUEsWUFDYixVQUFVLEtBQUs7QUFBQSxZQUNmLGFBQWEsS0FBSztBQUFBLFlBQ2xCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFVBQVUsS0FBSztBQUFBLFlBQ2YsY0FBYyxLQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0Q7QUFBQSxRQUNGLEVBQUUsS0FBWSxHQUFHO0FBQUEsTUFDbkI7QUFFQSx5QkFBbUIsZUFBZTtBQUNsQyx5QkFBbUIsYUFBYTtBQUVoQyxhQUFPO0FBQUEsSUFDVDtBQUVBLHNCQUFrQixlQUFlO0FBQ2pDLHNCQUFrQixhQUFhO0FBRS9CLFdBQU87QUFBQSxFQUNUO0FBRUEsZ0JBQWMsZUFBZTtBQUU3QixTQUFPO0FBQ1Q7OztBSWpLQTsiLAogICJuYW1lcyI6IFsieiIsICJyZXEiLCAicmVzIl0KfQo=