MediaWiki:Gadget-Wikiplus.js

闲敲棋子落灯花-flood​(留言 | 贡献)2026年8月3日 (一) 15:22的版本 (Git commit 634265f: chore(build): bump version to 4.10.0)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
/**
 * SPDX-License-Identifier: CC-BY-SA-4.0 OR Apache-2.0
 * _addText: '{{Gadget Header|title=Wikiplus|license=CC-BY-SA-4.0|license2=Apache-2.0}}'
 *
 * Wikiplus
 *
 * @base {@link https://github.com/Wikiplus/Wikiplus}
 * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/Wikiplus}
 * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/Wikiplus/}
 * @author Eridanus Sora (妹空酱)
 * @license CC-BY-SA-4.0 {@link https://www.qiuwenbaike.cn/wiki/H:CC-BY-SA-4.0} OR Apache-2.0 {@link http://www.apache.org/licenses/LICENSE-2.0}
 */

/**
 * Copyright 2014-2024 Eridanus Sora (妹空酱)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 */
/**
 * +------------------------------------------------------------+
 * |            === WARNING: GLOBAL GADGET FILE ===             |
 * +------------------------------------------------------------+
 * |       All changes should be made in the repository,        |
 * |                otherwise they will be lost.                |
 * +------------------------------------------------------------+
 * |        Changes to this page may affect many users.         |
 * | Please discuss changes by opening an issue before editing. |
 * +------------------------------------------------------------+
 */
/* <nowiki> */

(() => {

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esm = (fn, res) => function __init() {
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/global-this.js
var require_global_this = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/global-this.js"(exports, module2) {
    "use strict";
    var check = function(it) {
      return it && it.Math === Math && it;
    };
    module2.exports = // eslint-disable-next-line es/no-global-this -- safe
    check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe
    check(typeof self == "object" && self) || check(typeof global == "object" && global) || check(typeof exports == "object" && exports) || // eslint-disable-next-line no-new-func -- fallback
    /* @__PURE__ */ function() {
      return this;
    }() || Function("return this")();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/fails.js
var require_fails = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/fails.js"(exports, module2) {
    "use strict";
    module2.exports = function(exec) {
      try {
        return !!exec();
      } catch (error) {
        return true;
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/descriptors.js
var require_descriptors = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/descriptors.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      return Object.defineProperty({}, 1, { get: function() {
        return 7;
      } })[1] !== 7;
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-bind-native.js
var require_function_bind_native = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-bind-native.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      var test = function() {
      }.bind();
      return typeof test != "function" || test.hasOwnProperty("prototype");
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-call.js
var require_function_call = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-call.js"(exports, module2) {
    "use strict";
    var NATIVE_BIND = require_function_bind_native();
    var call = Function.prototype.call;
    module2.exports = NATIVE_BIND ? call.bind(call) : function() {
      return call.apply(call, arguments);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-property-is-enumerable.js
var require_object_property_is_enumerable = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-property-is-enumerable.js"(exports) {
    "use strict";
    var $propertyIsEnumerable = {}.propertyIsEnumerable;
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
    exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
      var descriptor = getOwnPropertyDescriptor(this, V);
      return !!descriptor && descriptor.enumerable;
    } : $propertyIsEnumerable;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-property-descriptor.js
var require_create_property_descriptor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-property-descriptor.js"(exports, module2) {
    "use strict";
    module2.exports = function(bitmap, value) {
      return {
        enumerable: !(bitmap & 1),
        configurable: !(bitmap & 2),
        writable: !(bitmap & 4),
        value
      };
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-uncurry-this.js
var require_function_uncurry_this = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-uncurry-this.js"(exports, module2) {
    "use strict";
    var NATIVE_BIND = require_function_bind_native();
    var FunctionPrototype = Function.prototype;
    var call = FunctionPrototype.call;
    var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
    module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) {
      return function() {
        return call.apply(fn, arguments);
      };
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/classof-raw.js
var require_classof_raw = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/classof-raw.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toString = uncurryThis({}.toString);
    var stringSlice = uncurryThis("".slice);
    module2.exports = function(it) {
      return stringSlice(toString(it), 8, -1);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/indexed-object.js
var require_indexed_object = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/indexed-object.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var classof = require_classof_raw();
    var $Object = Object;
    var split = uncurryThis("".split);
    module2.exports = fails(function() {
      return !$Object("z").propertyIsEnumerable(0);
    }) ? function(it) {
      return classof(it) === "String" ? split(it, "") : $Object(it);
    } : $Object;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-null-or-undefined.js
var require_is_null_or_undefined = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-null-or-undefined.js"(exports, module2) {
    "use strict";
    module2.exports = function(it) {
      return it === null || it === void 0;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/require-object-coercible.js
var require_require_object_coercible = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/require-object-coercible.js"(exports, module2) {
    "use strict";
    var isNullOrUndefined = require_is_null_or_undefined();
    var $TypeError = TypeError;
    module2.exports = function(it) {
      if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it);
      return it;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-indexed-object.js
var require_to_indexed_object = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-indexed-object.js"(exports, module2) {
    "use strict";
    var IndexedObject = require_indexed_object();
    var requireObjectCoercible = require_require_object_coercible();
    module2.exports = function(it) {
      return IndexedObject(requireObjectCoercible(it));
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-callable.js
var require_is_callable = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-callable.js"(exports, module2) {
    "use strict";
    var documentAll = typeof document == "object" && document.all;
    module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) {
      return typeof argument == "function" || argument === documentAll;
    } : function(argument) {
      return typeof argument == "function";
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-object.js
var require_is_object = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-object.js"(exports, module2) {
    "use strict";
    var isCallable = require_is_callable();
    module2.exports = function(it) {
      return typeof it == "object" ? it !== null : isCallable(it);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-built-in.js
var require_get_built_in = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-built-in.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var isCallable = require_is_callable();
    var aFunction = function(argument) {
      return isCallable(argument) ? argument : void 0;
    };
    module2.exports = function(namespace, method) {
      return arguments.length < 2 ? aFunction(globalThis2[namespace]) : globalThis2[namespace] && globalThis2[namespace][method];
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-is-prototype-of.js
var require_object_is_prototype_of = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-is-prototype-of.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    module2.exports = uncurryThis({}.isPrototypeOf);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-user-agent.js
var require_environment_user_agent = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-user-agent.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var navigator2 = globalThis2.navigator;
    var userAgent = navigator2 && navigator2.userAgent;
    module2.exports = userAgent ? String(userAgent) : "";
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-v8-version.js
var require_environment_v8_version = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-v8-version.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var userAgent = require_environment_user_agent();
    var process = globalThis2.process;
    var Deno2 = globalThis2.Deno;
    var versions = process && process.versions || Deno2 && Deno2.version;
    var v8 = versions && versions.v8;
    var match;
    var version;
    if (v8) {
      match = v8.split(".");
      version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
    }
    if (!version && userAgent) {
      match = userAgent.match(/Edge\/(\d+)/);
      if (!match || match[1] >= 74) {
        match = userAgent.match(/Chrome\/(\d+)/);
        if (match) version = +match[1];
      }
    }
    module2.exports = version;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/symbol-constructor-detection.js
var require_symbol_constructor_detection = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/symbol-constructor-detection.js"(exports, module2) {
    "use strict";
    var V8_VERSION = require_environment_v8_version();
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $String = globalThis2.String;
    module2.exports = !!Object.getOwnPropertySymbols && !fails(function() {
      var symbol = Symbol("symbol detection");
      return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
      !Symbol.sham && V8_VERSION && V8_VERSION < 41;
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/use-symbol-as-uid.js
var require_use_symbol_as_uid = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/use-symbol-as-uid.js"(exports, module2) {
    "use strict";
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol";
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-symbol.js
var require_is_symbol = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-symbol.js"(exports, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var isCallable = require_is_callable();
    var isPrototypeOf = require_object_is_prototype_of();
    var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
    var $Object = Object;
    module2.exports = USE_SYMBOL_AS_UID ? function(it) {
      return typeof it == "symbol";
    } : function(it) {
      var $Symbol = getBuiltIn("Symbol");
      return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/try-to-string.js
var require_try_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/try-to-string.js"(exports, module2) {
    "use strict";
    var $String = String;
    module2.exports = function(argument) {
      try {
        return $String(argument);
      } catch (error) {
        return "Object";
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/a-callable.js
var require_a_callable = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/a-callable.js"(exports, module2) {
    "use strict";
    var isCallable = require_is_callable();
    var tryToString = require_try_to_string();
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isCallable(argument)) return argument;
      throw new $TypeError(tryToString(argument) + " is not a function");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-method.js
var require_get_method = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-method.js"(exports, module2) {
    "use strict";
    var aCallable = require_a_callable();
    var isNullOrUndefined = require_is_null_or_undefined();
    module2.exports = function(V, P) {
      var func = V[P];
      return isNullOrUndefined(func) ? void 0 : aCallable(func);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/ordinary-to-primitive.js
var require_ordinary_to_primitive = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/ordinary-to-primitive.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var isCallable = require_is_callable();
    var isObject = require_is_object();
    var $TypeError = TypeError;
    module2.exports = function(input, pref) {
      var fn, val;
      if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
      if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;
      if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
      throw new $TypeError("Can't convert object to primitive value");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-pure.js
var require_is_pure = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-pure.js"(exports, module2) {
    "use strict";
    module2.exports = false;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-global-property.js
var require_define_global_property = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-global-property.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var defineProperty = Object.defineProperty;
    module2.exports = function(key, value) {
      try {
        defineProperty(globalThis2, key, { value, configurable: true, writable: true });
      } catch (error) {
        globalThis2[key] = value;
      }
      return value;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/shared-store.js
var require_shared_store = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/shared-store.js"(exports, module2) {
    "use strict";
    var IS_PURE = require_is_pure();
    var globalThis2 = require_global_this();
    var defineGlobalProperty = require_define_global_property();
    var SHARED = "__core-js_shared__";
    var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {});
    (store.versions || (store.versions = [])).push({
      version: "3.41.0",
      mode: IS_PURE ? "pure" : "global",
      copyright: "© 2014-2025 Denis Pushkarev (zloirock.ru)",
      license: "https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",
      source: "https://github.com/zloirock/core-js"
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/shared.js
var require_shared = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/shared.js"(exports, module2) {
    "use strict";
    var store = require_shared_store();
    module2.exports = function(key, value) {
      return store[key] || (store[key] = value || {});
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-object.js
var require_to_object = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-object.js"(exports, module2) {
    "use strict";
    var requireObjectCoercible = require_require_object_coercible();
    var $Object = Object;
    module2.exports = function(argument) {
      return $Object(requireObjectCoercible(argument));
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/has-own-property.js
var require_has_own_property = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/has-own-property.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toObject = require_to_object();
    var hasOwnProperty = uncurryThis({}.hasOwnProperty);
    module2.exports = Object.hasOwn || function hasOwn(it, key) {
      return hasOwnProperty(toObject(it), key);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/uid.js
var require_uid = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/uid.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var id = 0;
    var postfix = Math.random();
    var toString = uncurryThis(1 .toString);
    module2.exports = function(key) {
      return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/well-known-symbol.js
var require_well_known_symbol = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/well-known-symbol.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var shared = require_shared();
    var hasOwn = require_has_own_property();
    var uid = require_uid();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
    var Symbol2 = globalThis2.Symbol;
    var WellKnownSymbolsStore = shared("wks");
    var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid;
    module2.exports = function(name) {
      if (!hasOwn(WellKnownSymbolsStore, name)) {
        WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name);
      }
      return WellKnownSymbolsStore[name];
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-primitive.js
var require_to_primitive = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-primitive.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var isObject = require_is_object();
    var isSymbol = require_is_symbol();
    var getMethod = require_get_method();
    var ordinaryToPrimitive = require_ordinary_to_primitive();
    var wellKnownSymbol = require_well_known_symbol();
    var $TypeError = TypeError;
    var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
    module2.exports = function(input, pref) {
      if (!isObject(input) || isSymbol(input)) return input;
      var exoticToPrim = getMethod(input, TO_PRIMITIVE);
      var result;
      if (exoticToPrim) {
        if (pref === void 0) pref = "default";
        result = call(exoticToPrim, input, pref);
        if (!isObject(result) || isSymbol(result)) return result;
        throw new $TypeError("Can't convert object to primitive value");
      }
      if (pref === void 0) pref = "number";
      return ordinaryToPrimitive(input, pref);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-property-key.js
var require_to_property_key = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-property-key.js"(exports, module2) {
    "use strict";
    var toPrimitive = require_to_primitive();
    var isSymbol = require_is_symbol();
    module2.exports = function(argument) {
      var key = toPrimitive(argument, "string");
      return isSymbol(key) ? key : key + "";
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/document-create-element.js
var require_document_create_element = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/document-create-element.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var isObject = require_is_object();
    var document2 = globalThis2.document;
    var EXISTS = isObject(document2) && isObject(document2.createElement);
    module2.exports = function(it) {
      return EXISTS ? document2.createElement(it) : {};
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/ie8-dom-define.js
var require_ie8_dom_define = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/ie8-dom-define.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    var createElement = require_document_create_element();
    module2.exports = !DESCRIPTORS && !fails(function() {
      return Object.defineProperty(createElement("div"), "a", {
        get: function() {
          return 7;
        }
      }).a !== 7;
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-descriptor.js
var require_object_get_own_property_descriptor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var call = require_function_call();
    var propertyIsEnumerableModule = require_object_property_is_enumerable();
    var createPropertyDescriptor = require_create_property_descriptor();
    var toIndexedObject = require_to_indexed_object();
    var toPropertyKey = require_to_property_key();
    var hasOwn = require_has_own_property();
    var IE8_DOM_DEFINE = require_ie8_dom_define();
    var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
      O = toIndexedObject(O);
      P = toPropertyKey(P);
      if (IE8_DOM_DEFINE) try {
        return $getOwnPropertyDescriptor(O, P);
      } catch (error) {
      }
      if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/v8-prototype-define-bug.js
var require_v8_prototype_define_bug = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    module2.exports = DESCRIPTORS && fails(function() {
      return Object.defineProperty(function() {
      }, "prototype", {
        value: 42,
        writable: false
      }).prototype !== 42;
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/an-object.js
var require_an_object = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/an-object.js"(exports, module2) {
    "use strict";
    var isObject = require_is_object();
    var $String = String;
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isObject(argument)) return argument;
      throw new $TypeError($String(argument) + " is not an object");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-define-property.js
var require_object_define_property = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-define-property.js"(exports) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var IE8_DOM_DEFINE = require_ie8_dom_define();
    var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
    var anObject = require_an_object();
    var toPropertyKey = require_to_property_key();
    var $TypeError = TypeError;
    var $defineProperty = Object.defineProperty;
    var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var ENUMERABLE = "enumerable";
    var CONFIGURABLE = "configurable";
    var WRITABLE = "writable";
    exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
      anObject(O);
      P = toPropertyKey(P);
      anObject(Attributes);
      if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
        var current = $getOwnPropertyDescriptor(O, P);
        if (current && current[WRITABLE]) {
          O[P] = Attributes.value;
          Attributes = {
            configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
            enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
            writable: false
          };
        }
      }
      return $defineProperty(O, P, Attributes);
    } : $defineProperty : function defineProperty(O, P, Attributes) {
      anObject(O);
      P = toPropertyKey(P);
      anObject(Attributes);
      if (IE8_DOM_DEFINE) try {
        return $defineProperty(O, P, Attributes);
      } catch (error) {
      }
      if ("get" in Attributes || "set" in Attributes) throw new $TypeError("Accessors not supported");
      if ("value" in Attributes) O[P] = Attributes.value;
      return O;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-non-enumerable-property.js
var require_create_non_enumerable_property = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-non-enumerable-property.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var definePropertyModule = require_object_define_property();
    var createPropertyDescriptor = require_create_property_descriptor();
    module2.exports = DESCRIPTORS ? function(object, key, value) {
      return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
    } : function(object, key, value) {
      object[key] = value;
      return object;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-name.js
var require_function_name = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-name.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var hasOwn = require_has_own_property();
    var FunctionPrototype = Function.prototype;
    var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
    var EXISTS = hasOwn(FunctionPrototype, "name");
    var PROPER = EXISTS && function something() {
    }.name === "something";
    var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable);
    module2.exports = {
      EXISTS,
      PROPER,
      CONFIGURABLE
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/inspect-source.js
var require_inspect_source = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/inspect-source.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var isCallable = require_is_callable();
    var store = require_shared_store();
    var functionToString = uncurryThis(Function.toString);
    if (!isCallable(store.inspectSource)) {
      store.inspectSource = function(it) {
        return functionToString(it);
      };
    }
    module2.exports = store.inspectSource;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/weak-map-basic-detection.js
var require_weak_map_basic_detection = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/weak-map-basic-detection.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var isCallable = require_is_callable();
    var WeakMap = globalThis2.WeakMap;
    module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/shared-key.js
var require_shared_key = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/shared-key.js"(exports, module2) {
    "use strict";
    var shared = require_shared();
    var uid = require_uid();
    var keys = shared("keys");
    module2.exports = function(key) {
      return keys[key] || (keys[key] = uid(key));
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/hidden-keys.js
var require_hidden_keys = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/hidden-keys.js"(exports, module2) {
    "use strict";
    module2.exports = {};
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/internal-state.js
var require_internal_state = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/internal-state.js"(exports, module2) {
    "use strict";
    var NATIVE_WEAK_MAP = require_weak_map_basic_detection();
    var globalThis2 = require_global_this();
    var isObject = require_is_object();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var hasOwn = require_has_own_property();
    var shared = require_shared_store();
    var sharedKey = require_shared_key();
    var hiddenKeys = require_hidden_keys();
    var OBJECT_ALREADY_INITIALIZED = "Object already initialized";
    var TypeError2 = globalThis2.TypeError;
    var WeakMap = globalThis2.WeakMap;
    var set;
    var get;
    var has;
    var enforce = function(it) {
      return has(it) ? get(it) : set(it, {});
    };
    var getterFor = function(TYPE) {
      return function(it) {
        var state;
        if (!isObject(it) || (state = get(it)).type !== TYPE) {
          throw new TypeError2("Incompatible receiver, " + TYPE + " required");
        }
        return state;
      };
    };
    if (NATIVE_WEAK_MAP || shared.state) {
      store = shared.state || (shared.state = new WeakMap());
      store.get = store.get;
      store.has = store.has;
      store.set = store.set;
      set = function(it, metadata) {
        if (store.has(it)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        store.set(it, metadata);
        return metadata;
      };
      get = function(it) {
        return store.get(it) || {};
      };
      has = function(it) {
        return store.has(it);
      };
    } else {
      STATE = sharedKey("state");
      hiddenKeys[STATE] = true;
      set = function(it, metadata) {
        if (hasOwn(it, STATE)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        createNonEnumerableProperty(it, STATE, metadata);
        return metadata;
      };
      get = function(it) {
        return hasOwn(it, STATE) ? it[STATE] : {};
      };
      has = function(it) {
        return hasOwn(it, STATE);
      };
    }
    var store;
    var STATE;
    module2.exports = {
      set,
      get,
      has,
      enforce,
      getterFor
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/make-built-in.js
var require_make_built_in = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/make-built-in.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var isCallable = require_is_callable();
    var hasOwn = require_has_own_property();
    var DESCRIPTORS = require_descriptors();
    var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE;
    var inspectSource = require_inspect_source();
    var InternalStateModule = require_internal_state();
    var enforceInternalState = InternalStateModule.enforce;
    var getInternalState = InternalStateModule.get;
    var $String = String;
    var defineProperty = Object.defineProperty;
    var stringSlice = uncurryThis("".slice);
    var replace = uncurryThis("".replace);
    var join = uncurryThis([].join);
    var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() {
      return defineProperty(function() {
      }, "length", { value: 8 }).length !== 8;
    });
    var TEMPLATE = String(String).split("String");
    var makeBuiltIn = module2.exports = function(value, name, options) {
      if (stringSlice($String(name), 0, 7) === "Symbol(") {
        name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]";
      }
      if (options && options.getter) name = "get " + name;
      if (options && options.setter) name = "set " + name;
      if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
        if (DESCRIPTORS) defineProperty(value, "name", { value: name, configurable: true });
        else value.name = name;
      }
      if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) {
        defineProperty(value, "length", { value: options.arity });
      }
      try {
        if (options && hasOwn(options, "constructor") && options.constructor) {
          if (DESCRIPTORS) defineProperty(value, "prototype", { writable: false });
        } else if (value.prototype) value.prototype = void 0;
      } catch (error) {
      }
      var state = enforceInternalState(value);
      if (!hasOwn(state, "source")) {
        state.source = join(TEMPLATE, typeof name == "string" ? name : "");
      }
      return value;
    };
    Function.prototype.toString = makeBuiltIn(function toString() {
      return isCallable(this) && getInternalState(this).source || inspectSource(this);
    }, "toString");
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-built-in.js
var require_define_built_in = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-built-in.js"(exports, module2) {
    "use strict";
    var isCallable = require_is_callable();
    var definePropertyModule = require_object_define_property();
    var makeBuiltIn = require_make_built_in();
    var defineGlobalProperty = require_define_global_property();
    module2.exports = function(O, key, value, options) {
      if (!options) options = {};
      var simple = options.enumerable;
      var name = options.name !== void 0 ? options.name : key;
      if (isCallable(value)) makeBuiltIn(value, name, options);
      if (options.global) {
        if (simple) O[key] = value;
        else defineGlobalProperty(key, value);
      } else {
        try {
          if (!options.unsafe) delete O[key];
          else if (O[key]) simple = true;
        } catch (error) {
        }
        if (simple) O[key] = value;
        else definePropertyModule.f(O, key, {
          value,
          enumerable: false,
          configurable: !options.nonConfigurable,
          writable: !options.nonWritable
        });
      }
      return O;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/math-trunc.js
var require_math_trunc = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/math-trunc.js"(exports, module2) {
    "use strict";
    var ceil = Math.ceil;
    var floor = Math.floor;
    module2.exports = Math.trunc || function trunc(x) {
      var n = +x;
      return (n > 0 ? floor : ceil)(n);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-integer-or-infinity.js
var require_to_integer_or_infinity = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-integer-or-infinity.js"(exports, module2) {
    "use strict";
    var trunc = require_math_trunc();
    module2.exports = function(argument) {
      var number = +argument;
      return number !== number || number === 0 ? 0 : trunc(number);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-absolute-index.js
var require_to_absolute_index = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-absolute-index.js"(exports, module2) {
    "use strict";
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var max = Math.max;
    var min = Math.min;
    module2.exports = function(index, length) {
      var integer = toIntegerOrInfinity(index);
      return integer < 0 ? max(integer + length, 0) : min(integer, length);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-length.js
var require_to_length = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-length.js"(exports, module2) {
    "use strict";
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var min = Math.min;
    module2.exports = function(argument) {
      var len = toIntegerOrInfinity(argument);
      return len > 0 ? min(len, 9007199254740991) : 0;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/length-of-array-like.js
var require_length_of_array_like = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/length-of-array-like.js"(exports, module2) {
    "use strict";
    var toLength = require_to_length();
    module2.exports = function(obj) {
      return toLength(obj.length);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-includes.js
var require_array_includes = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-includes.js"(exports, module2) {
    "use strict";
    var toIndexedObject = require_to_indexed_object();
    var toAbsoluteIndex = require_to_absolute_index();
    var lengthOfArrayLike = require_length_of_array_like();
    var createMethod = function(IS_INCLUDES) {
      return function($this, el, fromIndex) {
        var O = toIndexedObject($this);
        var length = lengthOfArrayLike(O);
        if (length === 0) return !IS_INCLUDES && -1;
        var index = toAbsoluteIndex(fromIndex, length);
        var value;
        if (IS_INCLUDES && el !== el) while (length > index) {
          value = O[index++];
          if (value !== value) return true;
        }
        else for (; length > index; index++) {
          if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
        }
        return !IS_INCLUDES && -1;
      };
    };
    module2.exports = {
      // `Array.prototype.includes` method
      // https://tc39.es/ecma262/#sec-array.prototype.includes
      includes: createMethod(true),
      // `Array.prototype.indexOf` method
      // https://tc39.es/ecma262/#sec-array.prototype.indexof
      indexOf: createMethod(false)
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-keys-internal.js
var require_object_keys_internal = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-keys-internal.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var hasOwn = require_has_own_property();
    var toIndexedObject = require_to_indexed_object();
    var indexOf = require_array_includes().indexOf;
    var hiddenKeys = require_hidden_keys();
    var push = uncurryThis([].push);
    module2.exports = function(object, names) {
      var O = toIndexedObject(object);
      var i = 0;
      var result = [];
      var key;
      for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
      while (names.length > i) if (hasOwn(O, key = names[i++])) {
        ~indexOf(result, key) || push(result, key);
      }
      return result;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/enum-bug-keys.js
var require_enum_bug_keys = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/enum-bug-keys.js"(exports, module2) {
    "use strict";
    module2.exports = [
      "constructor",
      "hasOwnProperty",
      "isPrototypeOf",
      "propertyIsEnumerable",
      "toLocaleString",
      "toString",
      "valueOf"
    ];
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-names.js
var require_object_get_own_property_names = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-names.js"(exports) {
    "use strict";
    var internalObjectKeys = require_object_keys_internal();
    var enumBugKeys = require_enum_bug_keys();
    var hiddenKeys = enumBugKeys.concat("length", "prototype");
    exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
      return internalObjectKeys(O, hiddenKeys);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-symbols.js
var require_object_get_own_property_symbols = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports) {
    "use strict";
    exports.f = Object.getOwnPropertySymbols;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/own-keys.js
var require_own_keys = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/own-keys.js"(exports, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var uncurryThis = require_function_uncurry_this();
    var getOwnPropertyNamesModule = require_object_get_own_property_names();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var anObject = require_an_object();
    var concat = uncurryThis([].concat);
    module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys2(it) {
      var keys = getOwnPropertyNamesModule.f(anObject(it));
      var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
      return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/copy-constructor-properties.js
var require_copy_constructor_properties = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/copy-constructor-properties.js"(exports, module2) {
    "use strict";
    var hasOwn = require_has_own_property();
    var ownKeys2 = require_own_keys();
    var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
    var definePropertyModule = require_object_define_property();
    module2.exports = function(target, source, exceptions) {
      var keys = ownKeys2(source);
      var defineProperty = definePropertyModule.f;
      var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
          defineProperty(target, key, getOwnPropertyDescriptor(source, key));
        }
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-forced.js
var require_is_forced = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-forced.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var isCallable = require_is_callable();
    var replacement = /#|\.prototype\./;
    var isForced = function(feature, detection) {
      var value = data[normalize(feature)];
      return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
    };
    var normalize = isForced.normalize = function(string) {
      return String(string).replace(replacement, ".").toLowerCase();
    };
    var data = isForced.data = {};
    var NATIVE = isForced.NATIVE = "N";
    var POLYFILL = isForced.POLYFILL = "P";
    module2.exports = isForced;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/export.js
var require_export = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/export.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var defineBuiltIn = require_define_built_in();
    var defineGlobalProperty = require_define_global_property();
    var copyConstructorProperties = require_copy_constructor_properties();
    var isForced = require_is_forced();
    module2.exports = function(options, source) {
      var TARGET = options.target;
      var GLOBAL = options.global;
      var STATIC = options.stat;
      var FORCED, target, key, targetProperty, sourceProperty, descriptor;
      if (GLOBAL) {
        target = globalThis2;
      } else if (STATIC) {
        target = globalThis2[TARGET] || defineGlobalProperty(TARGET, {});
      } else {
        target = globalThis2[TARGET] && globalThis2[TARGET].prototype;
      }
      if (target) for (key in source) {
        sourceProperty = source[key];
        if (options.dontCallGetSet) {
          descriptor = getOwnPropertyDescriptor(target, key);
          targetProperty = descriptor && descriptor.value;
        } else targetProperty = target[key];
        FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced);
        if (!FORCED && targetProperty !== void 0) {
          if (typeof sourceProperty == typeof targetProperty) continue;
          copyConstructorProperties(sourceProperty, targetProperty);
        }
        if (options.sham || targetProperty && targetProperty.sham) {
          createNonEnumerableProperty(sourceProperty, "sham", true);
        }
        defineBuiltIn(target, key, sourceProperty, options);
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-string-tag-support.js
var require_to_string_tag_support = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-string-tag-support.js"(exports, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var test = {};
    test[TO_STRING_TAG] = "z";
    module2.exports = String(test) === "[object z]";
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/classof.js
var require_classof = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/classof.js"(exports, module2) {
    "use strict";
    var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
    var isCallable = require_is_callable();
    var classofRaw = require_classof_raw();
    var wellKnownSymbol = require_well_known_symbol();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var $Object = Object;
    var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() {
      return arguments;
    }()) === "Arguments";
    var tryGet = function(it, key) {
      try {
        return it[key];
      } catch (error) {
      }
    };
    module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) {
      var O, tag, result;
      return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-string.js
var require_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/to-string.js"(exports, module2) {
    "use strict";
    var classof = require_classof();
    var $String = String;
    module2.exports = function(argument) {
      if (classof(argument) === "Symbol") throw new TypeError("Cannot convert a Symbol value to a string");
      return $String(argument);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-keys.js
var require_object_keys = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-keys.js"(exports, module2) {
    "use strict";
    var internalObjectKeys = require_object_keys_internal();
    var enumBugKeys = require_enum_bug_keys();
    module2.exports = Object.keys || function keys(O) {
      return internalObjectKeys(O, enumBugKeys);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-define-properties.js
var require_object_define_properties = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-define-properties.js"(exports) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
    var definePropertyModule = require_object_define_property();
    var anObject = require_an_object();
    var toIndexedObject = require_to_indexed_object();
    var objectKeys = require_object_keys();
    exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
      anObject(O);
      var props = toIndexedObject(Properties);
      var keys = objectKeys(Properties);
      var length = keys.length;
      var index = 0;
      var key;
      while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);
      return O;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/html.js
var require_html = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/html.js"(exports, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    module2.exports = getBuiltIn("document", "documentElement");
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-create.js
var require_object_create = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-create.js"(exports, module2) {
    "use strict";
    var anObject = require_an_object();
    var definePropertiesModule = require_object_define_properties();
    var enumBugKeys = require_enum_bug_keys();
    var hiddenKeys = require_hidden_keys();
    var html = require_html();
    var documentCreateElement = require_document_create_element();
    var sharedKey = require_shared_key();
    var GT = ">";
    var LT = "<";
    var PROTOTYPE = "prototype";
    var SCRIPT = "script";
    var IE_PROTO = sharedKey("IE_PROTO");
    var EmptyConstructor = function() {
    };
    var scriptTag = function(content) {
      return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT;
    };
    var NullProtoObjectViaActiveX = function(activeXDocument2) {
      activeXDocument2.write(scriptTag(""));
      activeXDocument2.close();
      var temp = activeXDocument2.parentWindow.Object;
      activeXDocument2 = null;
      return temp;
    };
    var NullProtoObjectViaIFrame = function() {
      var iframe = documentCreateElement("iframe");
      var JS = "java" + SCRIPT + ":";
      var iframeDocument;
      iframe.style.display = "none";
      html.appendChild(iframe);
      iframe.src = String(JS);
      iframeDocument = iframe.contentWindow.document;
      iframeDocument.open();
      iframeDocument.write(scriptTag("document.F=Object"));
      iframeDocument.close();
      return iframeDocument.F;
    };
    var activeXDocument;
    var NullProtoObject = function() {
      try {
        activeXDocument = new ActiveXObject("htmlfile");
      } catch (error) {
      }
      NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
      var length = enumBugKeys.length;
      while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
      return NullProtoObject();
    };
    hiddenKeys[IE_PROTO] = true;
    module2.exports = Object.create || function create(O, Properties) {
      var result;
      if (O !== null) {
        EmptyConstructor[PROTOTYPE] = anObject(O);
        result = new EmptyConstructor();
        EmptyConstructor[PROTOTYPE] = null;
        result[IE_PROTO] = O;
      } else result = NullProtoObject();
      return Properties === void 0 ? result : definePropertiesModule.f(result, Properties);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-slice.js
var require_array_slice = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-slice.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    module2.exports = uncurryThis([].slice);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-names-external.js
var require_object_get_own_property_names_external = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-own-property-names-external.js"(exports, module2) {
    "use strict";
    var classof = require_classof_raw();
    var toIndexedObject = require_to_indexed_object();
    var $getOwnPropertyNames = require_object_get_own_property_names().f;
    var arraySlice = require_array_slice();
    var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
    var getWindowNames = function(it) {
      try {
        return $getOwnPropertyNames(it);
      } catch (error) {
        return arraySlice(windowNames);
      }
    };
    module2.exports.f = function getOwnPropertyNames(it) {
      return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it));
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-built-in-accessor.js
var require_define_built_in_accessor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-built-in-accessor.js"(exports, module2) {
    "use strict";
    var makeBuiltIn = require_make_built_in();
    var defineProperty = require_object_define_property();
    module2.exports = function(target, name, descriptor) {
      if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
      if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
      return defineProperty.f(target, name, descriptor);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/well-known-symbol-wrapped.js
var require_well_known_symbol_wrapped = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/well-known-symbol-wrapped.js"(exports) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    exports.f = wellKnownSymbol;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/path.js
var require_path = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/path.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    module2.exports = globalThis2;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/well-known-symbol-define.js
var require_well_known_symbol_define = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/well-known-symbol-define.js"(exports, module2) {
    "use strict";
    var path = require_path();
    var hasOwn = require_has_own_property();
    var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
    var defineProperty = require_object_define_property().f;
    module2.exports = function(NAME) {
      var Symbol2 = path.Symbol || (path.Symbol = {});
      if (!hasOwn(Symbol2, NAME)) defineProperty(Symbol2, NAME, {
        value: wrappedWellKnownSymbolModule.f(NAME)
      });
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/symbol-define-to-primitive.js
var require_symbol_define_to_primitive = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/symbol-define-to-primitive.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var getBuiltIn = require_get_built_in();
    var wellKnownSymbol = require_well_known_symbol();
    var defineBuiltIn = require_define_built_in();
    module2.exports = function() {
      var Symbol2 = getBuiltIn("Symbol");
      var SymbolPrototype = Symbol2 && Symbol2.prototype;
      var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
      var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
      if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
        defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) {
          return call(valueOf, this);
        }, { arity: 1 });
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/set-to-string-tag.js
var require_set_to_string_tag = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/set-to-string-tag.js"(exports, module2) {
    "use strict";
    var defineProperty = require_object_define_property().f;
    var hasOwn = require_has_own_property();
    var wellKnownSymbol = require_well_known_symbol();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    module2.exports = function(target, TAG, STATIC) {
      if (target && !STATIC) target = target.prototype;
      if (target && !hasOwn(target, TO_STRING_TAG)) {
        defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-uncurry-this-clause.js
var require_function_uncurry_this_clause = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-uncurry-this-clause.js"(exports, module2) {
    "use strict";
    var classofRaw = require_classof_raw();
    var uncurryThis = require_function_uncurry_this();
    module2.exports = function(fn) {
      if (classofRaw(fn) === "Function") return uncurryThis(fn);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-bind-context.js
var require_function_bind_context = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-bind-context.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this_clause();
    var aCallable = require_a_callable();
    var NATIVE_BIND = require_function_bind_native();
    var bind = uncurryThis(uncurryThis.bind);
    module2.exports = function(fn, that) {
      aCallable(fn);
      return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() {
        return fn.apply(that, arguments);
      };
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-array.js
var require_is_array = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-array.js"(exports, module2) {
    "use strict";
    var classof = require_classof_raw();
    module2.exports = Array.isArray || function isArray(argument) {
      return classof(argument) === "Array";
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-constructor.js
var require_is_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-constructor.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var isCallable = require_is_callable();
    var classof = require_classof();
    var getBuiltIn = require_get_built_in();
    var inspectSource = require_inspect_source();
    var noop = function() {
    };
    var construct = getBuiltIn("Reflect", "construct");
    var constructorRegExp = /^\s*(?:class|function)\b/;
    var exec = uncurryThis(constructorRegExp.exec);
    var INCORRECT_TO_STRING = !constructorRegExp.test(noop);
    var isConstructorModern = function isConstructor(argument) {
      if (!isCallable(argument)) return false;
      try {
        construct(noop, [], argument);
        return true;
      } catch (error) {
        return false;
      }
    };
    var isConstructorLegacy = function isConstructor(argument) {
      if (!isCallable(argument)) return false;
      switch (classof(argument)) {
        case "AsyncFunction":
        case "GeneratorFunction":
        case "AsyncGeneratorFunction":
          return false;
      }
      try {
        return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
      } catch (error) {
        return true;
      }
    };
    isConstructorLegacy.sham = true;
    module2.exports = !construct || fails(function() {
      var called;
      return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() {
        called = true;
      }) || called;
    }) ? isConstructorLegacy : isConstructorModern;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-species-constructor.js
var require_array_species_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-species-constructor.js"(exports, module2) {
    "use strict";
    var isArray = require_is_array();
    var isConstructor = require_is_constructor();
    var isObject = require_is_object();
    var wellKnownSymbol = require_well_known_symbol();
    var SPECIES = wellKnownSymbol("species");
    var $Array = Array;
    module2.exports = function(originalArray) {
      var C;
      if (isArray(originalArray)) {
        C = originalArray.constructor;
        if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = void 0;
        else if (isObject(C)) {
          C = C[SPECIES];
          if (C === null) C = void 0;
        }
      }
      return C === void 0 ? $Array : C;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-species-create.js
var require_array_species_create = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-species-create.js"(exports, module2) {
    "use strict";
    var arraySpeciesConstructor = require_array_species_constructor();
    module2.exports = function(originalArray, length) {
      return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-iteration.js
var require_array_iteration = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-iteration.js"(exports, module2) {
    "use strict";
    var bind = require_function_bind_context();
    var uncurryThis = require_function_uncurry_this();
    var IndexedObject = require_indexed_object();
    var toObject = require_to_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var arraySpeciesCreate = require_array_species_create();
    var push = uncurryThis([].push);
    var createMethod = function(TYPE) {
      var IS_MAP = TYPE === 1;
      var IS_FILTER = TYPE === 2;
      var IS_SOME = TYPE === 3;
      var IS_EVERY = TYPE === 4;
      var IS_FIND_INDEX = TYPE === 6;
      var IS_FILTER_REJECT = TYPE === 7;
      var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
      return function($this, callbackfn, that, specificCreate) {
        var O = toObject($this);
        var self2 = IndexedObject(O);
        var length = lengthOfArrayLike(self2);
        var boundFunction = bind(callbackfn, that);
        var index = 0;
        var create = specificCreate || arraySpeciesCreate;
        var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0;
        var value, result;
        for (; length > index; index++) if (NO_HOLES || index in self2) {
          value = self2[index];
          result = boundFunction(value, index, O);
          if (TYPE) {
            if (IS_MAP) target[index] = result;
            else if (result) switch (TYPE) {
              case 3:
                return true;
              // some
              case 5:
                return value;
              // find
              case 6:
                return index;
              // findIndex
              case 2:
                push(target, value);
            }
            else switch (TYPE) {
              case 4:
                return false;
              // every
              case 7:
                push(target, value);
            }
          }
        }
        return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
      };
    };
    module2.exports = {
      // `Array.prototype.forEach` method
      // https://tc39.es/ecma262/#sec-array.prototype.foreach
      forEach: createMethod(0),
      // `Array.prototype.map` method
      // https://tc39.es/ecma262/#sec-array.prototype.map
      map: createMethod(1),
      // `Array.prototype.filter` method
      // https://tc39.es/ecma262/#sec-array.prototype.filter
      filter: createMethod(2),
      // `Array.prototype.some` method
      // https://tc39.es/ecma262/#sec-array.prototype.some
      some: createMethod(3),
      // `Array.prototype.every` method
      // https://tc39.es/ecma262/#sec-array.prototype.every
      every: createMethod(4),
      // `Array.prototype.find` method
      // https://tc39.es/ecma262/#sec-array.prototype.find
      find: createMethod(5),
      // `Array.prototype.findIndex` method
      // https://tc39.es/ecma262/#sec-array.prototype.findIndex
      findIndex: createMethod(6),
      // `Array.prototype.filterReject` method
      // https://github.com/tc39/proposal-array-filtering
      filterReject: createMethod(7)
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.constructor.js
var require_es_symbol_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.constructor.js"() {
    "use strict";
    var $2 = require_export();
    var globalThis2 = require_global_this();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var IS_PURE = require_is_pure();
    var DESCRIPTORS = require_descriptors();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var fails = require_fails();
    var hasOwn = require_has_own_property();
    var isPrototypeOf = require_object_is_prototype_of();
    var anObject = require_an_object();
    var toIndexedObject = require_to_indexed_object();
    var toPropertyKey = require_to_property_key();
    var $toString = require_to_string();
    var createPropertyDescriptor = require_create_property_descriptor();
    var nativeObjectCreate = require_object_create();
    var objectKeys = require_object_keys();
    var getOwnPropertyNamesModule = require_object_get_own_property_names();
    var getOwnPropertyNamesExternal = require_object_get_own_property_names_external();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
    var definePropertyModule = require_object_define_property();
    var definePropertiesModule = require_object_define_properties();
    var propertyIsEnumerableModule = require_object_property_is_enumerable();
    var defineBuiltIn = require_define_built_in();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var shared = require_shared();
    var sharedKey = require_shared_key();
    var hiddenKeys = require_hidden_keys();
    var uid = require_uid();
    var wellKnownSymbol = require_well_known_symbol();
    var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
    var defineWellKnownSymbol = require_well_known_symbol_define();
    var defineSymbolToPrimitive = require_symbol_define_to_primitive();
    var setToStringTag = require_set_to_string_tag();
    var InternalStateModule = require_internal_state();
    var $forEach = require_array_iteration().forEach;
    var HIDDEN = sharedKey("hidden");
    var SYMBOL = "Symbol";
    var PROTOTYPE = "prototype";
    var setInternalState = InternalStateModule.set;
    var getInternalState = InternalStateModule.getterFor(SYMBOL);
    var ObjectPrototype = Object[PROTOTYPE];
    var $Symbol = globalThis2.Symbol;
    var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
    var RangeError2 = globalThis2.RangeError;
    var TypeError2 = globalThis2.TypeError;
    var QObject = globalThis2.QObject;
    var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
    var nativeDefineProperty = definePropertyModule.f;
    var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
    var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
    var push = uncurryThis([].push);
    var AllSymbols = shared("symbols");
    var ObjectPrototypeSymbols = shared("op-symbols");
    var WellKnownSymbolsStore = shared("wks");
    var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
    var fallbackDefineProperty = function(O, P, Attributes) {
      var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
      if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
      nativeDefineProperty(O, P, Attributes);
      if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
        nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
      }
    };
    var setSymbolDescriptor = DESCRIPTORS && fails(function() {
      return nativeObjectCreate(nativeDefineProperty({}, "a", {
        get: function() {
          return nativeDefineProperty(this, "a", { value: 7 }).a;
        }
      })).a !== 7;
    }) ? fallbackDefineProperty : nativeDefineProperty;
    var wrap = function(tag, description) {
      var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
      setInternalState(symbol, {
        type: SYMBOL,
        tag,
        description
      });
      if (!DESCRIPTORS) symbol.description = description;
      return symbol;
    };
    var $defineProperty = function defineProperty(O, P, Attributes) {
      if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
      anObject(O);
      var key = toPropertyKey(P);
      anObject(Attributes);
      if (hasOwn(AllSymbols, key)) {
        if (!Attributes.enumerable) {
          if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
          O[HIDDEN][key] = true;
        } else {
          if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
          Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
        }
        return setSymbolDescriptor(O, key, Attributes);
      }
      return nativeDefineProperty(O, key, Attributes);
    };
    var $defineProperties = function defineProperties(O, Properties) {
      anObject(O);
      var properties = toIndexedObject(Properties);
      var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
      $forEach(keys, function(key) {
        if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
      });
      return O;
    };
    var $create = function create(O, Properties) {
      return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
    };
    var $propertyIsEnumerable = function propertyIsEnumerable(V) {
      var P = toPropertyKey(V);
      var enumerable = call(nativePropertyIsEnumerable, this, P);
      if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
      return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
    };
    var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
      var it = toIndexedObject(O);
      var key = toPropertyKey(P);
      if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
      var descriptor = nativeGetOwnPropertyDescriptor(it, key);
      if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
        descriptor.enumerable = true;
      }
      return descriptor;
    };
    var $getOwnPropertyNames = function getOwnPropertyNames(O) {
      var names = nativeGetOwnPropertyNames(toIndexedObject(O));
      var result = [];
      $forEach(names, function(key) {
        if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
      });
      return result;
    };
    var $getOwnPropertySymbols = function(O) {
      var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
      var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
      var result = [];
      $forEach(names, function(key) {
        if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
          push(result, AllSymbols[key]);
        }
      });
      return result;
    };
    if (!NATIVE_SYMBOL) {
      $Symbol = function Symbol2() {
        if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError2("Symbol is not a constructor");
        var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]);
        var tag = uid(description);
        var setter = function(value) {
          var $this = this === void 0 ? globalThis2 : this;
          if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
          if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
          var descriptor = createPropertyDescriptor(1, value);
          try {
            setSymbolDescriptor($this, tag, descriptor);
          } catch (error) {
            if (!(error instanceof RangeError2)) throw error;
            fallbackDefineProperty($this, tag, descriptor);
          }
        };
        if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
        return wrap(tag, description);
      };
      SymbolPrototype = $Symbol[PROTOTYPE];
      defineBuiltIn(SymbolPrototype, "toString", function toString() {
        return getInternalState(this).tag;
      });
      defineBuiltIn($Symbol, "withoutSetter", function(description) {
        return wrap(uid(description), description);
      });
      propertyIsEnumerableModule.f = $propertyIsEnumerable;
      definePropertyModule.f = $defineProperty;
      definePropertiesModule.f = $defineProperties;
      getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
      getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
      getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
      wrappedWellKnownSymbolModule.f = function(name) {
        return wrap(wellKnownSymbol(name), name);
      };
      if (DESCRIPTORS) {
        defineBuiltInAccessor(SymbolPrototype, "description", {
          configurable: true,
          get: function description() {
            return getInternalState(this).description;
          }
        });
        if (!IS_PURE) {
          defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true });
        }
      }
    }
    $2({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
      Symbol: $Symbol
    });
    $forEach(objectKeys(WellKnownSymbolsStore), function(name) {
      defineWellKnownSymbol(name);
    });
    $2({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
      useSetter: function() {
        USE_SETTER = true;
      },
      useSimple: function() {
        USE_SETTER = false;
      }
    });
    $2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
      // `Object.create` method
      // https://tc39.es/ecma262/#sec-object.create
      create: $create,
      // `Object.defineProperty` method
      // https://tc39.es/ecma262/#sec-object.defineproperty
      defineProperty: $defineProperty,
      // `Object.defineProperties` method
      // https://tc39.es/ecma262/#sec-object.defineproperties
      defineProperties: $defineProperties,
      // `Object.getOwnPropertyDescriptor` method
      // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
      getOwnPropertyDescriptor: $getOwnPropertyDescriptor
    });
    $2({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, {
      // `Object.getOwnPropertyNames` method
      // https://tc39.es/ecma262/#sec-object.getownpropertynames
      getOwnPropertyNames: $getOwnPropertyNames
    });
    defineSymbolToPrimitive();
    setToStringTag($Symbol, SYMBOL);
    hiddenKeys[HIDDEN] = true;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/symbol-registry-detection.js
var require_symbol_registry_detection = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/symbol-registry-detection.js"(exports, module2) {
    "use strict";
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.for.js
var require_es_symbol_for = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.for.js"() {
    "use strict";
    var $2 = require_export();
    var getBuiltIn = require_get_built_in();
    var hasOwn = require_has_own_property();
    var toString = require_to_string();
    var shared = require_shared();
    var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
    var StringToSymbolRegistry = shared("string-to-symbol-registry");
    var SymbolToStringRegistry = shared("symbol-to-string-registry");
    $2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
      "for": function(key) {
        var string = toString(key);
        if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
        var symbol = getBuiltIn("Symbol")(string);
        StringToSymbolRegistry[string] = symbol;
        SymbolToStringRegistry[symbol] = string;
        return symbol;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.key-for.js
var require_es_symbol_key_for = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.key-for.js"() {
    "use strict";
    var $2 = require_export();
    var hasOwn = require_has_own_property();
    var isSymbol = require_is_symbol();
    var tryToString = require_try_to_string();
    var shared = require_shared();
    var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
    var SymbolToStringRegistry = shared("symbol-to-string-registry");
    $2({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
      keyFor: function keyFor(sym) {
        if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + " is not a symbol");
        if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-apply.js
var require_function_apply = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-apply.js"(exports, module2) {
    "use strict";
    var NATIVE_BIND = require_function_bind_native();
    var FunctionPrototype = Function.prototype;
    var apply = FunctionPrototype.apply;
    var call = FunctionPrototype.call;
    module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
      return call.apply(apply, arguments);
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-json-replacer-function.js
var require_get_json_replacer_function = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-json-replacer-function.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var isArray = require_is_array();
    var isCallable = require_is_callable();
    var classof = require_classof_raw();
    var toString = require_to_string();
    var push = uncurryThis([].push);
    module2.exports = function(replacer) {
      if (isCallable(replacer)) return replacer;
      if (!isArray(replacer)) return;
      var rawLength = replacer.length;
      var keys = [];
      for (var i = 0; i < rawLength; i++) {
        var element = replacer[i];
        if (typeof element == "string") push(keys, element);
        else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") push(keys, toString(element));
      }
      var keysLength = keys.length;
      var root = true;
      return function(key, value) {
        if (root) {
          root = false;
          return value;
        }
        if (isArray(this)) return value;
        for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;
      };
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.json.stringify.js
var require_es_json_stringify = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.json.stringify.js"() {
    "use strict";
    var $2 = require_export();
    var getBuiltIn = require_get_built_in();
    var apply = require_function_apply();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var isCallable = require_is_callable();
    var isSymbol = require_is_symbol();
    var arraySlice = require_array_slice();
    var getReplacerFunction = require_get_json_replacer_function();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var $String = String;
    var $stringify = getBuiltIn("JSON", "stringify");
    var exec = uncurryThis(/./.exec);
    var charAt = uncurryThis("".charAt);
    var charCodeAt = uncurryThis("".charCodeAt);
    var replace = uncurryThis("".replace);
    var numberToString = uncurryThis(1 .toString);
    var tester = /[\uD800-\uDFFF]/g;
    var low = /^[\uD800-\uDBFF]$/;
    var hi = /^[\uDC00-\uDFFF]$/;
    var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() {
      var symbol = getBuiltIn("Symbol")("stringify detection");
      return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}";
    });
    var ILL_FORMED_UNICODE = fails(function() {
      return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"';
    });
    var stringifyWithSymbolsFix = function(it, replacer) {
      var args = arraySlice(arguments);
      var $replacer = getReplacerFunction(replacer);
      if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) return;
      args[1] = function(key, value) {
        if (isCallable($replacer)) value = call($replacer, this, $String(key), value);
        if (!isSymbol(value)) return value;
      };
      return apply($stringify, null, args);
    };
    var fixIllFormed = function(match, offset, string) {
      var prev = charAt(string, offset - 1);
      var next = charAt(string, offset + 1);
      if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) {
        return "\\u" + numberToString(charCodeAt(match, 0), 16);
      }
      return match;
    };
    if ($stringify) {
      $2({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
        // eslint-disable-next-line no-unused-vars -- required for `.length`
        stringify: function stringify(it, replacer, space) {
          var args = arraySlice(arguments);
          var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
          return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result;
        }
      });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js
var require_es_object_get_own_property_symbols = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-symbols.js"() {
    "use strict";
    var $2 = require_export();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var fails = require_fails();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var toObject = require_to_object();
    var FORCED = !NATIVE_SYMBOL || fails(function() {
      getOwnPropertySymbolsModule.f(1);
    });
    $2({ target: "Object", stat: true, forced: FORCED }, {
      getOwnPropertySymbols: function getOwnPropertySymbols(it) {
        var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
        return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.js
var require_es_symbol = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.js"() {
    "use strict";
    require_es_symbol_constructor();
    require_es_symbol_for();
    require_es_symbol_key_for();
    require_es_json_stringify();
    require_es_object_get_own_property_symbols();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.description.js
var require_es_symbol_description = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.description.js"() {
    "use strict";
    var $2 = require_export();
    var DESCRIPTORS = require_descriptors();
    var globalThis2 = require_global_this();
    var uncurryThis = require_function_uncurry_this();
    var hasOwn = require_has_own_property();
    var isCallable = require_is_callable();
    var isPrototypeOf = require_object_is_prototype_of();
    var toString = require_to_string();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var copyConstructorProperties = require_copy_constructor_properties();
    var NativeSymbol = globalThis2.Symbol;
    var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
    if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug
    NativeSymbol().description !== void 0)) {
      EmptyStringDescriptionStore = {};
      SymbolWrapper = function Symbol2() {
        var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]);
        var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description);
        if (description === "") EmptyStringDescriptionStore[result] = true;
        return result;
      };
      copyConstructorProperties(SymbolWrapper, NativeSymbol);
      SymbolWrapper.prototype = SymbolPrototype;
      SymbolPrototype.constructor = SymbolWrapper;
      NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)";
      thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);
      symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);
      regexp = /^Symbol\((.*)\)[^)]+$/;
      replace = uncurryThis("".replace);
      stringSlice = uncurryThis("".slice);
      defineBuiltInAccessor(SymbolPrototype, "description", {
        configurable: true,
        get: function description() {
          var symbol = thisSymbolValue(this);
          if (hasOwn(EmptyStringDescriptionStore, symbol)) return "";
          var string = symbolDescriptiveString(symbol);
          var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1");
          return desc === "" ? void 0 : desc;
        }
      });
      $2({ global: true, constructor: true, forced: true }, {
        Symbol: SymbolWrapper
      });
    }
    var EmptyStringDescriptionStore;
    var SymbolWrapper;
    var NATIVE_SYMBOL;
    var thisSymbolValue;
    var symbolDescriptiveString;
    var regexp;
    var replace;
    var stringSlice;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.iterator.js
var require_es_symbol_iterator = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.iterator.js"() {
    "use strict";
    var defineWellKnownSymbol = require_well_known_symbol_define();
    defineWellKnownSymbol("iterator");
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.to-primitive.js
var require_es_symbol_to_primitive = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.symbol.to-primitive.js"() {
    "use strict";
    var defineWellKnownSymbol = require_well_known_symbol_define();
    var defineSymbolToPrimitive = require_symbol_define_to_primitive();
    defineWellKnownSymbol("toPrimitive");
    defineSymbolToPrimitive();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-method-has-species-support.js
var require_array_method_has_species_support = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-method-has-species-support.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var wellKnownSymbol = require_well_known_symbol();
    var V8_VERSION = require_environment_v8_version();
    var SPECIES = wellKnownSymbol("species");
    module2.exports = function(METHOD_NAME) {
      return V8_VERSION >= 51 || !fails(function() {
        var array = [];
        var constructor = array.constructor = {};
        constructor[SPECIES] = function() {
          return { foo: 1 };
        };
        return array[METHOD_NAME](Boolean).foo !== 1;
      });
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.filter.js
var require_es_array_filter = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.filter.js"() {
    "use strict";
    var $2 = require_export();
    var $filter = require_array_iteration().filter;
    var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
    var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter");
    $2({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
      filter: function filter(callbackfn) {
        return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-method-is-strict.js
var require_array_method_is_strict = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-method-is-strict.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = function(METHOD_NAME, argument) {
      var method = [][METHOD_NAME];
      return !!method && fails(function() {
        method.call(null, argument || function() {
          return 1;
        }, 1);
      });
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-for-each.js
var require_array_for_each = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-for-each.js"(exports, module2) {
    "use strict";
    var $forEach = require_array_iteration().forEach;
    var arrayMethodIsStrict = require_array_method_is_strict();
    var STRICT_METHOD = arrayMethodIsStrict("forEach");
    module2.exports = !STRICT_METHOD ? function forEach(callbackfn) {
      return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
    } : [].forEach;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.for-each.js
var require_es_array_for_each = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.for-each.js"() {
    "use strict";
    var $2 = require_export();
    var forEach = require_array_for_each();
    $2({ target: "Array", proto: true, forced: [].forEach !== forEach }, {
      forEach
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-close.js
var require_iterator_close = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-close.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var anObject = require_an_object();
    var getMethod = require_get_method();
    module2.exports = function(iterator, kind, value) {
      var innerResult, innerError;
      anObject(iterator);
      try {
        innerResult = getMethod(iterator, "return");
        if (!innerResult) {
          if (kind === "throw") throw value;
          return value;
        }
        innerResult = call(innerResult, iterator);
      } catch (error) {
        innerError = true;
        innerResult = error;
      }
      if (kind === "throw") throw value;
      if (innerError) throw innerResult;
      anObject(innerResult);
      return value;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js
var require_call_with_safe_iteration_closing = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/call-with-safe-iteration-closing.js"(exports, module2) {
    "use strict";
    var anObject = require_an_object();
    var iteratorClose = require_iterator_close();
    module2.exports = function(iterator, fn, value, ENTRIES) {
      try {
        return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
      } catch (error) {
        iteratorClose(iterator, "throw", error);
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterators.js
var require_iterators = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterators.js"(exports, module2) {
    "use strict";
    module2.exports = {};
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-array-iterator-method.js
var require_is_array_iterator_method = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-array-iterator-method.js"(exports, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var Iterators = require_iterators();
    var ITERATOR = wellKnownSymbol("iterator");
    var ArrayPrototype = Array.prototype;
    module2.exports = function(it) {
      return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-property.js
var require_create_property = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-property.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var definePropertyModule = require_object_define_property();
    var createPropertyDescriptor = require_create_property_descriptor();
    module2.exports = function(object, key, value) {
      if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));
      else object[key] = value;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-iterator-method.js
var require_get_iterator_method = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-iterator-method.js"(exports, module2) {
    "use strict";
    var classof = require_classof();
    var getMethod = require_get_method();
    var isNullOrUndefined = require_is_null_or_undefined();
    var Iterators = require_iterators();
    var wellKnownSymbol = require_well_known_symbol();
    var ITERATOR = wellKnownSymbol("iterator");
    module2.exports = function(it) {
      if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)];
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-iterator.js
var require_get_iterator = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-iterator.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var tryToString = require_try_to_string();
    var getIteratorMethod = require_get_iterator_method();
    var $TypeError = TypeError;
    module2.exports = function(argument, usingIterator) {
      var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
      if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
      throw new $TypeError(tryToString(argument) + " is not iterable");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-from.js
var require_array_from = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-from.js"(exports, module2) {
    "use strict";
    var bind = require_function_bind_context();
    var call = require_function_call();
    var toObject = require_to_object();
    var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
    var isArrayIteratorMethod = require_is_array_iterator_method();
    var isConstructor = require_is_constructor();
    var lengthOfArrayLike = require_length_of_array_like();
    var createProperty = require_create_property();
    var getIterator = require_get_iterator();
    var getIteratorMethod = require_get_iterator_method();
    var $Array = Array;
    module2.exports = function from(arrayLike) {
      var O = toObject(arrayLike);
      var IS_CONSTRUCTOR = isConstructor(this);
      var argumentsLength = arguments.length;
      var mapfn = argumentsLength > 1 ? arguments[1] : void 0;
      var mapping = mapfn !== void 0;
      if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0);
      var iteratorMethod = getIteratorMethod(O);
      var index = 0;
      var length, result, step, iterator, next, value;
      if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {
        result = IS_CONSTRUCTOR ? new this() : [];
        iterator = getIterator(O, iteratorMethod);
        next = iterator.next;
        for (; !(step = call(next, iterator)).done; index++) {
          value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
          createProperty(result, index, value);
        }
      } else {
        length = lengthOfArrayLike(O);
        result = IS_CONSTRUCTOR ? new this(length) : $Array(length);
        for (; length > index; index++) {
          value = mapping ? mapfn(O[index], index) : O[index];
          createProperty(result, index, value);
        }
      }
      result.length = index;
      return result;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/check-correctness-of-iteration.js
var require_check_correctness_of_iteration = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/check-correctness-of-iteration.js"(exports, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var ITERATOR = wellKnownSymbol("iterator");
    var SAFE_CLOSING = false;
    try {
      called = 0;
      iteratorWithReturn = {
        next: function() {
          return { done: !!called++ };
        },
        "return": function() {
          SAFE_CLOSING = true;
        }
      };
      iteratorWithReturn[ITERATOR] = function() {
        return this;
      };
      Array.from(iteratorWithReturn, function() {
        throw 2;
      });
    } catch (error) {
    }
    var called;
    var iteratorWithReturn;
    module2.exports = function(exec, SKIP_CLOSING) {
      try {
        if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
      } catch (error) {
        return false;
      }
      var ITERATION_SUPPORT = false;
      try {
        var object = {};
        object[ITERATOR] = function() {
          return {
            next: function() {
              return { done: ITERATION_SUPPORT = true };
            }
          };
        };
        exec(object);
      } catch (error) {
      }
      return ITERATION_SUPPORT;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.from.js
var require_es_array_from = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.from.js"() {
    "use strict";
    var $2 = require_export();
    var from = require_array_from();
    var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
    var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) {
      Array.from(iterable);
    });
    $2({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, {
      from
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.index-of.js
var require_es_array_index_of = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.index-of.js"() {
    "use strict";
    var $2 = require_export();
    var uncurryThis = require_function_uncurry_this_clause();
    var $indexOf = require_array_includes().indexOf;
    var arrayMethodIsStrict = require_array_method_is_strict();
    var nativeIndexOf = uncurryThis([].indexOf);
    var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;
    var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict("indexOf");
    $2({ target: "Array", proto: true, forced: FORCED }, {
      indexOf: function indexOf(searchElement) {
        var fromIndex = arguments.length > 1 ? arguments[1] : void 0;
        return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.reverse.js
var require_es_array_reverse = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.reverse.js"() {
    "use strict";
    var $2 = require_export();
    var uncurryThis = require_function_uncurry_this();
    var isArray = require_is_array();
    var nativeReverse = uncurryThis([].reverse);
    var test = [1, 2];
    $2({ target: "Array", proto: true, forced: String(test) === String(test.reverse()) }, {
      reverse: function reverse() {
        if (isArray(this)) this.length = this.length;
        return nativeReverse(this);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.slice.js
var require_es_array_slice = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.slice.js"() {
    "use strict";
    var $2 = require_export();
    var isArray = require_is_array();
    var isConstructor = require_is_constructor();
    var isObject = require_is_object();
    var toAbsoluteIndex = require_to_absolute_index();
    var lengthOfArrayLike = require_length_of_array_like();
    var toIndexedObject = require_to_indexed_object();
    var createProperty = require_create_property();
    var wellKnownSymbol = require_well_known_symbol();
    var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
    var nativeSlice = require_array_slice();
    var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice");
    var SPECIES = wellKnownSymbol("species");
    var $Array = Array;
    var max = Math.max;
    $2({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
      slice: function slice(start, end) {
        var O = toIndexedObject(this);
        var length = lengthOfArrayLike(O);
        var k = toAbsoluteIndex(start, length);
        var fin = toAbsoluteIndex(end === void 0 ? length : end, length);
        var Constructor, result, n;
        if (isArray(O)) {
          Constructor = O.constructor;
          if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {
            Constructor = void 0;
          } else if (isObject(Constructor)) {
            Constructor = Constructor[SPECIES];
            if (Constructor === null) Constructor = void 0;
          }
          if (Constructor === $Array || Constructor === void 0) {
            return nativeSlice(O, k, fin);
          }
        }
        result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0));
        for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
        result.length = n;
        return result;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/date-to-primitive.js
var require_date_to_primitive = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/date-to-primitive.js"(exports, module2) {
    "use strict";
    var anObject = require_an_object();
    var ordinaryToPrimitive = require_ordinary_to_primitive();
    var $TypeError = TypeError;
    module2.exports = function(hint) {
      anObject(this);
      if (hint === "string" || hint === "default") hint = "string";
      else if (hint !== "number") throw new $TypeError("Incorrect hint");
      return ordinaryToPrimitive(this, hint);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.date.to-primitive.js
var require_es_date_to_primitive = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.date.to-primitive.js"() {
    "use strict";
    var hasOwn = require_has_own_property();
    var defineBuiltIn = require_define_built_in();
    var dateToPrimitive = require_date_to_primitive();
    var wellKnownSymbol = require_well_known_symbol();
    var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
    var DatePrototype = Date.prototype;
    if (!hasOwn(DatePrototype, TO_PRIMITIVE)) {
      defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive);
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-iterator-direct.js
var require_get_iterator_direct = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-iterator-direct.js"(exports, module2) {
    "use strict";
    module2.exports = function(obj) {
      return {
        iterator: obj,
        next: obj.next,
        done: false
      };
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-built-ins.js
var require_define_built_ins = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/define-built-ins.js"(exports, module2) {
    "use strict";
    var defineBuiltIn = require_define_built_in();
    module2.exports = function(target, src, options) {
      for (var key in src) defineBuiltIn(target, key, src[key], options);
      return target;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/correct-prototype-getter.js
var require_correct_prototype_getter = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/correct-prototype-getter.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      function F() {
      }
      F.prototype.constructor = null;
      return Object.getPrototypeOf(new F()) !== F.prototype;
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-prototype-of.js
var require_object_get_prototype_of = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-get-prototype-of.js"(exports, module2) {
    "use strict";
    var hasOwn = require_has_own_property();
    var isCallable = require_is_callable();
    var toObject = require_to_object();
    var sharedKey = require_shared_key();
    var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter();
    var IE_PROTO = sharedKey("IE_PROTO");
    var $Object = Object;
    var ObjectPrototype = $Object.prototype;
    module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) {
      var object = toObject(O);
      if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
      var constructor = object.constructor;
      if (isCallable(constructor) && object instanceof constructor) {
        return constructor.prototype;
      }
      return object instanceof $Object ? ObjectPrototype : null;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterators-core.js
var require_iterators_core = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterators-core.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var isCallable = require_is_callable();
    var isObject = require_is_object();
    var create = require_object_create();
    var getPrototypeOf = require_object_get_prototype_of();
    var defineBuiltIn = require_define_built_in();
    var wellKnownSymbol = require_well_known_symbol();
    var IS_PURE = require_is_pure();
    var ITERATOR = wellKnownSymbol("iterator");
    var BUGGY_SAFARI_ITERATORS = false;
    var IteratorPrototype;
    var PrototypeOfArrayIteratorPrototype;
    var arrayIterator;
    if ([].keys) {
      arrayIterator = [].keys();
      if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
      else {
        PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
        if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
      }
    }
    var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() {
      var test = {};
      return IteratorPrototype[ITERATOR].call(test) !== test;
    });
    if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
    else if (IS_PURE) IteratorPrototype = create(IteratorPrototype);
    if (!isCallable(IteratorPrototype[ITERATOR])) {
      defineBuiltIn(IteratorPrototype, ITERATOR, function() {
        return this;
      });
    }
    module2.exports = {
      IteratorPrototype,
      BUGGY_SAFARI_ITERATORS
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-iter-result-object.js
var require_create_iter_result_object = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/create-iter-result-object.js"(exports, module2) {
    "use strict";
    module2.exports = function(value, done) {
      return { value, done };
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-create-proxy.js
var require_iterator_create_proxy = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-create-proxy.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var create = require_object_create();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var defineBuiltIns = require_define_built_ins();
    var wellKnownSymbol = require_well_known_symbol();
    var InternalStateModule = require_internal_state();
    var getMethod = require_get_method();
    var IteratorPrototype = require_iterators_core().IteratorPrototype;
    var createIterResultObject = require_create_iter_result_object();
    var iteratorClose = require_iterator_close();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var ITERATOR_HELPER = "IteratorHelper";
    var WRAP_FOR_VALID_ITERATOR = "WrapForValidIterator";
    var setInternalState = InternalStateModule.set;
    var createIteratorProxyPrototype = function(IS_ITERATOR) {
      var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
      return defineBuiltIns(create(IteratorPrototype), {
        next: function next() {
          var state = getInternalState(this);
          if (IS_ITERATOR) return state.nextHandler();
          if (state.done) return createIterResultObject(void 0, true);
          try {
            var result = state.nextHandler();
            return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
          } catch (error) {
            state.done = true;
            throw error;
          }
        },
        "return": function() {
          var state = getInternalState(this);
          var iterator = state.iterator;
          state.done = true;
          if (IS_ITERATOR) {
            var returnMethod = getMethod(iterator, "return");
            return returnMethod ? call(returnMethod, iterator) : createIterResultObject(void 0, true);
          }
          if (state.inner) try {
            iteratorClose(state.inner.iterator, "normal");
          } catch (error) {
            return iteratorClose(iterator, "throw", error);
          }
          if (iterator) iteratorClose(iterator, "normal");
          return createIterResultObject(void 0, true);
        }
      });
    };
    var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
    var IteratorHelperPrototype = createIteratorProxyPrototype(false);
    createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, "Iterator Helper");
    module2.exports = function(nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
      var IteratorProxy = function Iterator(record, state) {
        if (state) {
          state.iterator = record.iterator;
          state.next = record.next;
        } else state = record;
        state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
        state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
        state.nextHandler = nextHandler;
        state.counter = 0;
        state.done = false;
        setInternalState(this, state);
      };
      IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
      return IteratorProxy;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.filter.js
var require_es_iterator_filter = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.filter.js"() {
    "use strict";
    var $2 = require_export();
    var call = require_function_call();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    var createIteratorProxy = require_iterator_create_proxy();
    var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
    var IS_PURE = require_is_pure();
    var IteratorProxy = createIteratorProxy(function() {
      var iterator = this.iterator;
      var predicate = this.predicate;
      var next = this.next;
      var result, done, value;
      while (true) {
        result = anObject(call(next, iterator));
        done = this.done = !!result.done;
        if (done) return;
        value = result.value;
        if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;
      }
    });
    $2({ target: "Iterator", proto: true, real: true, forced: IS_PURE }, {
      filter: function filter(predicate) {
        anObject(this);
        aCallable(predicate);
        return new IteratorProxy(getIteratorDirect(this), {
          predicate
        });
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterate.js
var require_iterate = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterate.js"(exports, module2) {
    "use strict";
    var bind = require_function_bind_context();
    var call = require_function_call();
    var anObject = require_an_object();
    var tryToString = require_try_to_string();
    var isArrayIteratorMethod = require_is_array_iterator_method();
    var lengthOfArrayLike = require_length_of_array_like();
    var isPrototypeOf = require_object_is_prototype_of();
    var getIterator = require_get_iterator();
    var getIteratorMethod = require_get_iterator_method();
    var iteratorClose = require_iterator_close();
    var $TypeError = TypeError;
    var Result = function(stopped, result) {
      this.stopped = stopped;
      this.result = result;
    };
    var ResultPrototype = Result.prototype;
    module2.exports = function(iterable, unboundFunction, options) {
      var that = options && options.that;
      var AS_ENTRIES = !!(options && options.AS_ENTRIES);
      var IS_RECORD = !!(options && options.IS_RECORD);
      var IS_ITERATOR = !!(options && options.IS_ITERATOR);
      var INTERRUPTED = !!(options && options.INTERRUPTED);
      var fn = bind(unboundFunction, that);
      var iterator, iterFn, index, length, result, next, step;
      var stop = function(condition) {
        if (iterator) iteratorClose(iterator, "normal", condition);
        return new Result(true, condition);
      };
      var callFn = function(value) {
        if (AS_ENTRIES) {
          anObject(value);
          return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
        }
        return INTERRUPTED ? fn(value, stop) : fn(value);
      };
      if (IS_RECORD) {
        iterator = iterable.iterator;
      } else if (IS_ITERATOR) {
        iterator = iterable;
      } else {
        iterFn = getIteratorMethod(iterable);
        if (!iterFn) throw new $TypeError(tryToString(iterable) + " is not iterable");
        if (isArrayIteratorMethod(iterFn)) {
          for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
            result = callFn(iterable[index]);
            if (result && isPrototypeOf(ResultPrototype, result)) return result;
          }
          return new Result(false);
        }
        iterator = getIterator(iterable, iterFn);
      }
      next = IS_RECORD ? iterable.next : iterator.next;
      while (!(step = call(next, iterator)).done) {
        try {
          result = callFn(step.value);
        } catch (error) {
          iteratorClose(iterator, "throw", error);
        }
        if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) return result;
      }
      return new Result(false);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.for-each.js
var require_es_iterator_for_each = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.for-each.js"() {
    "use strict";
    var $2 = require_export();
    var iterate = require_iterate();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    $2({ target: "Iterator", proto: true, real: true }, {
      forEach: function forEach(fn) {
        anObject(this);
        aCallable(fn);
        var record = getIteratorDirect(this);
        var counter = 0;
        iterate(record, function(value) {
          fn(value, counter++);
        }, { IS_RECORD: true });
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-buffer-non-extensible.js
var require_array_buffer_non_extensible = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-buffer-non-extensible.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = fails(function() {
      if (typeof ArrayBuffer == "function") {
        var buffer = new ArrayBuffer(8);
        if (Object.isExtensible(buffer)) Object.defineProperty(buffer, "a", { value: 8 });
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-is-extensible.js
var require_object_is_extensible = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-is-extensible.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var isObject = require_is_object();
    var classof = require_classof_raw();
    var ARRAY_BUFFER_NON_EXTENSIBLE = require_array_buffer_non_extensible();
    var $isExtensible = Object.isExtensible;
    var FAILS_ON_PRIMITIVES = fails(function() {
      $isExtensible(1);
    });
    module2.exports = FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE ? function isExtensible(it) {
      if (!isObject(it)) return false;
      if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === "ArrayBuffer") return false;
      return $isExtensible ? $isExtensible(it) : true;
    } : $isExtensible;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/freezing.js
var require_freezing = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/freezing.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      return Object.isExtensible(Object.preventExtensions({}));
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/internal-metadata.js
var require_internal_metadata = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/internal-metadata.js"(exports, module2) {
    "use strict";
    var $2 = require_export();
    var uncurryThis = require_function_uncurry_this();
    var hiddenKeys = require_hidden_keys();
    var isObject = require_is_object();
    var hasOwn = require_has_own_property();
    var defineProperty = require_object_define_property().f;
    var getOwnPropertyNamesModule = require_object_get_own_property_names();
    var getOwnPropertyNamesExternalModule = require_object_get_own_property_names_external();
    var isExtensible = require_object_is_extensible();
    var uid = require_uid();
    var FREEZING = require_freezing();
    var REQUIRED = false;
    var METADATA = uid("meta");
    var id = 0;
    var setMetadata = function(it) {
      defineProperty(it, METADATA, { value: {
        objectID: "O" + id++,
        // object ID
        weakData: {}
        // weak collections IDs
      } });
    };
    var fastKey = function(it, create) {
      if (!isObject(it)) return typeof it == "symbol" ? it : (typeof it == "string" ? "S" : "P") + it;
      if (!hasOwn(it, METADATA)) {
        if (!isExtensible(it)) return "F";
        if (!create) return "E";
        setMetadata(it);
      }
      return it[METADATA].objectID;
    };
    var getWeakData = function(it, create) {
      if (!hasOwn(it, METADATA)) {
        if (!isExtensible(it)) return true;
        if (!create) return false;
        setMetadata(it);
      }
      return it[METADATA].weakData;
    };
    var onFreeze = function(it) {
      if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
      return it;
    };
    var enable = function() {
      meta.enable = function() {
      };
      REQUIRED = true;
      var getOwnPropertyNames = getOwnPropertyNamesModule.f;
      var splice = uncurryThis([].splice);
      var test = {};
      test[METADATA] = 1;
      if (getOwnPropertyNames(test).length) {
        getOwnPropertyNamesModule.f = function(it) {
          var result = getOwnPropertyNames(it);
          for (var i = 0, length = result.length; i < length; i++) {
            if (result[i] === METADATA) {
              splice(result, i, 1);
              break;
            }
          }
          return result;
        };
        $2({ target: "Object", stat: true, forced: true }, {
          getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
        });
      }
    };
    var meta = module2.exports = {
      enable,
      fastKey,
      getWeakData,
      onFreeze
    };
    hiddenKeys[METADATA] = true;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/an-instance.js
var require_an_instance = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/an-instance.js"(exports, module2) {
    "use strict";
    var isPrototypeOf = require_object_is_prototype_of();
    var $TypeError = TypeError;
    module2.exports = function(it, Prototype) {
      if (isPrototypeOf(Prototype, it)) return it;
      throw new $TypeError("Incorrect invocation");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-uncurry-this-accessor.js
var require_function_uncurry_this_accessor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var aCallable = require_a_callable();
    module2.exports = function(object, key, method) {
      try {
        return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
      } catch (error) {
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-possible-prototype.js
var require_is_possible_prototype = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-possible-prototype.js"(exports, module2) {
    "use strict";
    var isObject = require_is_object();
    module2.exports = function(argument) {
      return isObject(argument) || argument === null;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/a-possible-prototype.js
var require_a_possible_prototype = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/a-possible-prototype.js"(exports, module2) {
    "use strict";
    var isPossiblePrototype = require_is_possible_prototype();
    var $String = String;
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isPossiblePrototype(argument)) return argument;
      throw new $TypeError("Can't set " + $String(argument) + " as a prototype");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-set-prototype-of.js
var require_object_set_prototype_of = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-set-prototype-of.js"(exports, module2) {
    "use strict";
    var uncurryThisAccessor = require_function_uncurry_this_accessor();
    var isObject = require_is_object();
    var requireObjectCoercible = require_require_object_coercible();
    var aPossiblePrototype = require_a_possible_prototype();
    module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() {
      var CORRECT_SETTER = false;
      var test = {};
      var setter;
      try {
        setter = uncurryThisAccessor(Object.prototype, "__proto__", "set");
        setter(test, []);
        CORRECT_SETTER = test instanceof Array;
      } catch (error) {
      }
      return function setPrototypeOf(O, proto) {
        requireObjectCoercible(O);
        aPossiblePrototype(proto);
        if (!isObject(O)) return O;
        if (CORRECT_SETTER) setter(O, proto);
        else O.__proto__ = proto;
        return O;
      };
    }() : void 0);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/inherit-if-required.js
var require_inherit_if_required = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/inherit-if-required.js"(exports, module2) {
    "use strict";
    var isCallable = require_is_callable();
    var isObject = require_is_object();
    var setPrototypeOf = require_object_set_prototype_of();
    module2.exports = function($this, dummy, Wrapper) {
      var NewTarget, NewTargetPrototype;
      if (
        // it can work only with native `setPrototypeOf`
        setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
        isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype
      ) setPrototypeOf($this, NewTargetPrototype);
      return $this;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/collection.js
var require_collection = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/collection.js"(exports, module2) {
    "use strict";
    var $2 = require_export();
    var globalThis2 = require_global_this();
    var uncurryThis = require_function_uncurry_this();
    var isForced = require_is_forced();
    var defineBuiltIn = require_define_built_in();
    var InternalMetadataModule = require_internal_metadata();
    var iterate = require_iterate();
    var anInstance = require_an_instance();
    var isCallable = require_is_callable();
    var isNullOrUndefined = require_is_null_or_undefined();
    var isObject = require_is_object();
    var fails = require_fails();
    var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
    var setToStringTag = require_set_to_string_tag();
    var inheritIfRequired = require_inherit_if_required();
    module2.exports = function(CONSTRUCTOR_NAME, wrapper, common) {
      var IS_MAP = CONSTRUCTOR_NAME.indexOf("Map") !== -1;
      var IS_WEAK = CONSTRUCTOR_NAME.indexOf("Weak") !== -1;
      var ADDER = IS_MAP ? "set" : "add";
      var NativeConstructor = globalThis2[CONSTRUCTOR_NAME];
      var NativePrototype = NativeConstructor && NativeConstructor.prototype;
      var Constructor = NativeConstructor;
      var exported = {};
      var fixMethod = function(KEY) {
        var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);
        defineBuiltIn(
          NativePrototype,
          KEY,
          KEY === "add" ? function add(value) {
            uncurriedNativeMethod(this, value === 0 ? 0 : value);
            return this;
          } : KEY === "delete" ? function(key) {
            return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
          } : KEY === "get" ? function get(key) {
            return IS_WEAK && !isObject(key) ? void 0 : uncurriedNativeMethod(this, key === 0 ? 0 : key);
          } : KEY === "has" ? function has(key) {
            return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
          } : function set(key, value) {
            uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
            return this;
          }
        );
      };
      var REPLACE = isForced(
        CONSTRUCTOR_NAME,
        !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function() {
          new NativeConstructor().entries().next();
        }))
      );
      if (REPLACE) {
        Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
        InternalMetadataModule.enable();
      } else if (isForced(CONSTRUCTOR_NAME, true)) {
        var instance = new Constructor();
        var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance;
        var THROWS_ON_PRIMITIVES = fails(function() {
          instance.has(1);
        });
        var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function(iterable) {
          new NativeConstructor(iterable);
        });
        var BUGGY_ZERO = !IS_WEAK && fails(function() {
          var $instance = new NativeConstructor();
          var index = 5;
          while (index--) $instance[ADDER](index, index);
          return !$instance.has(-0);
        });
        if (!ACCEPT_ITERABLES) {
          Constructor = wrapper(function(dummy, iterable) {
            anInstance(dummy, NativePrototype);
            var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
            if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that, AS_ENTRIES: IS_MAP });
            return that;
          });
          Constructor.prototype = NativePrototype;
          NativePrototype.constructor = Constructor;
        }
        if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
          fixMethod("delete");
          fixMethod("has");
          IS_MAP && fixMethod("get");
        }
        if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
        if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
      }
      exported[CONSTRUCTOR_NAME] = Constructor;
      $2({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported);
      setToStringTag(Constructor, CONSTRUCTOR_NAME);
      if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
      return Constructor;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-create-constructor.js
var require_iterator_create_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-create-constructor.js"(exports, module2) {
    "use strict";
    var IteratorPrototype = require_iterators_core().IteratorPrototype;
    var create = require_object_create();
    var createPropertyDescriptor = require_create_property_descriptor();
    var setToStringTag = require_set_to_string_tag();
    var Iterators = require_iterators();
    var returnThis = function() {
      return this;
    };
    module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
      var TO_STRING_TAG = NAME + " Iterator";
      IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });
      setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
      Iterators[TO_STRING_TAG] = returnThis;
      return IteratorConstructor;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-define.js
var require_iterator_define = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/iterator-define.js"(exports, module2) {
    "use strict";
    var $2 = require_export();
    var call = require_function_call();
    var IS_PURE = require_is_pure();
    var FunctionName = require_function_name();
    var isCallable = require_is_callable();
    var createIteratorConstructor = require_iterator_create_constructor();
    var getPrototypeOf = require_object_get_prototype_of();
    var setPrototypeOf = require_object_set_prototype_of();
    var setToStringTag = require_set_to_string_tag();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var defineBuiltIn = require_define_built_in();
    var wellKnownSymbol = require_well_known_symbol();
    var Iterators = require_iterators();
    var IteratorsCore = require_iterators_core();
    var PROPER_FUNCTION_NAME = FunctionName.PROPER;
    var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
    var IteratorPrototype = IteratorsCore.IteratorPrototype;
    var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
    var ITERATOR = wellKnownSymbol("iterator");
    var KEYS = "keys";
    var VALUES = "values";
    var ENTRIES = "entries";
    var returnThis = function() {
      return this;
    };
    module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
      createIteratorConstructor(IteratorConstructor, NAME, next);
      var getIterationMethod = function(KIND) {
        if (KIND === DEFAULT && defaultIterator) return defaultIterator;
        if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];
        switch (KIND) {
          case KEYS:
            return function keys() {
              return new IteratorConstructor(this, KIND);
            };
          case VALUES:
            return function values() {
              return new IteratorConstructor(this, KIND);
            };
          case ENTRIES:
            return function entries() {
              return new IteratorConstructor(this, KIND);
            };
        }
        return function() {
          return new IteratorConstructor(this);
        };
      };
      var TO_STRING_TAG = NAME + " Iterator";
      var INCORRECT_VALUES_NAME = false;
      var IterablePrototype = Iterable.prototype;
      var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT];
      var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
      var anyNativeIterator = NAME === "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator;
      var CurrentIteratorPrototype, methods, KEY;
      if (anyNativeIterator) {
        CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
        if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
          if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
            if (setPrototypeOf) {
              setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
            } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
              defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);
            }
          }
          setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
          if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
        }
      }
      if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
        if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
          createNonEnumerableProperty(IterablePrototype, "name", VALUES);
        } else {
          INCORRECT_VALUES_NAME = true;
          defaultIterator = function values() {
            return call(nativeIterator, this);
          };
        }
      }
      if (DEFAULT) {
        methods = {
          values: getIterationMethod(VALUES),
          keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
          entries: getIterationMethod(ENTRIES)
        };
        if (FORCED) for (KEY in methods) {
          if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
            defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
          }
        }
        else $2({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
      }
      if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
        defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
      }
      Iterators[NAME] = defaultIterator;
      return methods;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/set-species.js
var require_set_species = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/set-species.js"(exports, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var wellKnownSymbol = require_well_known_symbol();
    var DESCRIPTORS = require_descriptors();
    var SPECIES = wellKnownSymbol("species");
    module2.exports = function(CONSTRUCTOR_NAME) {
      var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
      if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
        defineBuiltInAccessor(Constructor, SPECIES, {
          configurable: true,
          get: function() {
            return this;
          }
        });
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/collection-strong.js
var require_collection_strong = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/collection-strong.js"(exports, module2) {
    "use strict";
    var create = require_object_create();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var defineBuiltIns = require_define_built_ins();
    var bind = require_function_bind_context();
    var anInstance = require_an_instance();
    var isNullOrUndefined = require_is_null_or_undefined();
    var iterate = require_iterate();
    var defineIterator = require_iterator_define();
    var createIterResultObject = require_create_iter_result_object();
    var setSpecies = require_set_species();
    var DESCRIPTORS = require_descriptors();
    var fastKey = require_internal_metadata().fastKey;
    var InternalStateModule = require_internal_state();
    var setInternalState = InternalStateModule.set;
    var internalStateGetterFor = InternalStateModule.getterFor;
    module2.exports = {
      getConstructor: function(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
        var Constructor = wrapper(function(that, iterable) {
          anInstance(that, Prototype);
          setInternalState(that, {
            type: CONSTRUCTOR_NAME,
            index: create(null),
            first: null,
            last: null,
            size: 0
          });
          if (!DESCRIPTORS) that.size = 0;
          if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that, AS_ENTRIES: IS_MAP });
        });
        var Prototype = Constructor.prototype;
        var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
        var define2 = function(that, key, value) {
          var state = getInternalState(that);
          var entry = getEntry(that, key);
          var previous, index;
          if (entry) {
            entry.value = value;
          } else {
            state.last = entry = {
              index: index = fastKey(key, true),
              key,
              value,
              previous: previous = state.last,
              next: null,
              removed: false
            };
            if (!state.first) state.first = entry;
            if (previous) previous.next = entry;
            if (DESCRIPTORS) state.size++;
            else that.size++;
            if (index !== "F") state.index[index] = entry;
          }
          return that;
        };
        var getEntry = function(that, key) {
          var state = getInternalState(that);
          var index = fastKey(key);
          var entry;
          if (index !== "F") return state.index[index];
          for (entry = state.first; entry; entry = entry.next) {
            if (entry.key === key) return entry;
          }
        };
        defineBuiltIns(Prototype, {
          // `{ Map, Set }.prototype.clear()` methods
          // https://tc39.es/ecma262/#sec-map.prototype.clear
          // https://tc39.es/ecma262/#sec-set.prototype.clear
          clear: function clear() {
            var that = this;
            var state = getInternalState(that);
            var entry = state.first;
            while (entry) {
              entry.removed = true;
              if (entry.previous) entry.previous = entry.previous.next = null;
              entry = entry.next;
            }
            state.first = state.last = null;
            state.index = create(null);
            if (DESCRIPTORS) state.size = 0;
            else that.size = 0;
          },
          // `{ Map, Set }.prototype.delete(key)` methods
          // https://tc39.es/ecma262/#sec-map.prototype.delete
          // https://tc39.es/ecma262/#sec-set.prototype.delete
          "delete": function(key) {
            var that = this;
            var state = getInternalState(that);
            var entry = getEntry(that, key);
            if (entry) {
              var next = entry.next;
              var prev = entry.previous;
              delete state.index[entry.index];
              entry.removed = true;
              if (prev) prev.next = next;
              if (next) next.previous = prev;
              if (state.first === entry) state.first = next;
              if (state.last === entry) state.last = prev;
              if (DESCRIPTORS) state.size--;
              else that.size--;
            }
            return !!entry;
          },
          // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods
          // https://tc39.es/ecma262/#sec-map.prototype.foreach
          // https://tc39.es/ecma262/#sec-set.prototype.foreach
          forEach: function forEach(callbackfn) {
            var state = getInternalState(this);
            var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : void 0);
            var entry;
            while (entry = entry ? entry.next : state.first) {
              boundFunction(entry.value, entry.key, this);
              while (entry && entry.removed) entry = entry.previous;
            }
          },
          // `{ Map, Set}.prototype.has(key)` methods
          // https://tc39.es/ecma262/#sec-map.prototype.has
          // https://tc39.es/ecma262/#sec-set.prototype.has
          has: function has(key) {
            return !!getEntry(this, key);
          }
        });
        defineBuiltIns(Prototype, IS_MAP ? {
          // `Map.prototype.get(key)` method
          // https://tc39.es/ecma262/#sec-map.prototype.get
          get: function get(key) {
            var entry = getEntry(this, key);
            return entry && entry.value;
          },
          // `Map.prototype.set(key, value)` method
          // https://tc39.es/ecma262/#sec-map.prototype.set
          set: function set(key, value) {
            return define2(this, key === 0 ? 0 : key, value);
          }
        } : {
          // `Set.prototype.add(value)` method
          // https://tc39.es/ecma262/#sec-set.prototype.add
          add: function add(value) {
            return define2(this, value = value === 0 ? 0 : value, value);
          }
        });
        if (DESCRIPTORS) defineBuiltInAccessor(Prototype, "size", {
          configurable: true,
          get: function() {
            return getInternalState(this).size;
          }
        });
        return Constructor;
      },
      setStrong: function(Constructor, CONSTRUCTOR_NAME, IS_MAP) {
        var ITERATOR_NAME = CONSTRUCTOR_NAME + " Iterator";
        var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
        var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
        defineIterator(Constructor, CONSTRUCTOR_NAME, function(iterated, kind) {
          setInternalState(this, {
            type: ITERATOR_NAME,
            target: iterated,
            state: getInternalCollectionState(iterated),
            kind,
            last: null
          });
        }, function() {
          var state = getInternalIteratorState(this);
          var kind = state.kind;
          var entry = state.last;
          while (entry && entry.removed) entry = entry.previous;
          if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
            state.target = null;
            return createIterResultObject(void 0, true);
          }
          if (kind === "keys") return createIterResultObject(entry.key, false);
          if (kind === "values") return createIterResultObject(entry.value, false);
          return createIterResultObject([entry.key, entry.value], false);
        }, IS_MAP ? "entries" : "values", !IS_MAP, true);
        setSpecies(CONSTRUCTOR_NAME);
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.map.constructor.js
var require_es_map_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.map.constructor.js"() {
    "use strict";
    var collection = require_collection();
    var collectionStrong = require_collection_strong();
    collection("Map", function(init) {
      return function Map2() {
        return init(this, arguments.length ? arguments[0] : void 0);
      };
    }, collectionStrong);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.map.js
var require_es_map = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.map.js"() {
    "use strict";
    require_es_map_constructor();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/this-number-value.js
var require_this_number_value = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/this-number-value.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    module2.exports = uncurryThis(1 .valueOf);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/whitespaces.js
var require_whitespaces = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/whitespaces.js"(exports, module2) {
    "use strict";
    module2.exports = "	\n\v\f\r                 \u2028\u2029\uFEFF";
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-trim.js
var require_string_trim = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-trim.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var requireObjectCoercible = require_require_object_coercible();
    var toString = require_to_string();
    var whitespaces = require_whitespaces();
    var replace = uncurryThis("".replace);
    var ltrim = RegExp("^[" + whitespaces + "]+");
    var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$");
    var createMethod = function(TYPE) {
      return function($this) {
        var string = toString(requireObjectCoercible($this));
        if (TYPE & 1) string = replace(string, ltrim, "");
        if (TYPE & 2) string = replace(string, rtrim, "$1");
        return string;
      };
    };
    module2.exports = {
      // `String.prototype.{ trimLeft, trimStart }` methods
      // https://tc39.es/ecma262/#sec-string.prototype.trimstart
      start: createMethod(1),
      // `String.prototype.{ trimRight, trimEnd }` methods
      // https://tc39.es/ecma262/#sec-string.prototype.trimend
      end: createMethod(2),
      // `String.prototype.trim` method
      // https://tc39.es/ecma262/#sec-string.prototype.trim
      trim: createMethod(3)
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.number.constructor.js
var require_es_number_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.number.constructor.js"() {
    "use strict";
    var $2 = require_export();
    var IS_PURE = require_is_pure();
    var DESCRIPTORS = require_descriptors();
    var globalThis2 = require_global_this();
    var path = require_path();
    var uncurryThis = require_function_uncurry_this();
    var isForced = require_is_forced();
    var hasOwn = require_has_own_property();
    var inheritIfRequired = require_inherit_if_required();
    var isPrototypeOf = require_object_is_prototype_of();
    var isSymbol = require_is_symbol();
    var toPrimitive = require_to_primitive();
    var fails = require_fails();
    var getOwnPropertyNames = require_object_get_own_property_names().f;
    var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var defineProperty = require_object_define_property().f;
    var thisNumberValue = require_this_number_value();
    var trim = require_string_trim().trim;
    var NUMBER = "Number";
    var NativeNumber = globalThis2[NUMBER];
    var PureNumberNamespace = path[NUMBER];
    var NumberPrototype = NativeNumber.prototype;
    var TypeError2 = globalThis2.TypeError;
    var stringSlice = uncurryThis("".slice);
    var charCodeAt = uncurryThis("".charCodeAt);
    var toNumeric = function(value) {
      var primValue = toPrimitive(value, "number");
      return typeof primValue == "bigint" ? primValue : toNumber(primValue);
    };
    var toNumber = function(argument) {
      var it = toPrimitive(argument, "number");
      var first, third, radix, maxCode, digits, length, index, code;
      if (isSymbol(it)) throw new TypeError2("Cannot convert a Symbol value to a number");
      if (typeof it == "string" && it.length > 2) {
        it = trim(it);
        first = charCodeAt(it, 0);
        if (first === 43 || first === 45) {
          third = charCodeAt(it, 2);
          if (third === 88 || third === 120) return NaN;
        } else if (first === 48) {
          switch (charCodeAt(it, 1)) {
            // fast equal of /^0b[01]+$/i
            case 66:
            case 98:
              radix = 2;
              maxCode = 49;
              break;
            // fast equal of /^0o[0-7]+$/i
            case 79:
            case 111:
              radix = 8;
              maxCode = 55;
              break;
            default:
              return +it;
          }
          digits = stringSlice(it, 2);
          length = digits.length;
          for (index = 0; index < length; index++) {
            code = charCodeAt(digits, index);
            if (code < 48 || code > maxCode) return NaN;
          }
          return parseInt(digits, radix);
        }
      }
      return +it;
    };
    var FORCED = isForced(NUMBER, !NativeNumber(" 0o1") || !NativeNumber("0b1") || NativeNumber("+0x1"));
    var calledWithNew = function(dummy) {
      return isPrototypeOf(NumberPrototype, dummy) && fails(function() {
        thisNumberValue(dummy);
      });
    };
    var NumberWrapper = function Number2(value) {
      var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
      return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n;
    };
    NumberWrapper.prototype = NumberPrototype;
    if (FORCED && !IS_PURE) NumberPrototype.constructor = NumberWrapper;
    $2({ global: true, constructor: true, wrap: true, forced: FORCED }, {
      Number: NumberWrapper
    });
    var copyConstructorProperties = function(target, source) {
      for (var keys = DESCRIPTORS ? getOwnPropertyNames(source) : (
        // ES3:
        "MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(",")
      ), j = 0, key; keys.length > j; j++) {
        if (hasOwn(source, key = keys[j]) && !hasOwn(target, key)) {
          defineProperty(target, key, getOwnPropertyDescriptor(source, key));
        }
      }
    };
    if (IS_PURE && PureNumberNamespace) copyConstructorProperties(path[NUMBER], PureNumberNamespace);
    if (FORCED || IS_PURE) copyConstructorProperties(path[NUMBER], NativeNumber);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.define-properties.js
var require_es_object_define_properties = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.define-properties.js"() {
    "use strict";
    var $2 = require_export();
    var DESCRIPTORS = require_descriptors();
    var defineProperties = require_object_define_properties().f;
    $2({ target: "Object", stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {
      defineProperties
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.define-property.js
var require_es_object_define_property = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.define-property.js"() {
    "use strict";
    var $2 = require_export();
    var DESCRIPTORS = require_descriptors();
    var defineProperty = require_object_define_property().f;
    $2({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {
      defineProperty
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js
var require_es_object_get_own_property_descriptor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-descriptor.js"() {
    "use strict";
    var $2 = require_export();
    var fails = require_fails();
    var toIndexedObject = require_to_indexed_object();
    var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var DESCRIPTORS = require_descriptors();
    var FORCED = !DESCRIPTORS || fails(function() {
      nativeGetOwnPropertyDescriptor(1);
    });
    $2({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, {
      getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
        return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-descriptors.js
var require_es_object_get_own_property_descriptors = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-descriptors.js"() {
    "use strict";
    var $2 = require_export();
    var DESCRIPTORS = require_descriptors();
    var ownKeys2 = require_own_keys();
    var toIndexedObject = require_to_indexed_object();
    var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
    var createProperty = require_create_property();
    $2({ target: "Object", stat: true, sham: !DESCRIPTORS }, {
      getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
        var O = toIndexedObject(object);
        var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
        var keys = ownKeys2(O);
        var result = {};
        var index = 0;
        var key, descriptor;
        while (keys.length > index) {
          descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);
          if (descriptor !== void 0) createProperty(result, key, descriptor);
        }
        return result;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-prototype-of.js
var require_es_object_get_prototype_of = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-prototype-of.js"() {
    "use strict";
    var $2 = require_export();
    var fails = require_fails();
    var toObject = require_to_object();
    var nativeGetPrototypeOf = require_object_get_prototype_of();
    var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter();
    var FAILS_ON_PRIMITIVES = fails(function() {
      nativeGetPrototypeOf(1);
    });
    $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {
      getPrototypeOf: function getPrototypeOf(it) {
        return nativeGetPrototypeOf(toObject(it));
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.set-prototype-of.js
var require_es_object_set_prototype_of = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.set-prototype-of.js"() {
    "use strict";
    var $2 = require_export();
    var setPrototypeOf = require_object_set_prototype_of();
    $2({ target: "Object", stat: true }, {
      setPrototypeOf
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-bind.js
var require_function_bind = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/function-bind.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var aCallable = require_a_callable();
    var isObject = require_is_object();
    var hasOwn = require_has_own_property();
    var arraySlice = require_array_slice();
    var NATIVE_BIND = require_function_bind_native();
    var $Function = Function;
    var concat = uncurryThis([].concat);
    var join = uncurryThis([].join);
    var factories = {};
    var construct = function(C, argsLength, args) {
      if (!hasOwn(factories, argsLength)) {
        var list = [];
        var i = 0;
        for (; i < argsLength; i++) list[i] = "a[" + i + "]";
        factories[argsLength] = $Function("C,a", "return new C(" + join(list, ",") + ")");
      }
      return factories[argsLength](C, args);
    };
    module2.exports = NATIVE_BIND ? $Function.bind : function bind(that) {
      var F = aCallable(this);
      var Prototype = F.prototype;
      var partArgs = arraySlice(arguments, 1);
      var boundFunction = function bound() {
        var args = concat(partArgs, arraySlice(arguments));
        return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);
      };
      if (isObject(Prototype)) boundFunction.prototype = Prototype;
      return boundFunction;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/a-constructor.js
var require_a_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/a-constructor.js"(exports, module2) {
    "use strict";
    var isConstructor = require_is_constructor();
    var tryToString = require_try_to_string();
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isConstructor(argument)) return argument;
      throw new $TypeError(tryToString(argument) + " is not a constructor");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.reflect.construct.js
var require_es_reflect_construct = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.reflect.construct.js"() {
    "use strict";
    var $2 = require_export();
    var getBuiltIn = require_get_built_in();
    var apply = require_function_apply();
    var bind = require_function_bind();
    var aConstructor = require_a_constructor();
    var anObject = require_an_object();
    var isObject = require_is_object();
    var create = require_object_create();
    var fails = require_fails();
    var nativeConstruct = getBuiltIn("Reflect", "construct");
    var ObjectPrototype = Object.prototype;
    var push = [].push;
    var NEW_TARGET_BUG = fails(function() {
      function F() {
      }
      return !(nativeConstruct(function() {
      }, [], F) instanceof F);
    });
    var ARGS_BUG = !fails(function() {
      nativeConstruct(function() {
      });
    });
    var FORCED = NEW_TARGET_BUG || ARGS_BUG;
    $2({ target: "Reflect", stat: true, forced: FORCED, sham: FORCED }, {
      construct: function construct(Target, args) {
        aConstructor(Target);
        anObject(args);
        var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
        if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
        if (Target === newTarget) {
          switch (args.length) {
            case 0:
              return new Target();
            case 1:
              return new Target(args[0]);
            case 2:
              return new Target(args[0], args[1]);
            case 3:
              return new Target(args[0], args[1], args[2]);
            case 4:
              return new Target(args[0], args[1], args[2], args[3]);
          }
          var $args = [null];
          apply(push, $args, args);
          return new (apply(bind, Target, $args))();
        }
        var proto = newTarget.prototype;
        var instance = create(isObject(proto) ? proto : ObjectPrototype);
        var result = apply(Target, instance, args);
        return isObject(result) ? result : instance;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-flags.js
var require_regexp_flags = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-flags.js"(exports, module2) {
    "use strict";
    var anObject = require_an_object();
    module2.exports = function() {
      var that = anObject(this);
      var result = "";
      if (that.hasIndices) result += "d";
      if (that.global) result += "g";
      if (that.ignoreCase) result += "i";
      if (that.multiline) result += "m";
      if (that.dotAll) result += "s";
      if (that.unicode) result += "u";
      if (that.unicodeSets) result += "v";
      if (that.sticky) result += "y";
      return result;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-sticky-helpers.js
var require_regexp_sticky_helpers = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-sticky-helpers.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $RegExp = globalThis2.RegExp;
    var UNSUPPORTED_Y = fails(function() {
      var re = $RegExp("a", "y");
      re.lastIndex = 2;
      return re.exec("abcd") !== null;
    });
    var MISSED_STICKY = UNSUPPORTED_Y || fails(function() {
      return !$RegExp("a", "y").sticky;
    });
    var BROKEN_CARET = UNSUPPORTED_Y || fails(function() {
      var re = $RegExp("^r", "gy");
      re.lastIndex = 2;
      return re.exec("str") !== null;
    });
    module2.exports = {
      BROKEN_CARET,
      MISSED_STICKY,
      UNSUPPORTED_Y
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js
var require_regexp_unsupported_dot_all = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-unsupported-dot-all.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $RegExp = globalThis2.RegExp;
    module2.exports = fails(function() {
      var re = $RegExp(".", "s");
      return !(re.dotAll && re.test("\n") && re.flags === "s");
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-unsupported-ncg.js
var require_regexp_unsupported_ncg = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-unsupported-ncg.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $RegExp = globalThis2.RegExp;
    module2.exports = fails(function() {
      var re = $RegExp("(?<a>b)", "g");
      return re.exec("b").groups.a !== "b" || "b".replace(re, "$<a>c") !== "bc";
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-exec.js
var require_regexp_exec = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-exec.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var toString = require_to_string();
    var regexpFlags = require_regexp_flags();
    var stickyHelpers = require_regexp_sticky_helpers();
    var shared = require_shared();
    var create = require_object_create();
    var getInternalState = require_internal_state().get;
    var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
    var UNSUPPORTED_NCG = require_regexp_unsupported_ncg();
    var nativeReplace = shared("native-string-replace", String.prototype.replace);
    var nativeExec = RegExp.prototype.exec;
    var patchedExec = nativeExec;
    var charAt = uncurryThis("".charAt);
    var indexOf = uncurryThis("".indexOf);
    var replace = uncurryThis("".replace);
    var stringSlice = uncurryThis("".slice);
    var UPDATES_LAST_INDEX_WRONG = function() {
      var re1 = /a/;
      var re2 = /b*/g;
      call(nativeExec, re1, "a");
      call(nativeExec, re2, "a");
      return re1.lastIndex !== 0 || re2.lastIndex !== 0;
    }();
    var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;
    var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0;
    var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
    if (PATCH) {
      patchedExec = function exec(string) {
        var re = this;
        var state = getInternalState(re);
        var str = toString(string);
        var raw = state.raw;
        var result, reCopy, lastIndex, match, i, object, group;
        if (raw) {
          raw.lastIndex = re.lastIndex;
          result = call(patchedExec, raw, str);
          re.lastIndex = raw.lastIndex;
          return result;
        }
        var groups = state.groups;
        var sticky = UNSUPPORTED_Y && re.sticky;
        var flags = call(regexpFlags, re);
        var source = re.source;
        var charsAdded = 0;
        var strCopy = str;
        if (sticky) {
          flags = replace(flags, "y", "");
          if (indexOf(flags, "g") === -1) {
            flags += "g";
          }
          strCopy = stringSlice(str, re.lastIndex);
          if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) {
            source = "(?: " + source + ")";
            strCopy = " " + strCopy;
            charsAdded++;
          }
          reCopy = new RegExp("^(?:" + source + ")", flags);
        }
        if (NPCG_INCLUDED) {
          reCopy = new RegExp("^" + source + "$(?!\\s)", flags);
        }
        if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
        match = call(nativeExec, sticky ? reCopy : re, strCopy);
        if (sticky) {
          if (match) {
            match.input = stringSlice(match.input, charsAdded);
            match[0] = stringSlice(match[0], charsAdded);
            match.index = re.lastIndex;
            re.lastIndex += match[0].length;
          } else re.lastIndex = 0;
        } else if (UPDATES_LAST_INDEX_WRONG && match) {
          re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
        }
        if (NPCG_INCLUDED && match && match.length > 1) {
          call(nativeReplace, match[0], reCopy, function() {
            for (i = 1; i < arguments.length - 2; i++) {
              if (arguments[i] === void 0) match[i] = void 0;
            }
          });
        }
        if (match && groups) {
          match.groups = object = create(null);
          for (i = 0; i < groups.length; i++) {
            group = groups[i];
            object[group[0]] = match[group[1]];
          }
        }
        return match;
      };
    }
    module2.exports = patchedExec;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.exec.js
var require_es_regexp_exec = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.exec.js"() {
    "use strict";
    var $2 = require_export();
    var exec = require_regexp_exec();
    $2({ target: "RegExp", proto: true, forced: /./.exec !== exec }, {
      exec
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.test.js
var require_es_regexp_test = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.test.js"() {
    "use strict";
    require_es_regexp_exec();
    var $2 = require_export();
    var call = require_function_call();
    var isCallable = require_is_callable();
    var anObject = require_an_object();
    var toString = require_to_string();
    var DELEGATES_TO_EXEC = function() {
      var execCalled = false;
      var re = /[ac]/;
      re.exec = function() {
        execCalled = true;
        return /./.exec.apply(this, arguments);
      };
      return re.test("abc") === true && execCalled;
    }();
    var nativeTest = /./.test;
    $2({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, {
      test: function(S) {
        var R = anObject(this);
        var string = toString(S);
        var exec = R.exec;
        if (!isCallable(exec)) return call(nativeTest, R, string);
        var result = call(exec, R, string);
        if (result === null) return false;
        anObject(result);
        return true;
      }
    });
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js
var _DOMTokenList, DOMTokenList_default;
var init_DOMTokenList = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js"() {
    _DOMTokenList = function() {
      var dpSupport = true;
      var defineGetter = function(object, name, fn, configurable) {
        if (Object.defineProperty)
          Object.defineProperty(object, name, {
            configurable: false === dpSupport ? true : !!configurable,
            get: fn
          });
        else object.__defineGetter__(name, fn);
      };
      try {
        defineGetter({}, "support");
      } catch (e) {
        dpSupport = false;
      }
      var _DOMTokenList2 = function(el, prop) {
        var that = this;
        var tokens = [];
        var tokenMap = {};
        var length = 0;
        var maxLength = 0;
        var addIndexGetter = function(i) {
          defineGetter(that, i, function() {
            preop();
            return tokens[i];
          }, false);
        };
        var reindex = function() {
          if (length >= maxLength)
            for (; maxLength < length; ++maxLength) {
              addIndexGetter(maxLength);
            }
        };
        var preop = function() {
          var error;
          var i;
          var args = arguments;
          var rSpace = /\s+/;
          if (args.length) {
            for (i = 0; i < args.length; ++i)
              if (rSpace.test(args[i])) {
                error = new SyntaxError('String "' + args[i] + '" contains an invalid character');
                error.code = 5;
                error.name = "InvalidCharacterError";
                throw error;
              }
          }
          if (typeof el[prop] === "object") {
            tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace);
          } else {
            tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace);
          }
          if ("" === tokens[0]) tokens = [];
          tokenMap = {};
          for (i = 0; i < tokens.length; ++i)
            tokenMap[tokens[i]] = true;
          length = tokens.length;
          reindex();
        };
        preop();
        defineGetter(that, "length", function() {
          preop();
          return length;
        });
        that.toLocaleString = that.toString = function() {
          preop();
          return tokens.join(" ");
        };
        that.item = function(idx) {
          preop();
          return tokens[idx];
        };
        that.contains = function(token) {
          preop();
          return !!tokenMap[token];
        };
        that.add = function() {
          preop.apply(that, args = arguments);
          for (var args, token, i = 0, l = args.length; i < l; ++i) {
            token = args[i];
            if (!tokenMap[token]) {
              tokens.push(token);
              tokenMap[token] = true;
            }
          }
          if (length !== tokens.length) {
            length = tokens.length >>> 0;
            if (typeof el[prop] === "object") {
              el[prop].baseVal = tokens.join(" ");
            } else {
              el[prop] = tokens.join(" ");
            }
            reindex();
          }
        };
        that.remove = function() {
          preop.apply(that, args = arguments);
          for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) {
            ignore[args[i]] = true;
            delete tokenMap[args[i]];
          }
          for (i = 0; i < tokens.length; ++i)
            if (!ignore[tokens[i]]) t.push(tokens[i]);
          tokens = t;
          length = t.length >>> 0;
          if (typeof el[prop] === "object") {
            el[prop].baseVal = tokens.join(" ");
          } else {
            el[prop] = tokens.join(" ");
          }
          reindex();
        };
        that.toggle = function(token, force) {
          preop.apply(that, [token]);
          if (void 0 !== force) {
            if (force) {
              that.add(token);
              return true;
            } else {
              that.remove(token);
              return false;
            }
          }
          if (tokenMap[token]) {
            that.remove(token);
            return false;
          }
          that.add(token);
          return true;
        };
        that.forEach = Array.prototype.forEach;
        return that;
      };
      return _DOMTokenList2;
    }();
    DOMTokenList_default = _DOMTokenList;
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DOMTokenList.js
var DOMTokenList_exports = {};
var init_DOMTokenList2 = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DOMTokenList.js"() {
    init_DOMTokenList();
    (function(undefined2) {
      if (!("DOMTokenList" in self && function(e) {
        return !("classList" in e) || !e.classList.toggle("x", false) && !e.className;
      }(document.createElement("x")))) {
        (function(global2) {
          var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList;
          if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) {
            global2.DOMTokenList = DOMTokenList_default;
          }
          (function() {
            var e = document.createElement("span");
            if (!("classList" in e)) return;
            e.classList.toggle("x", false);
            if (!e.classList.contains("x")) return;
            e.classList.constructor.prototype.toggle = function toggle(token) {
              var force = arguments[1];
              if (force === undefined2) {
                var add = !this.contains(token);
                this[add ? "add" : "remove"](token);
                return add;
              }
              force = !!force;
              this[force ? "add" : "remove"](token);
              return force;
            };
          })();
          (function() {
            var e = document.createElement("span");
            if (!("classList" in e)) return;
            e.classList.add("a", "b");
            if (e.classList.contains("b")) return;
            var native = e.classList.constructor.prototype.add;
            e.classList.constructor.prototype.add = function() {
              var args = arguments;
              var l = arguments.length;
              for (var i = 0; i < l; i++) {
                native.call(this, args[i]);
              }
            };
          })();
          (function() {
            var e = document.createElement("span");
            if (!("classList" in e)) return;
            e.classList.add("a");
            e.classList.add("b");
            e.classList.remove("a", "b");
            if (!e.classList.contains("b")) return;
            var native = e.classList.constructor.prototype.remove;
            e.classList.constructor.prototype.remove = function() {
              var args = arguments;
              var l = arguments.length;
              for (var i = 0; i < l; i++) {
                native.call(this, args[i]);
              }
            };
          })();
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js
var DOMTokenList_prototype_replace_exports = {};
var init_DOMTokenList_prototype_replace = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js"() {
    init_DOMTokenList();
    (function(undefined2) {
      if (!("replace" in (document.createElement("div").classList || {}))) {
        (function() {
          var classList = document.createElement("div").classList;
          classList && (classList.constructor.prototype.replace = function(token, newToken) {
            var tokenString = "" + token, newTokenString = "" + newToken;
            try {
              new DOMException();
            } catch (e) {
              self.DOMException = function(message, name) {
                if (!(this instanceof DOMException)) return new DOMException(message, name);
                this.message = message;
                this.name = name;
              };
            }
            var error;
            if (!(tokenString && newTokenString)) error = "SyntaxError";
            if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) error = "InvalidCharacterError";
            if (error) throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error);
            if (!this.contains(tokenString)) return false;
            var tokensTobeMoved = [];
            var newTokenFound = false;
            for (var i = 0; i < this.length; ++i)
              if (newTokenString === this.item(i)) newTokenFound = true;
              else if (tokenString === this.item(i)) break;
            for (; i < this.length; ++i) tokensTobeMoved.push(this.item(i));
            for (i = 0; i < tokensTobeMoved.length; ++i) {
              var currentToken = tokensTobeMoved[i];
              currentToken !== newTokenString && this.remove(currentToken);
              currentToken !== tokenString && this.add(currentToken);
              currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString));
            }
            return true;
          });
        })();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DocumentFragment.js
var require_DocumentFragment = __commonJS({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DocumentFragment.js"() {
    (function(undefined2) {
      if (!("DocumentFragment" in self && function() {
        try {
          return new DocumentFragment(), true;
        } catch (n) {
          return false;
        }
      }())) {
        (function(global2) {
          global2.DocumentFragment = function DocumentFragment2() {
            return document.createDocumentFragment();
          };
          var fragment = document.createDocumentFragment();
          global2.DocumentFragment.prototype = Object.create(fragment.constructor.prototype);
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/helpers/_mutation.js
var _mutation, mutation_default;
var init_mutation = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/helpers/_mutation.js"() {
    _mutation = /* @__PURE__ */ function() {
      function isNode(object) {
        if (typeof Node === "function") {
          return object instanceof Node;
        }
        return object && typeof object === "object" && object.nodeName && object.nodeType >= 1 && object.nodeType <= 12;
      }
      return function mutation(nodes) {
        if (nodes.length === 1) {
          return isNode(nodes[0]) ? nodes[0] : document.createTextNode(nodes[0] + "");
        }
        var fragment = document.createDocumentFragment();
        for (var i = 0; i < nodes.length; i++) {
          fragment.appendChild(isNode(nodes[i]) ? nodes[i] : document.createTextNode(nodes[i] + ""));
        }
        return fragment;
      };
    }();
    mutation_default = _mutation;
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js
var DocumentFragment_prototype_append_exports = {};
var init_DocumentFragment_prototype_append = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/DocumentFragment.prototype.append.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("DocumentFragment" in self && "append" in DocumentFragment.prototype)) {
        (function(global2) {
          var fragmentProto = document.createDocumentFragment().constructor.prototype;
          fragmentProto.append = function append() {
            this.appendChild(mutation_default(arguments));
          };
          global2.DocumentFragment.prototype.append = function append() {
            this.appendChild(mutation_default(arguments));
          };
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js
var Element_prototype_append_exports = {};
var init_Element_prototype_append = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.append.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("Element" in self && "append" in Element.prototype)) {
        Document.prototype.append = Element.prototype.append = function append() {
          this.appendChild(mutation_default(arguments));
        };
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/fetch.js
var require_fetch = __commonJS({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/fetch.js"(exports, module2) {
    (function(undefined2) {
      if (!("fetch" in self && "Request" in self && function() {
        try {
          return "signal" in new Request("");
        } catch (e) {
          return false;
        }
      }())) {
        (function(global2, factory) {
          typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : factory(global2.WHATWGFetch = {});
        })(this, function(exports2) {
          "use strict";
          var global2 = typeof globalThis !== "undefined" && globalThis || typeof self !== "undefined" && self || typeof global2 !== "undefined" && global2;
          var support = {
            searchParams: "URLSearchParams" in global2,
            iterable: "Symbol" in global2 && "iterator" in Symbol,
            blob: "FileReader" in global2 && "Blob" in global2 && function() {
              try {
                new Blob();
                return true;
              } catch (e) {
                return false;
              }
            }(),
            formData: "FormData" in global2,
            arrayBuffer: "ArrayBuffer" in global2
          };
          function isDataView(obj) {
            return obj && DataView.prototype.isPrototypeOf(obj);
          }
          if (support.arrayBuffer) {
            var viewClasses = [
              "[object Int8Array]",
              "[object Uint8Array]",
              "[object Uint8ClampedArray]",
              "[object Int16Array]",
              "[object Uint16Array]",
              "[object Int32Array]",
              "[object Uint32Array]",
              "[object Float32Array]",
              "[object Float64Array]"
            ];
            var isArrayBufferView = ArrayBuffer.isView || function(obj) {
              return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
            };
          }
          function normalizeName(name) {
            if (typeof name !== "string") {
              name = String(name);
            }
            if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "") {
              throw new TypeError('Invalid character in header field name: "' + name + '"');
            }
            return name.toLowerCase();
          }
          function normalizeValue(value) {
            if (typeof value !== "string") {
              value = String(value);
            }
            return value;
          }
          function iteratorFor(items) {
            var iterator = {
              next: function() {
                var value = items.shift();
                return { done: value === undefined2, value };
              }
            };
            if (support.iterable) {
              iterator[Symbol.iterator] = function() {
                return iterator;
              };
            }
            return iterator;
          }
          function Headers(headers) {
            this.map = {};
            if (headers instanceof Headers) {
              headers.forEach(function(value, name) {
                this.append(name, value);
              }, this);
            } else if (Array.isArray(headers)) {
              headers.forEach(function(header) {
                this.append(header[0], header[1]);
              }, this);
            } else if (headers) {
              Object.getOwnPropertyNames(headers).forEach(function(name) {
                this.append(name, headers[name]);
              }, this);
            }
          }
          Headers.prototype.append = function(name, value) {
            name = normalizeName(name);
            value = normalizeValue(value);
            var oldValue = this.map[name];
            this.map[name] = oldValue ? oldValue + ", " + value : value;
          };
          Headers.prototype["delete"] = function(name) {
            delete this.map[normalizeName(name)];
          };
          Headers.prototype.get = function(name) {
            name = normalizeName(name);
            return this.has(name) ? this.map[name] : null;
          };
          Headers.prototype.has = function(name) {
            return this.map.hasOwnProperty(normalizeName(name));
          };
          Headers.prototype.set = function(name, value) {
            this.map[normalizeName(name)] = normalizeValue(value);
          };
          Headers.prototype.forEach = function(callback, thisArg) {
            for (var name in this.map) {
              if (this.map.hasOwnProperty(name)) {
                callback.call(thisArg, this.map[name], name, this);
              }
            }
          };
          Headers.prototype.keys = function() {
            var items = [];
            this.forEach(function(value, name) {
              items.push(name);
            });
            return iteratorFor(items);
          };
          Headers.prototype.values = function() {
            var items = [];
            this.forEach(function(value) {
              items.push(value);
            });
            return iteratorFor(items);
          };
          Headers.prototype.entries = function() {
            var items = [];
            this.forEach(function(value, name) {
              items.push([name, value]);
            });
            return iteratorFor(items);
          };
          if (support.iterable) {
            Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
          }
          function consumed(body) {
            if (body.bodyUsed) {
              return Promise.reject(new TypeError("Already read"));
            }
            body.bodyUsed = true;
          }
          function fileReaderReady(reader) {
            return new Promise(function(resolve, reject) {
              reader.onload = function() {
                resolve(reader.result);
              };
              reader.onerror = function() {
                reject(reader.error);
              };
            });
          }
          function readBlobAsArrayBuffer(blob) {
            var reader = new FileReader();
            var promise = fileReaderReady(reader);
            reader.readAsArrayBuffer(blob);
            return promise;
          }
          function readBlobAsText(blob) {
            var reader = new FileReader();
            var promise = fileReaderReady(reader);
            reader.readAsText(blob);
            return promise;
          }
          function readArrayBufferAsText(buf) {
            var view = new Uint8Array(buf);
            var chars = new Array(view.length);
            for (var i = 0; i < view.length; i++) {
              chars[i] = String.fromCharCode(view[i]);
            }
            return chars.join("");
          }
          function bufferClone(buf) {
            if (buf.slice) {
              return buf.slice(0);
            } else {
              var view = new Uint8Array(buf.byteLength);
              view.set(new Uint8Array(buf));
              return view.buffer;
            }
          }
          function Body() {
            this.bodyUsed = false;
            this._initBody = function(body) {
              this.bodyUsed = this.bodyUsed;
              this._bodyInit = body;
              if (!body) {
                this._bodyText = "";
              } else if (typeof body === "string") {
                this._bodyText = body;
              } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
                this._bodyBlob = body;
              } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
                this._bodyFormData = body;
              } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
                this._bodyText = body.toString();
              } else if (support.arrayBuffer && support.blob && isDataView(body)) {
                this._bodyArrayBuffer = bufferClone(body.buffer);
                this._bodyInit = new Blob([this._bodyArrayBuffer]);
              } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
                this._bodyArrayBuffer = bufferClone(body);
              } else {
                this._bodyText = body = Object.prototype.toString.call(body);
              }
              if (!this.headers.get("content-type")) {
                if (typeof body === "string") {
                  this.headers.set("content-type", "text/plain;charset=UTF-8");
                } else if (this._bodyBlob && this._bodyBlob.type) {
                  this.headers.set("content-type", this._bodyBlob.type);
                } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
                  this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
                }
              }
            };
            if (support.blob) {
              this.blob = function() {
                var rejected = consumed(this);
                if (rejected) {
                  return rejected;
                }
                if (this._bodyBlob) {
                  return Promise.resolve(this._bodyBlob);
                } else if (this._bodyArrayBuffer) {
                  return Promise.resolve(new Blob([this._bodyArrayBuffer]));
                } else if (this._bodyFormData) {
                  throw new Error("could not read FormData body as blob");
                } else {
                  return Promise.resolve(new Blob([this._bodyText]));
                }
              };
              this.arrayBuffer = function() {
                if (this._bodyArrayBuffer) {
                  var isConsumed = consumed(this);
                  if (isConsumed) {
                    return isConsumed;
                  }
                  if (ArrayBuffer.isView(this._bodyArrayBuffer)) {
                    return Promise.resolve(
                      this._bodyArrayBuffer.buffer.slice(
                        this._bodyArrayBuffer.byteOffset,
                        this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength
                      )
                    );
                  } else {
                    return Promise.resolve(this._bodyArrayBuffer);
                  }
                } else {
                  return this.blob().then(readBlobAsArrayBuffer);
                }
              };
            }
            this.text = function() {
              var rejected = consumed(this);
              if (rejected) {
                return rejected;
              }
              if (this._bodyBlob) {
                return readBlobAsText(this._bodyBlob);
              } else if (this._bodyArrayBuffer) {
                return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
              } else if (this._bodyFormData) {
                throw new Error("could not read FormData body as text");
              } else {
                return Promise.resolve(this._bodyText);
              }
            };
            if (support.formData) {
              this.formData = function() {
                return this.text().then(decode);
              };
            }
            this.json = function() {
              return this.text().then(JSON.parse);
            };
            return this;
          }
          var methods = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
          function normalizeMethod(method) {
            var upcased = method.toUpperCase();
            return methods.indexOf(upcased) > -1 ? upcased : method;
          }
          function Request2(input, options) {
            if (!(this instanceof Request2)) {
              throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
            }
            options = options || {};
            var body = options.body;
            if (input instanceof Request2) {
              if (input.bodyUsed) {
                throw new TypeError("Already read");
              }
              this.url = input.url;
              this.credentials = input.credentials;
              if (!options.headers) {
                this.headers = new Headers(input.headers);
              }
              this.method = input.method;
              this.mode = input.mode;
              this.signal = input.signal;
              if (!body && input._bodyInit != null) {
                body = input._bodyInit;
                input.bodyUsed = true;
              }
            } else {
              this.url = String(input);
            }
            this.credentials = options.credentials || this.credentials || "same-origin";
            if (options.headers || !this.headers) {
              this.headers = new Headers(options.headers);
            }
            this.method = normalizeMethod(options.method || this.method || "GET");
            this.mode = options.mode || this.mode || null;
            this.signal = options.signal || this.signal;
            this.referrer = null;
            if ((this.method === "GET" || this.method === "HEAD") && body) {
              throw new TypeError("Body not allowed for GET or HEAD requests");
            }
            this._initBody(body);
            if (this.method === "GET" || this.method === "HEAD") {
              if (options.cache === "no-store" || options.cache === "no-cache") {
                var reParamSearch = /([?&])_=[^&]*/;
                if (reParamSearch.test(this.url)) {
                  this.url = this.url.replace(reParamSearch, "$1_=" + (/* @__PURE__ */ new Date()).getTime());
                } else {
                  var reQueryString = /\?/;
                  this.url += (reQueryString.test(this.url) ? "&" : "?") + "_=" + (/* @__PURE__ */ new Date()).getTime();
                }
              }
            }
          }
          Request2.prototype.clone = function() {
            return new Request2(this, { body: this._bodyInit });
          };
          function decode(body) {
            var form = new FormData();
            body.trim().split("&").forEach(function(bytes) {
              if (bytes) {
                var split = bytes.split("=");
                var name = split.shift().replace(/\+/g, " ");
                var value = split.join("=").replace(/\+/g, " ");
                form.append(decodeURIComponent(name), decodeURIComponent(value));
              }
            });
            return form;
          }
          function parseHeaders(rawHeaders) {
            var headers = new Headers();
            var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " ");
            preProcessedHeaders.split("\r").map(function(header) {
              return header.indexOf("\n") === 0 ? header.substr(1, header.length) : header;
            }).forEach(function(line) {
              var parts = line.split(":");
              var key = parts.shift().trim();
              if (key) {
                var value = parts.join(":").trim();
                headers.append(key, value);
              }
            });
            return headers;
          }
          Body.call(Request2.prototype);
          function Response(bodyInit, options) {
            if (!(this instanceof Response)) {
              throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
            }
            if (!options) {
              options = {};
            }
            this.type = "default";
            this.status = options.status === undefined2 ? 200 : options.status;
            this.ok = this.status >= 200 && this.status < 300;
            this.statusText = options.statusText === undefined2 ? "" : "" + options.statusText;
            this.headers = new Headers(options.headers);
            this.url = options.url || "";
            this._initBody(bodyInit);
          }
          Body.call(Response.prototype);
          Response.prototype.clone = function() {
            return new Response(this._bodyInit, {
              status: this.status,
              statusText: this.statusText,
              headers: new Headers(this.headers),
              url: this.url
            });
          };
          Response.error = function() {
            var response = new Response(null, { status: 0, statusText: "" });
            response.type = "error";
            return response;
          };
          var redirectStatuses = [301, 302, 303, 307, 308];
          Response.redirect = function(url, status) {
            if (redirectStatuses.indexOf(status) === -1) {
              throw new RangeError("Invalid status code");
            }
            return new Response(null, { status, headers: { location: url } });
          };
          exports2.DOMException = global2.DOMException;
          try {
            new exports2.DOMException();
          } catch (err) {
            exports2.DOMException = function(message, name) {
              this.message = message;
              this.name = name;
              var error = Error(message);
              this.stack = error.stack;
            };
            exports2.DOMException.prototype = Object.create(Error.prototype);
            exports2.DOMException.prototype.constructor = exports2.DOMException;
          }
          function fetch2(input, init) {
            return new Promise(function(resolve, reject) {
              var request = new Request2(input, init);
              if (request.signal && request.signal.aborted) {
                return reject(new exports2.DOMException("Aborted", "AbortError"));
              }
              var xhr = new XMLHttpRequest();
              function abortXhr() {
                xhr.abort();
              }
              xhr.onload = function() {
                var options = {
                  status: xhr.status,
                  statusText: xhr.statusText,
                  headers: parseHeaders(xhr.getAllResponseHeaders() || "")
                };
                options.url = "responseURL" in xhr ? xhr.responseURL : options.headers.get("X-Request-URL");
                var body = "response" in xhr ? xhr.response : xhr.responseText;
                setTimeout(function() {
                  resolve(new Response(body, options));
                }, 0);
              };
              xhr.onerror = function() {
                setTimeout(function() {
                  reject(new TypeError("Network request failed"));
                }, 0);
              };
              xhr.ontimeout = function() {
                setTimeout(function() {
                  reject(new TypeError("Network request failed"));
                }, 0);
              };
              xhr.onabort = function() {
                setTimeout(function() {
                  reject(new exports2.DOMException("Aborted", "AbortError"));
                }, 0);
              };
              function fixUrl(url) {
                try {
                  return url === "" && global2.location.href ? global2.location.href : url;
                } catch (e) {
                  return url;
                }
              }
              xhr.open(request.method, fixUrl(request.url), true);
              if (request.credentials === "include") {
                xhr.withCredentials = true;
              } else if (request.credentials === "omit") {
                xhr.withCredentials = false;
              }
              if ("responseType" in xhr) {
                if (support.blob) {
                  xhr.responseType = "blob";
                } else if (support.arrayBuffer && request.headers.get("Content-Type") && request.headers.get("Content-Type").indexOf("application/octet-stream") !== -1) {
                  xhr.responseType = "arraybuffer";
                }
              }
              if (init && typeof init.headers === "object" && !(init.headers instanceof Headers)) {
                Object.getOwnPropertyNames(init.headers).forEach(function(name) {
                  xhr.setRequestHeader(name, normalizeValue(init.headers[name]));
                });
              } else {
                request.headers.forEach(function(value, name) {
                  xhr.setRequestHeader(name, value);
                });
              }
              if (request.signal) {
                request.signal.addEventListener("abort", abortXhr);
                xhr.onreadystatechange = function() {
                  if (xhr.readyState === 4) {
                    request.signal.removeEventListener("abort", abortXhr);
                  }
                };
              }
              xhr.send(typeof request._bodyInit === "undefined" ? null : request._bodyInit);
            });
          }
          fetch2.polyfill = true;
          global2.fetch = fetch2;
          global2.Headers = Headers;
          global2.Request = Request2;
          global2.Response = Response;
          exports2.Headers = Headers;
          exports2.Request = Request2;
          exports2.Response = Response;
          exports2.fetch = fetch2;
          Object.defineProperty(exports2, "__esModule", { value: true });
        });
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js
var Element_prototype_remove_exports = {};
var init_Element_prototype_remove = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("Element" in self && "remove" in Element.prototype)) {
        Document.prototype.remove = Element.prototype.remove = function remove() {
          if (this.parentNode) {
            this.parentNode.removeChild(this);
          }
        };
        if ("Text" in self) {
          Text.prototype.remove = Element.prototype.remove;
        }
        (function() {
          var originalRemove = HTMLSelectElement.prototype.remove;
          HTMLSelectElement.prototype.remove = function remove(index) {
            if (arguments.length === 0) {
              return Element.prototype.remove.call(this);
            }
            return originalRemove.call(this, index);
          };
        })();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js
var CharacterData_prototype_remove_exports = {};
var init_CharacterData_prototype_remove = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("remove" in CharacterData.prototype)) {
        CharacterData.prototype.remove = Element.prototype.remove;
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/requestAnimationFrame.js
var require_requestAnimationFrame = __commonJS({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/requestAnimationFrame.js"() {
    (function(undefined2) {
      if (!("requestAnimationFrame" in self)) {
        (function(global2) {
          var rafPrefix;
          var nowOffset = Date.now();
          var pnow = function() {
            if (global2.performance && typeof global2.performance.now === "function") {
              return global2.performance.now();
            }
            return Date.now() - nowOffset;
          };
          if ("mozRequestAnimationFrame" in global2) {
            rafPrefix = "moz";
          } else if ("webkitRequestAnimationFrame" in global2) {
            rafPrefix = "webkit";
          }
          if (rafPrefix) {
            global2.requestAnimationFrame = function(callback) {
              return global2[rafPrefix + "RequestAnimationFrame"](function() {
                callback(pnow());
              });
            };
            global2.cancelAnimationFrame = global2[rafPrefix + "CancelAnimationFrame"];
          } else {
            var lastTime = Date.now();
            global2.requestAnimationFrame = function(callback) {
              if (typeof callback !== "function") {
                throw new TypeError(callback + " is not a function");
              }
              var currentTime = Date.now(), delay = 16 + lastTime - currentTime;
              if (delay < 0) {
                delay = 0;
              }
              lastTime = currentTime;
              return setTimeout(function() {
                lastTime = Date.now();
                callback(pnow());
              }, delay);
            };
            global2.cancelAnimationFrame = function(id) {
              clearTimeout(id);
            };
          }
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/WebAnimations.js
var require_WebAnimations = __commonJS({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/WebAnimations.js"() {
    (function(undefined2) {
      if (!("function" == typeof document.head.animate && function() {
        try {
          return !!document.createElement("DIV").animate({ opacity: [0, 1] }, { direction: "alternate", duration: 1, iterations: 1 });
        } catch (t) {
          return false;
        }
      }())) {
        !function() {
          var a = {}, b = {};
          !function(a2, b2) {
            function c(a3) {
              if ("number" == typeof a3) return a3;
              var b3 = {};
              for (var c2 in a3) b3[c2] = a3[c2];
              return b3;
            }
            function d() {
              this._delay = 0, this._endDelay = 0, this._fill = "none", this._iterationStart = 0, this._iterations = 1, this._duration = 0, this._playbackRate = 1, this._direction = "normal", this._easing = "linear", this._easingFunction = x;
            }
            function e() {
              return a2.isDeprecated("Invalid timing inputs", "2016-03-02", "TypeError exceptions will be thrown instead.", true);
            }
            function f(b3, c2, e2) {
              var f2 = new d();
              return c2 && (f2.fill = "both", f2.duration = "auto"), "number" != typeof b3 || isNaN(b3) ? void 0 !== b3 && Object.getOwnPropertyNames(b3).forEach(function(c3) {
                if ("auto" != b3[c3]) {
                  if (("number" == typeof f2[c3] || "duration" == c3) && ("number" != typeof b3[c3] || isNaN(b3[c3]))) return;
                  if ("fill" == c3 && -1 == v.indexOf(b3[c3])) return;
                  if ("direction" == c3 && -1 == w.indexOf(b3[c3])) return;
                  if ("playbackRate" == c3 && 1 !== b3[c3] && a2.isDeprecated("AnimationEffectTiming.playbackRate", "2014-11-28", "Use Animation.playbackRate instead.")) return;
                  f2[c3] = b3[c3];
                }
              }) : f2.duration = b3, f2;
            }
            function g(a3) {
              return "number" == typeof a3 && (a3 = isNaN(a3) ? { duration: 0 } : { duration: a3 }), a3;
            }
            function h(b3, c2) {
              return b3 = a2.numericTimingToObject(b3), f(b3, c2);
            }
            function i(a3, b3, c2, d2) {
              return a3 < 0 || a3 > 1 || c2 < 0 || c2 > 1 ? x : function(e2) {
                function f2(a4, b4, c3) {
                  return 3 * a4 * (1 - c3) * (1 - c3) * c3 + 3 * b4 * (1 - c3) * c3 * c3 + c3 * c3 * c3;
                }
                if (e2 <= 0) {
                  var g2 = 0;
                  return a3 > 0 ? g2 = b3 / a3 : !b3 && c2 > 0 && (g2 = d2 / c2), g2 * e2;
                }
                if (e2 >= 1) {
                  var h2 = 0;
                  return c2 < 1 ? h2 = (d2 - 1) / (c2 - 1) : 1 == c2 && a3 < 1 && (h2 = (b3 - 1) / (a3 - 1)), 1 + h2 * (e2 - 1);
                }
                for (var i2 = 0, j2 = 1; i2 < j2; ) {
                  var k2 = (i2 + j2) / 2, l2 = f2(a3, c2, k2);
                  if (Math.abs(e2 - l2) < 1e-5) return f2(b3, d2, k2);
                  l2 < e2 ? i2 = k2 : j2 = k2;
                }
                return f2(b3, d2, k2);
              };
            }
            function j(a3, b3) {
              return function(c2) {
                if (c2 >= 1) return 1;
                var d2 = 1 / a3;
                return (c2 += b3 * d2) - c2 % d2;
              };
            }
            function k(a3) {
              C || (C = document.createElement("div").style), C.animationTimingFunction = "", C.animationTimingFunction = a3;
              var b3 = C.animationTimingFunction;
              if ("" == b3 && e()) throw new TypeError(a3 + " is not a valid value for easing");
              return b3;
            }
            function l(a3) {
              if ("linear" == a3) return x;
              var b3 = E.exec(a3);
              if (b3) return i.apply(this, b3.slice(1).map(Number));
              var c2 = F.exec(a3);
              if (c2) return j(Number(c2[1]), A);
              var d2 = G.exec(a3);
              return d2 ? j(Number(d2[1]), { start: y, middle: z, end: A }[d2[2]]) : B[a3] || x;
            }
            function m(a3) {
              return Math.abs(n(a3) / a3.playbackRate);
            }
            function n(a3) {
              return 0 === a3.duration || 0 === a3.iterations ? 0 : a3.duration * a3.iterations;
            }
            function o(a3, b3, c2) {
              if (null == b3) return H;
              var d2 = c2.delay + a3 + c2.endDelay;
              return b3 < Math.min(c2.delay, d2) ? I : b3 >= Math.min(c2.delay + a3, d2) ? J : K;
            }
            function p(a3, b3, c2, d2, e2) {
              switch (d2) {
                case I:
                  return "backwards" == b3 || "both" == b3 ? 0 : null;
                case K:
                  return c2 - e2;
                case J:
                  return "forwards" == b3 || "both" == b3 ? a3 : null;
                case H:
                  return null;
              }
            }
            function q(a3, b3, c2, d2, e2) {
              var f2 = e2;
              return 0 === a3 ? b3 !== I && (f2 += c2) : f2 += d2 / a3, f2;
            }
            function r(a3, b3, c2, d2, e2, f2) {
              var g2 = a3 === 1 / 0 ? b3 % 1 : a3 % 1;
              return 0 !== g2 || c2 !== J || 0 === d2 || 0 === e2 && 0 !== f2 || (g2 = 1), g2;
            }
            function s(a3, b3, c2, d2) {
              return a3 === J && b3 === 1 / 0 ? 1 / 0 : 1 === c2 ? Math.floor(d2) - 1 : Math.floor(d2);
            }
            function t(a3, b3, c2) {
              var d2 = a3;
              if ("normal" !== a3 && "reverse" !== a3) {
                var e2 = b3;
                "alternate-reverse" === a3 && (e2 += 1), d2 = "normal", e2 !== 1 / 0 && e2 % 2 != 0 && (d2 = "reverse");
              }
              return "normal" === d2 ? c2 : 1 - c2;
            }
            function u(a3, b3, c2) {
              var d2 = o(a3, b3, c2), e2 = p(a3, c2.fill, b3, d2, c2.delay);
              if (null === e2) return null;
              var f2 = q(c2.duration, d2, c2.iterations, e2, c2.iterationStart), g2 = r(f2, c2.iterationStart, d2, c2.iterations, e2, c2.duration), h2 = s(d2, c2.iterations, g2, f2), i2 = t(c2.direction, h2, g2);
              return c2._easingFunction(i2);
            }
            var v = "backwards|forwards|both|none".split("|"), w = "reverse|alternate|alternate-reverse".split("|"), x = function(a3) {
              return a3;
            };
            d.prototype = { _setMember: function(b3, c2) {
              this["_" + b3] = c2, this._effect && (this._effect._timingInput[b3] = c2, this._effect._timing = a2.normalizeTimingInput(this._effect._timingInput), this._effect.activeDuration = a2.calculateActiveDuration(this._effect._timing), this._effect._animation && this._effect._animation._rebuildUnderlyingAnimation());
            }, get playbackRate() {
              return this._playbackRate;
            }, set delay(a3) {
              this._setMember("delay", a3);
            }, get delay() {
              return this._delay;
            }, set endDelay(a3) {
              this._setMember("endDelay", a3);
            }, get endDelay() {
              return this._endDelay;
            }, set fill(a3) {
              this._setMember("fill", a3);
            }, get fill() {
              return this._fill;
            }, set iterationStart(a3) {
              if ((isNaN(a3) || a3 < 0) && e()) throw new TypeError("iterationStart must be a non-negative number, received: " + a3);
              this._setMember("iterationStart", a3);
            }, get iterationStart() {
              return this._iterationStart;
            }, set duration(a3) {
              if ("auto" != a3 && (isNaN(a3) || a3 < 0) && e()) throw new TypeError("duration must be non-negative or auto, received: " + a3);
              this._setMember("duration", a3);
            }, get duration() {
              return this._duration;
            }, set direction(a3) {
              this._setMember("direction", a3);
            }, get direction() {
              return this._direction;
            }, set easing(a3) {
              this._easingFunction = l(k(a3)), this._setMember("easing", a3);
            }, get easing() {
              return this._easing;
            }, set iterations(a3) {
              if ((isNaN(a3) || a3 < 0) && e()) throw new TypeError("iterations must be non-negative, received: " + a3);
              this._setMember("iterations", a3);
            }, get iterations() {
              return this._iterations;
            } };
            var y = 1, z = 0.5, A = 0, B = { ease: i(0.25, 0.1, 0.25, 1), "ease-in": i(0.42, 0, 1, 1), "ease-out": i(0, 0, 0.58, 1), "ease-in-out": i(0.42, 0, 0.58, 1), "step-start": j(1, y), "step-middle": j(1, z), "step-end": j(1, A) }, C = null, D = "\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*", E = new RegExp("cubic-bezier\\(" + D + "," + D + "," + D + "," + D + "\\)"), F = /steps\(\s*(\d+)\s*\)/, G = /steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/, H = 0, I = 1, J = 2, K = 3;
            a2.cloneTimingInput = c, a2.makeTiming = f, a2.numericTimingToObject = g, a2.normalizeTimingInput = h, a2.calculateActiveDuration = m, a2.calculateIterationProgress = u, a2.calculatePhase = o, a2.normalizeEasing = k, a2.parseEasingFunction = l;
          }(a), function(a2, b2) {
            function c(a3, b3) {
              return a3 in k ? k[a3][b3] || b3 : b3;
            }
            function d(a3) {
              return "display" === a3 || 0 === a3.lastIndexOf("animation", 0) || 0 === a3.lastIndexOf("transition", 0);
            }
            function e(a3, b3, e2) {
              if (!d(a3)) {
                var f2 = h[a3];
                if (f2) {
                  i.style[a3] = b3;
                  for (var g2 in f2) {
                    var j2 = f2[g2], k2 = i.style[j2];
                    e2[j2] = c(j2, k2);
                  }
                } else e2[a3] = c(a3, b3);
              }
            }
            function f(a3) {
              var b3 = [];
              for (var c2 in a3) if (!(c2 in ["easing", "offset", "composite"])) {
                var d2 = a3[c2];
                Array.isArray(d2) || (d2 = [d2]);
                for (var e2, f2 = d2.length, g2 = 0; g2 < f2; g2++) e2 = {}, e2.offset = "offset" in a3 ? a3.offset : 1 == f2 ? 1 : g2 / (f2 - 1), "easing" in a3 && (e2.easing = a3.easing), "composite" in a3 && (e2.composite = a3.composite), e2[c2] = d2[g2], b3.push(e2);
              }
              return b3.sort(function(a4, b4) {
                return a4.offset - b4.offset;
              }), b3;
            }
            function g(b3) {
              function c2() {
                var a3 = d2.length;
                null == d2[a3 - 1].offset && (d2[a3 - 1].offset = 1), a3 > 1 && null == d2[0].offset && (d2[0].offset = 0);
                for (var b4 = 0, c3 = d2[0].offset, e2 = 1; e2 < a3; e2++) {
                  var f2 = d2[e2].offset;
                  if (null != f2) {
                    for (var g3 = 1; g3 < e2 - b4; g3++) d2[b4 + g3].offset = c3 + (f2 - c3) * g3 / (e2 - b4);
                    b4 = e2, c3 = f2;
                  }
                }
              }
              if (null == b3) return [];
              window.Symbol && Symbol.iterator && Array.prototype.from && b3[Symbol.iterator] && (b3 = Array.from(b3)), Array.isArray(b3) || (b3 = f(b3));
              for (var d2 = b3.map(function(b4) {
                var c3 = {};
                for (var d3 in b4) {
                  var f2 = b4[d3];
                  if ("offset" == d3) {
                    if (null != f2) {
                      if (f2 = Number(f2), !isFinite(f2)) throw new TypeError("Keyframe offsets must be numbers.");
                      if (f2 < 0 || f2 > 1) throw new TypeError("Keyframe offsets must be between 0 and 1.");
                    }
                  } else if ("composite" == d3) {
                    if ("add" == f2 || "accumulate" == f2) throw { type: DOMException.NOT_SUPPORTED_ERR, name: "NotSupportedError", message: "add compositing is not supported" };
                    if ("replace" != f2) throw new TypeError("Invalid composite mode " + f2 + ".");
                  } else f2 = "easing" == d3 ? a2.normalizeEasing(f2) : "" + f2;
                  e(d3, f2, c3);
                }
                return void 0 == c3.offset && (c3.offset = null), void 0 == c3.easing && (c3.easing = "linear"), c3;
              }), g2 = true, h2 = -1 / 0, i2 = 0; i2 < d2.length; i2++) {
                var j2 = d2[i2].offset;
                if (null != j2) {
                  if (j2 < h2) throw new TypeError("Keyframes are not loosely sorted by offset. Sort or specify offsets.");
                  h2 = j2;
                } else g2 = false;
              }
              return d2 = d2.filter(function(a3) {
                return a3.offset >= 0 && a3.offset <= 1;
              }), g2 || c2(), d2;
            }
            var h = { background: ["backgroundImage", "backgroundPosition", "backgroundSize", "backgroundRepeat", "backgroundAttachment", "backgroundOrigin", "backgroundClip", "backgroundColor"], border: ["borderTopColor", "borderTopStyle", "borderTopWidth", "borderRightColor", "borderRightStyle", "borderRightWidth", "borderBottomColor", "borderBottomStyle", "borderBottomWidth", "borderLeftColor", "borderLeftStyle", "borderLeftWidth"], borderBottom: ["borderBottomWidth", "borderBottomStyle", "borderBottomColor"], borderColor: ["borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor"], borderLeft: ["borderLeftWidth", "borderLeftStyle", "borderLeftColor"], borderRadius: ["borderTopLeftRadius", "borderTopRightRadius", "borderBottomRightRadius", "borderBottomLeftRadius"], borderRight: ["borderRightWidth", "borderRightStyle", "borderRightColor"], borderTop: ["borderTopWidth", "borderTopStyle", "borderTopColor"], borderWidth: ["borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth"], flex: ["flexGrow", "flexShrink", "flexBasis"], font: ["fontFamily", "fontSize", "fontStyle", "fontVariant", "fontWeight", "lineHeight"], margin: ["marginTop", "marginRight", "marginBottom", "marginLeft"], outline: ["outlineColor", "outlineStyle", "outlineWidth"], padding: ["paddingTop", "paddingRight", "paddingBottom", "paddingLeft"] }, i = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), j = { thin: "1px", medium: "3px", thick: "5px" }, k = { borderBottomWidth: j, borderLeftWidth: j, borderRightWidth: j, borderTopWidth: j, fontSize: { "xx-small": "60%", "x-small": "75%", small: "89%", medium: "100%", large: "120%", "x-large": "150%", "xx-large": "200%" }, fontWeight: { normal: "400", bold: "700" }, outlineWidth: j, textShadow: { none: "0px 0px 0px transparent" }, boxShadow: { none: "0px 0px 0px 0px transparent" } };
            a2.convertToArrayForm = f, a2.normalizeKeyframes = g;
          }(a), function(a2) {
            var b2 = {};
            a2.isDeprecated = function(a3, c, d, e) {
              var f = e ? "are" : "is", g = /* @__PURE__ */ new Date(), h = new Date(c);
              return h.setMonth(h.getMonth() + 3), !(g < h && (a3 in b2 || console.warn("Web Animations: " + a3 + " " + f + " deprecated and will stop working on " + h.toDateString() + ". " + d), b2[a3] = true, 1));
            }, a2.deprecated = function(b3, c, d, e) {
              var f = e ? "are" : "is";
              if (a2.isDeprecated(b3, c, d, e)) throw new Error(b3 + " " + f + " no longer supported. " + d);
            };
          }(a), function() {
            if (document.documentElement.animate) {
              var c = document.documentElement.animate([], 0), d = true;
              if (c && (d = false, "play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState".split("|").forEach(function(a2) {
                void 0 === c[a2] && (d = true);
              })), !d) return;
            }
            !function(a2, b2, c2) {
              function d2(a3) {
                for (var b3 = {}, c3 = 0; c3 < a3.length; c3++) for (var d3 in a3[c3]) if ("offset" != d3 && "easing" != d3 && "composite" != d3) {
                  var e2 = { offset: a3[c3].offset, easing: a3[c3].easing, value: a3[c3][d3] };
                  b3[d3] = b3[d3] || [], b3[d3].push(e2);
                }
                for (var f in b3) {
                  var g = b3[f];
                  if (0 != g[0].offset || 1 != g[g.length - 1].offset) throw { type: DOMException.NOT_SUPPORTED_ERR, name: "NotSupportedError", message: "Partial keyframes are not supported" };
                }
                return b3;
              }
              function e(c3) {
                var d3 = [];
                for (var e2 in c3) for (var f = c3[e2], g = 0; g < f.length - 1; g++) {
                  var h = g, i = g + 1, j = f[h].offset, k = f[i].offset, l = j, m = k;
                  0 == g && (l = -1 / 0, 0 == k && (i = h)), g == f.length - 2 && (m = 1 / 0, 1 == j && (h = i)), d3.push({ applyFrom: l, applyTo: m, startOffset: f[h].offset, endOffset: f[i].offset, easingFunction: a2.parseEasingFunction(f[h].easing), property: e2, interpolation: b2.propertyInterpolation(e2, f[h].value, f[i].value) });
                }
                return d3.sort(function(a3, b3) {
                  return a3.startOffset - b3.startOffset;
                }), d3;
              }
              b2.convertEffectInput = function(c3) {
                var f = a2.normalizeKeyframes(c3), g = d2(f), h = e(g);
                return function(a3, c4) {
                  if (null != c4) h.filter(function(a4) {
                    return c4 >= a4.applyFrom && c4 < a4.applyTo;
                  }).forEach(function(d4) {
                    var e2 = c4 - d4.startOffset, f2 = d4.endOffset - d4.startOffset, g2 = 0 == f2 ? 0 : d4.easingFunction(e2 / f2);
                    b2.apply(a3, d4.property, d4.interpolation(g2));
                  });
                  else for (var d3 in g) "offset" != d3 && "easing" != d3 && "composite" != d3 && b2.clear(a3, d3);
                };
              };
            }(a, b), function(a2, b2, c2) {
              function d2(a3) {
                return a3.replace(/-(.)/g, function(a4, b3) {
                  return b3.toUpperCase();
                });
              }
              function e(a3, b3, c3) {
                h[c3] = h[c3] || [], h[c3].push([a3, b3]);
              }
              function f(a3, b3, c3) {
                for (var f2 = 0; f2 < c3.length; f2++) {
                  e(a3, b3, d2(c3[f2]));
                }
              }
              function g(c3, e2, f2) {
                var g2 = c3;
                /-/.test(c3) && !a2.isDeprecated("Hyphenated property names", "2016-03-22", "Use camelCase instead.", true) && (g2 = d2(c3)), "initial" != e2 && "initial" != f2 || ("initial" == e2 && (e2 = i[g2]), "initial" == f2 && (f2 = i[g2]));
                for (var j = e2 == f2 ? [] : h[g2], k = 0; j && k < j.length; k++) {
                  var l = j[k][0](e2), m = j[k][0](f2);
                  if (void 0 !== l && void 0 !== m) {
                    var n = j[k][1](l, m);
                    if (n) {
                      var o = b2.Interpolation.apply(null, n);
                      return function(a3) {
                        return 0 == a3 ? e2 : 1 == a3 ? f2 : o(a3);
                      };
                    }
                  }
                }
                return b2.Interpolation(false, true, function(a3) {
                  return a3 ? f2 : e2;
                });
              }
              var h = {};
              b2.addPropertiesHandler = f;
              var i = { backgroundColor: "transparent", backgroundPosition: "0% 0%", borderBottomColor: "currentColor", borderBottomLeftRadius: "0px", borderBottomRightRadius: "0px", borderBottomWidth: "3px", borderLeftColor: "currentColor", borderLeftWidth: "3px", borderRightColor: "currentColor", borderRightWidth: "3px", borderSpacing: "2px", borderTopColor: "currentColor", borderTopLeftRadius: "0px", borderTopRightRadius: "0px", borderTopWidth: "3px", bottom: "auto", clip: "rect(0px, 0px, 0px, 0px)", color: "black", fontSize: "100%", fontWeight: "400", height: "auto", left: "auto", letterSpacing: "normal", lineHeight: "120%", marginBottom: "0px", marginLeft: "0px", marginRight: "0px", marginTop: "0px", maxHeight: "none", maxWidth: "none", minHeight: "0px", minWidth: "0px", opacity: "1.0", outlineColor: "invert", outlineOffset: "0px", outlineWidth: "3px", paddingBottom: "0px", paddingLeft: "0px", paddingRight: "0px", paddingTop: "0px", right: "auto", strokeDasharray: "none", strokeDashoffset: "0px", textIndent: "0px", textShadow: "0px 0px 0px transparent", top: "auto", transform: "", verticalAlign: "0px", visibility: "visible", width: "auto", wordSpacing: "normal", zIndex: "auto" };
              b2.propertyInterpolation = g;
            }(a, b), function(a2, b2, c2) {
              function d2(b3) {
                var c3 = a2.calculateActiveDuration(b3), d3 = function(d4) {
                  return a2.calculateIterationProgress(c3, d4, b3);
                };
                return d3._totalDuration = b3.delay + c3 + b3.endDelay, d3;
              }
              b2.KeyframeEffect = function(c3, e, f, g) {
                var h, i = d2(a2.normalizeTimingInput(f)), j = b2.convertEffectInput(e), k = function() {
                  j(c3, h);
                };
                return k._update = function(a3) {
                  return null !== (h = i(a3));
                }, k._clear = function() {
                  j(c3, null);
                }, k._hasSameTarget = function(a3) {
                  return c3 === a3;
                }, k._target = c3, k._totalDuration = i._totalDuration, k._id = g, k;
              };
            }(a, b), function(a2, b2) {
              function c2(a3, b3) {
                return !(!b3.namespaceURI || -1 == b3.namespaceURI.indexOf("/svg")) && (g in a3 || (a3[g] = /Trident|MSIE|IEMobile|Edge|Android 4/i.test(a3.navigator.userAgent)), a3[g]);
              }
              function d2(a3, b3, c3) {
                c3.enumerable = true, c3.configurable = true, Object.defineProperty(a3, b3, c3);
              }
              function e(a3) {
                this._element = a3, this._surrogateStyle = document.createElementNS("http://www.w3.org/1999/xhtml", "div").style, this._style = a3.style, this._length = 0, this._isAnimatedProperty = {}, this._updateSvgTransformAttr = c2(window, a3), this._savedTransformAttr = null;
                for (var b3 = 0; b3 < this._style.length; b3++) {
                  var d3 = this._style[b3];
                  this._surrogateStyle[d3] = this._style[d3];
                }
                this._updateIndices();
              }
              function f(a3) {
                if (!a3._webAnimationsPatchedStyle) {
                  var b3 = new e(a3);
                  try {
                    d2(a3, "style", { get: function() {
                      return b3;
                    } });
                  } catch (b4) {
                    a3.style._set = function(b5, c3) {
                      a3.style[b5] = c3;
                    }, a3.style._clear = function(b5) {
                      a3.style[b5] = "";
                    };
                  }
                  a3._webAnimationsPatchedStyle = a3.style;
                }
              }
              var g = "_webAnimationsUpdateSvgTransformAttr", h = { cssText: 1, length: 1, parentRule: 1 }, i = { getPropertyCSSValue: 1, getPropertyPriority: 1, getPropertyValue: 1, item: 1, removeProperty: 1, setProperty: 1 }, j = { removeProperty: 1, setProperty: 1 };
              e.prototype = { get cssText() {
                return this._surrogateStyle.cssText;
              }, set cssText(a3) {
                for (var b3 = {}, c3 = 0; c3 < this._surrogateStyle.length; c3++) b3[this._surrogateStyle[c3]] = true;
                this._surrogateStyle.cssText = a3, this._updateIndices();
                for (var c3 = 0; c3 < this._surrogateStyle.length; c3++) b3[this._surrogateStyle[c3]] = true;
                for (var d3 in b3) this._isAnimatedProperty[d3] || this._style.setProperty(d3, this._surrogateStyle.getPropertyValue(d3));
              }, get length() {
                return this._surrogateStyle.length;
              }, get parentRule() {
                return this._style.parentRule;
              }, _updateIndices: function() {
                for (; this._length < this._surrogateStyle.length; ) Object.defineProperty(this, this._length, { configurable: true, enumerable: false, get: /* @__PURE__ */ function(a3) {
                  return function() {
                    return this._surrogateStyle[a3];
                  };
                }(this._length) }), this._length++;
                for (; this._length > this._surrogateStyle.length; ) this._length--, Object.defineProperty(this, this._length, { configurable: true, enumerable: false, value: void 0 });
              }, _set: function(b3, c3) {
                this._style[b3] = c3, this._isAnimatedProperty[b3] = true, this._updateSvgTransformAttr && "transform" == a2.unprefixedPropertyName(b3) && (null == this._savedTransformAttr && (this._savedTransformAttr = this._element.getAttribute("transform")), this._element.setAttribute("transform", a2.transformToSvgMatrix(c3)));
              }, _clear: function(b3) {
                this._style[b3] = this._surrogateStyle[b3], this._updateSvgTransformAttr && "transform" == a2.unprefixedPropertyName(b3) && (this._savedTransformAttr ? this._element.setAttribute("transform", this._savedTransformAttr) : this._element.removeAttribute("transform"), this._savedTransformAttr = null), delete this._isAnimatedProperty[b3];
              } };
              for (var k in i) e.prototype[k] = /* @__PURE__ */ function(a3, b3) {
                return function() {
                  var c3 = this._surrogateStyle[a3].apply(this._surrogateStyle, arguments);
                  return b3 && (this._isAnimatedProperty[arguments[0]] || this._style[a3].apply(this._style, arguments), this._updateIndices()), c3;
                };
              }(k, k in j);
              for (var l in document.documentElement.style) l in h || l in i || function(a3) {
                d2(e.prototype, a3, { get: function() {
                  return this._surrogateStyle[a3];
                }, set: function(b3) {
                  this._surrogateStyle[a3] = b3, this._updateIndices(), this._isAnimatedProperty[a3] || (this._style[a3] = b3);
                } });
              }(l);
              a2.apply = function(b3, c3, d3) {
                f(b3), b3.style._set(a2.propertyName(c3), d3);
              }, a2.clear = function(b3, c3) {
                b3._webAnimationsPatchedStyle && b3.style._clear(a2.propertyName(c3));
              };
            }(b), function(a2) {
              window.Element.prototype.animate = function(b2, c2) {
                var d2 = "";
                return c2 && c2.id && (d2 = c2.id), a2.timeline._play(a2.KeyframeEffect(this, b2, c2, d2));
              };
            }(b), function(a2, b2) {
              function c2(a3, b3, d2) {
                if ("number" == typeof a3 && "number" == typeof b3) return a3 * (1 - d2) + b3 * d2;
                if ("boolean" == typeof a3 && "boolean" == typeof b3) return d2 < 0.5 ? a3 : b3;
                if (a3.length == b3.length) {
                  for (var e = [], f = 0; f < a3.length; f++) e.push(c2(a3[f], b3[f], d2));
                  return e;
                }
                throw "Mismatched interpolation arguments " + a3 + ":" + b3;
              }
              a2.Interpolation = function(a3, b3, d2) {
                return function(e) {
                  return d2(c2(a3, b3, e));
                };
              };
            }(b), function(a2, b2) {
              function c2(a3, b3, c3) {
                return Math.max(Math.min(a3, c3), b3);
              }
              function d2(b3, d3, e2) {
                var f = a2.dot(b3, d3);
                f = c2(f, -1, 1);
                var g = [];
                if (1 === f) g = b3;
                else for (var h = Math.acos(f), i = 1 * Math.sin(e2 * h) / Math.sqrt(1 - f * f), j = 0; j < 4; j++) g.push(b3[j] * (Math.cos(e2 * h) - f * i) + d3[j] * i);
                return g;
              }
              var e = /* @__PURE__ */ function() {
                function a3(a4, b4) {
                  for (var c4 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], d3 = 0; d3 < 4; d3++) for (var e2 = 0; e2 < 4; e2++) for (var f = 0; f < 4; f++) c4[d3][e2] += b4[d3][f] * a4[f][e2];
                  return c4;
                }
                function b3(a4) {
                  return 0 == a4[0][2] && 0 == a4[0][3] && 0 == a4[1][2] && 0 == a4[1][3] && 0 == a4[2][0] && 0 == a4[2][1] && 1 == a4[2][2] && 0 == a4[2][3] && 0 == a4[3][2] && 1 == a4[3][3];
                }
                function c3(c4, d3, e2, f, g) {
                  for (var h = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]], i = 0; i < 4; i++) h[i][3] = g[i];
                  for (var i = 0; i < 3; i++) for (var j = 0; j < 3; j++) h[3][i] += c4[j] * h[j][i];
                  var k = f[0], l = f[1], m = f[2], n = f[3], o = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];
                  o[0][0] = 1 - 2 * (l * l + m * m), o[0][1] = 2 * (k * l - m * n), o[0][2] = 2 * (k * m + l * n), o[1][0] = 2 * (k * l + m * n), o[1][1] = 1 - 2 * (k * k + m * m), o[1][2] = 2 * (l * m - k * n), o[2][0] = 2 * (k * m - l * n), o[2][1] = 2 * (l * m + k * n), o[2][2] = 1 - 2 * (k * k + l * l), h = a3(h, o);
                  var p = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];
                  e2[2] && (p[2][1] = e2[2], h = a3(h, p)), e2[1] && (p[2][1] = 0, p[2][0] = e2[0], h = a3(h, p)), e2[0] && (p[2][0] = 0, p[1][0] = e2[0], h = a3(h, p));
                  for (var i = 0; i < 3; i++) for (var j = 0; j < 3; j++) h[i][j] *= d3[i];
                  return b3(h) ? [h[0][0], h[0][1], h[1][0], h[1][1], h[3][0], h[3][1]] : h[0].concat(h[1], h[2], h[3]);
                }
                return c3;
              }();
              a2.composeMatrix = e, a2.quat = d2;
            }(b), function(a2, b2, c2) {
              a2.sequenceNumber = 0;
              var d2 = function(a3, b3, c3) {
                this.target = a3, this.currentTime = b3, this.timelineTime = c3, this.type = "finish", this.bubbles = false, this.cancelable = false, this.currentTarget = a3, this.defaultPrevented = false, this.eventPhase = Event.AT_TARGET, this.timeStamp = Date.now();
              };
              b2.Animation = function(b3) {
                this.id = "", b3 && b3._id && (this.id = b3._id), this._sequenceNumber = a2.sequenceNumber++, this._currentTime = 0, this._startTime = null, this._paused = false, this._playbackRate = 1, this._inTimeline = true, this._finishedFlag = true, this.onfinish = null, this._finishHandlers = [], this._effect = b3, this._inEffect = this._effect._update(0), this._idle = true, this._currentTimePending = false;
              }, b2.Animation.prototype = { _ensureAlive: function() {
                this.playbackRate < 0 && 0 === this.currentTime ? this._inEffect = this._effect._update(-1) : this._inEffect = this._effect._update(this.currentTime), this._inTimeline || !this._inEffect && this._finishedFlag || (this._inTimeline = true, b2.timeline._animations.push(this));
              }, _tickCurrentTime: function(a3, b3) {
                a3 != this._currentTime && (this._currentTime = a3, this._isFinished && !b3 && (this._currentTime = this._playbackRate > 0 ? this._totalDuration : 0), this._ensureAlive());
              }, get currentTime() {
                return this._idle || this._currentTimePending ? null : this._currentTime;
              }, set currentTime(a3) {
                a3 = +a3, isNaN(a3) || (b2.restart(), this._paused || null == this._startTime || (this._startTime = this._timeline.currentTime - a3 / this._playbackRate), this._currentTimePending = false, this._currentTime != a3 && (this._idle && (this._idle = false, this._paused = true), this._tickCurrentTime(a3, true), b2.applyDirtiedAnimation(this)));
              }, get startTime() {
                return this._startTime;
              }, set startTime(a3) {
                a3 = +a3, isNaN(a3) || this._paused || this._idle || (this._startTime = a3, this._tickCurrentTime((this._timeline.currentTime - this._startTime) * this.playbackRate), b2.applyDirtiedAnimation(this));
              }, get playbackRate() {
                return this._playbackRate;
              }, set playbackRate(a3) {
                if (a3 != this._playbackRate) {
                  var c3 = this.currentTime;
                  this._playbackRate = a3, this._startTime = null, "paused" != this.playState && "idle" != this.playState && (this._finishedFlag = false, this._idle = false, this._ensureAlive(), b2.applyDirtiedAnimation(this)), null != c3 && (this.currentTime = c3);
                }
              }, get _isFinished() {
                return !this._idle && (this._playbackRate > 0 && this._currentTime >= this._totalDuration || this._playbackRate < 0 && this._currentTime <= 0);
              }, get _totalDuration() {
                return this._effect._totalDuration;
              }, get playState() {
                return this._idle ? "idle" : null == this._startTime && !this._paused && 0 != this.playbackRate || this._currentTimePending ? "pending" : this._paused ? "paused" : this._isFinished ? "finished" : "running";
              }, _rewind: function() {
                if (this._playbackRate >= 0) this._currentTime = 0;
                else {
                  if (!(this._totalDuration < 1 / 0)) throw new DOMException("Unable to rewind negative playback rate animation with infinite duration", "InvalidStateError");
                  this._currentTime = this._totalDuration;
                }
              }, play: function() {
                this._paused = false, (this._isFinished || this._idle) && (this._rewind(), this._startTime = null), this._finishedFlag = false, this._idle = false, this._ensureAlive(), b2.applyDirtiedAnimation(this);
              }, pause: function() {
                this._isFinished || this._paused || this._idle ? this._idle && (this._rewind(), this._idle = false) : this._currentTimePending = true, this._startTime = null, this._paused = true;
              }, finish: function() {
                this._idle || (this.currentTime = this._playbackRate > 0 ? this._totalDuration : 0, this._startTime = this._totalDuration - this.currentTime, this._currentTimePending = false, b2.applyDirtiedAnimation(this));
              }, cancel: function() {
                this._inEffect && (this._inEffect = false, this._idle = true, this._paused = false, this._finishedFlag = true, this._currentTime = 0, this._startTime = null, this._effect._update(null), b2.applyDirtiedAnimation(this));
              }, reverse: function() {
                this.playbackRate *= -1, this.play();
              }, addEventListener: function(a3, b3) {
                "function" == typeof b3 && "finish" == a3 && this._finishHandlers.push(b3);
              }, removeEventListener: function(a3, b3) {
                if ("finish" == a3) {
                  var c3 = this._finishHandlers.indexOf(b3);
                  c3 >= 0 && this._finishHandlers.splice(c3, 1);
                }
              }, _fireEvents: function(a3) {
                if (this._isFinished) {
                  if (!this._finishedFlag) {
                    var b3 = new d2(this, this._currentTime, a3), c3 = this._finishHandlers.concat(this.onfinish ? [this.onfinish] : []);
                    setTimeout(function() {
                      c3.forEach(function(a4) {
                        a4.call(b3.target, b3);
                      });
                    }, 0), this._finishedFlag = true;
                  }
                } else this._finishedFlag = false;
              }, _tick: function(a3, b3) {
                this._idle || this._paused || (null == this._startTime ? b3 && (this.startTime = a3 - this._currentTime / this.playbackRate) : this._isFinished || this._tickCurrentTime((a3 - this._startTime) * this.playbackRate)), b3 && (this._currentTimePending = false, this._fireEvents(a3));
              }, get _needsTick() {
                return this.playState in { pending: 1, running: 1 } || !this._finishedFlag;
              }, _targetAnimations: function() {
                var a3 = this._effect._target;
                return a3._activeAnimations || (a3._activeAnimations = []), a3._activeAnimations;
              }, _markTarget: function() {
                var a3 = this._targetAnimations();
                -1 === a3.indexOf(this) && a3.push(this);
              }, _unmarkTarget: function() {
                var a3 = this._targetAnimations(), b3 = a3.indexOf(this);
                -1 !== b3 && a3.splice(b3, 1);
              } };
            }(a, b), function(a2, b2, c2) {
              function d2(a3) {
                var b3 = j;
                j = [], a3 < q.currentTime && (a3 = q.currentTime), q._animations.sort(e), q._animations = h(a3, true, q._animations)[0], b3.forEach(function(b4) {
                  b4[1](a3);
                }), g(), l = void 0;
              }
              function e(a3, b3) {
                return a3._sequenceNumber - b3._sequenceNumber;
              }
              function f() {
                this._animations = [], this.currentTime = window.performance && performance.now ? performance.now() : 0;
              }
              function g() {
                o.forEach(function(a3) {
                  a3();
                }), o.length = 0;
              }
              function h(a3, c3, d3) {
                p = true, n = false, b2.timeline.currentTime = a3, m = false;
                var e2 = [], f2 = [], g2 = [], h2 = [];
                return d3.forEach(function(b3) {
                  b3._tick(a3, c3), b3._inEffect ? (f2.push(b3._effect), b3._markTarget()) : (e2.push(b3._effect), b3._unmarkTarget()), b3._needsTick && (m = true);
                  var d4 = b3._inEffect || b3._needsTick;
                  b3._inTimeline = d4, d4 ? g2.push(b3) : h2.push(b3);
                }), o.push.apply(o, e2), o.push.apply(o, f2), m && requestAnimationFrame(function() {
                }), p = false, [g2, h2];
              }
              var i = window.requestAnimationFrame, j = [], k = 0;
              window.requestAnimationFrame = function(a3) {
                var b3 = k++;
                return 0 == j.length && i(d2), j.push([b3, a3]), b3;
              }, window.cancelAnimationFrame = function(a3) {
                j.forEach(function(b3) {
                  b3[0] == a3 && (b3[1] = function() {
                  });
                });
              }, f.prototype = { _play: function(c3) {
                c3._timing = a2.normalizeTimingInput(c3.timing);
                var d3 = new b2.Animation(c3);
                return d3._idle = false, d3._timeline = this, this._animations.push(d3), b2.restart(), b2.applyDirtiedAnimation(d3), d3;
              } };
              var l = void 0, m = false, n = false;
              b2.restart = function() {
                return m || (m = true, requestAnimationFrame(function() {
                }), n = true), n;
              }, b2.applyDirtiedAnimation = function(a3) {
                if (!p) {
                  a3._markTarget();
                  var c3 = a3._targetAnimations();
                  c3.sort(e), h(b2.timeline.currentTime, false, c3.slice())[1].forEach(function(a4) {
                    var b3 = q._animations.indexOf(a4);
                    -1 !== b3 && q._animations.splice(b3, 1);
                  }), g();
                }
              };
              var o = [], p = false, q = new f();
              b2.timeline = q;
            }(a, b), function(a2, b2) {
              function c2(a3, b3) {
                for (var c3 = 0, d3 = 0; d3 < a3.length; d3++) c3 += a3[d3] * b3[d3];
                return c3;
              }
              function d2(a3, b3) {
                return [a3[0] * b3[0] + a3[4] * b3[1] + a3[8] * b3[2] + a3[12] * b3[3], a3[1] * b3[0] + a3[5] * b3[1] + a3[9] * b3[2] + a3[13] * b3[3], a3[2] * b3[0] + a3[6] * b3[1] + a3[10] * b3[2] + a3[14] * b3[3], a3[3] * b3[0] + a3[7] * b3[1] + a3[11] * b3[2] + a3[15] * b3[3], a3[0] * b3[4] + a3[4] * b3[5] + a3[8] * b3[6] + a3[12] * b3[7], a3[1] * b3[4] + a3[5] * b3[5] + a3[9] * b3[6] + a3[13] * b3[7], a3[2] * b3[4] + a3[6] * b3[5] + a3[10] * b3[6] + a3[14] * b3[7], a3[3] * b3[4] + a3[7] * b3[5] + a3[11] * b3[6] + a3[15] * b3[7], a3[0] * b3[8] + a3[4] * b3[9] + a3[8] * b3[10] + a3[12] * b3[11], a3[1] * b3[8] + a3[5] * b3[9] + a3[9] * b3[10] + a3[13] * b3[11], a3[2] * b3[8] + a3[6] * b3[9] + a3[10] * b3[10] + a3[14] * b3[11], a3[3] * b3[8] + a3[7] * b3[9] + a3[11] * b3[10] + a3[15] * b3[11], a3[0] * b3[12] + a3[4] * b3[13] + a3[8] * b3[14] + a3[12] * b3[15], a3[1] * b3[12] + a3[5] * b3[13] + a3[9] * b3[14] + a3[13] * b3[15], a3[2] * b3[12] + a3[6] * b3[13] + a3[10] * b3[14] + a3[14] * b3[15], a3[3] * b3[12] + a3[7] * b3[13] + a3[11] * b3[14] + a3[15] * b3[15]];
              }
              function e(a3) {
                var b3 = a3.rad || 0;
                return ((a3.deg || 0) / 360 + (a3.grad || 0) / 400 + (a3.turn || 0)) * (2 * Math.PI) + b3;
              }
              function f(a3) {
                switch (a3.t) {
                  case "rotatex":
                    var b3 = e(a3.d[0]);
                    return [1, 0, 0, 0, 0, Math.cos(b3), Math.sin(b3), 0, 0, -Math.sin(b3), Math.cos(b3), 0, 0, 0, 0, 1];
                  case "rotatey":
                    var b3 = e(a3.d[0]);
                    return [Math.cos(b3), 0, -Math.sin(b3), 0, 0, 1, 0, 0, Math.sin(b3), 0, Math.cos(b3), 0, 0, 0, 0, 1];
                  case "rotate":
                  case "rotatez":
                    var b3 = e(a3.d[0]);
                    return [Math.cos(b3), Math.sin(b3), 0, 0, -Math.sin(b3), Math.cos(b3), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "rotate3d":
                    var c3 = a3.d[0], d3 = a3.d[1], f2 = a3.d[2], b3 = e(a3.d[3]), g2 = c3 * c3 + d3 * d3 + f2 * f2;
                    if (0 === g2) c3 = 1, d3 = 0, f2 = 0;
                    else if (1 !== g2) {
                      var h2 = Math.sqrt(g2);
                      c3 /= h2, d3 /= h2, f2 /= h2;
                    }
                    var i2 = Math.sin(b3 / 2), j = i2 * Math.cos(b3 / 2), k = i2 * i2;
                    return [1 - 2 * (d3 * d3 + f2 * f2) * k, 2 * (c3 * d3 * k + f2 * j), 2 * (c3 * f2 * k - d3 * j), 0, 2 * (c3 * d3 * k - f2 * j), 1 - 2 * (c3 * c3 + f2 * f2) * k, 2 * (d3 * f2 * k + c3 * j), 0, 2 * (c3 * f2 * k + d3 * j), 2 * (d3 * f2 * k - c3 * j), 1 - 2 * (c3 * c3 + d3 * d3) * k, 0, 0, 0, 0, 1];
                  case "scale":
                    return [a3.d[0], 0, 0, 0, 0, a3.d[1], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "scalex":
                    return [a3.d[0], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "scaley":
                    return [1, 0, 0, 0, 0, a3.d[0], 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "scalez":
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, a3.d[0], 0, 0, 0, 0, 1];
                  case "scale3d":
                    return [a3.d[0], 0, 0, 0, 0, a3.d[1], 0, 0, 0, 0, a3.d[2], 0, 0, 0, 0, 1];
                  case "skew":
                    var l = e(a3.d[0]), m = e(a3.d[1]);
                    return [1, Math.tan(m), 0, 0, Math.tan(l), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "skewx":
                    var b3 = e(a3.d[0]);
                    return [1, 0, 0, 0, Math.tan(b3), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "skewy":
                    var b3 = e(a3.d[0]);
                    return [1, Math.tan(b3), 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
                  case "translate":
                    var c3 = a3.d[0].px || 0, d3 = a3.d[1].px || 0;
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c3, d3, 0, 1];
                  case "translatex":
                    var c3 = a3.d[0].px || 0;
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c3, 0, 0, 1];
                  case "translatey":
                    var d3 = a3.d[0].px || 0;
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, d3, 0, 1];
                  case "translatez":
                    var f2 = a3.d[0].px || 0;
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, f2, 1];
                  case "translate3d":
                    var c3 = a3.d[0].px || 0, d3 = a3.d[1].px || 0, f2 = a3.d[2].px || 0;
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, c3, d3, f2, 1];
                  case "perspective":
                    return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, a3.d[0].px ? -1 / a3.d[0].px : 0, 0, 0, 0, 1];
                  case "matrix":
                    return [a3.d[0], a3.d[1], 0, 0, a3.d[2], a3.d[3], 0, 0, 0, 0, 1, 0, a3.d[4], a3.d[5], 0, 1];
                  case "matrix3d":
                    return a3.d;
                }
              }
              function g(a3) {
                return 0 === a3.length ? [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] : a3.map(f).reduce(d2);
              }
              function h(a3) {
                return [i(g(a3))];
              }
              var i = /* @__PURE__ */ function() {
                function a3(a4) {
                  return a4[0][0] * a4[1][1] * a4[2][2] + a4[1][0] * a4[2][1] * a4[0][2] + a4[2][0] * a4[0][1] * a4[1][2] - a4[0][2] * a4[1][1] * a4[2][0] - a4[1][2] * a4[2][1] * a4[0][0] - a4[2][2] * a4[0][1] * a4[1][0];
                }
                function b3(b4) {
                  for (var c3 = 1 / a3(b4), d4 = b4[0][0], e3 = b4[0][1], f3 = b4[0][2], g3 = b4[1][0], h3 = b4[1][1], i3 = b4[1][2], j2 = b4[2][0], k = b4[2][1], l = b4[2][2], m = [[(h3 * l - i3 * k) * c3, (f3 * k - e3 * l) * c3, (e3 * i3 - f3 * h3) * c3, 0], [(i3 * j2 - g3 * l) * c3, (d4 * l - f3 * j2) * c3, (f3 * g3 - d4 * i3) * c3, 0], [(g3 * k - h3 * j2) * c3, (j2 * e3 - d4 * k) * c3, (d4 * h3 - e3 * g3) * c3, 0]], n = [], o = 0; o < 3; o++) {
                    for (var p = 0, q = 0; q < 3; q++) p += b4[3][q] * m[q][o];
                    n.push(p);
                  }
                  return n.push(1), m.push(n), m;
                }
                function d3(a4) {
                  return [[a4[0][0], a4[1][0], a4[2][0], a4[3][0]], [a4[0][1], a4[1][1], a4[2][1], a4[3][1]], [a4[0][2], a4[1][2], a4[2][2], a4[3][2]], [a4[0][3], a4[1][3], a4[2][3], a4[3][3]]];
                }
                function e2(a4, b4) {
                  for (var c3 = [], d4 = 0; d4 < 4; d4++) {
                    for (var e3 = 0, f3 = 0; f3 < 4; f3++) e3 += a4[f3] * b4[f3][d4];
                    c3.push(e3);
                  }
                  return c3;
                }
                function f2(a4) {
                  var b4 = g2(a4);
                  return [a4[0] / b4, a4[1] / b4, a4[2] / b4];
                }
                function g2(a4) {
                  return Math.sqrt(a4[0] * a4[0] + a4[1] * a4[1] + a4[2] * a4[2]);
                }
                function h2(a4, b4, c3, d4) {
                  return [c3 * a4[0] + d4 * b4[0], c3 * a4[1] + d4 * b4[1], c3 * a4[2] + d4 * b4[2]];
                }
                function i2(a4, b4) {
                  return [a4[1] * b4[2] - a4[2] * b4[1], a4[2] * b4[0] - a4[0] * b4[2], a4[0] * b4[1] - a4[1] * b4[0]];
                }
                function j(j2) {
                  var k = [j2.slice(0, 4), j2.slice(4, 8), j2.slice(8, 12), j2.slice(12, 16)];
                  if (1 !== k[3][3]) return null;
                  for (var l = [], m = 0; m < 4; m++) l.push(k[m].slice());
                  for (var m = 0; m < 3; m++) l[m][3] = 0;
                  if (0 === a3(l)) return null;
                  var n, o = [];
                  k[0][3] || k[1][3] || k[2][3] ? (o.push(k[0][3]), o.push(k[1][3]), o.push(k[2][3]), o.push(k[3][3]), n = e2(o, d3(b3(l)))) : n = [0, 0, 0, 1];
                  var p = k[3].slice(0, 3), q = [];
                  q.push(k[0].slice(0, 3));
                  var r = [];
                  r.push(g2(q[0])), q[0] = f2(q[0]);
                  var s = [];
                  q.push(k[1].slice(0, 3)), s.push(c2(q[0], q[1])), q[1] = h2(q[1], q[0], 1, -s[0]), r.push(g2(q[1])), q[1] = f2(q[1]), s[0] /= r[1], q.push(k[2].slice(0, 3)), s.push(c2(q[0], q[2])), q[2] = h2(q[2], q[0], 1, -s[1]), s.push(c2(q[1], q[2])), q[2] = h2(q[2], q[1], 1, -s[2]), r.push(g2(q[2])), q[2] = f2(q[2]), s[1] /= r[2], s[2] /= r[2];
                  var t = i2(q[1], q[2]);
                  if (c2(q[0], t) < 0) for (var m = 0; m < 3; m++) r[m] *= -1, q[m][0] *= -1, q[m][1] *= -1, q[m][2] *= -1;
                  var u, v, w = q[0][0] + q[1][1] + q[2][2] + 1;
                  return w > 1e-4 ? (u = 0.5 / Math.sqrt(w), v = [(q[2][1] - q[1][2]) * u, (q[0][2] - q[2][0]) * u, (q[1][0] - q[0][1]) * u, 0.25 / u]) : q[0][0] > q[1][1] && q[0][0] > q[2][2] ? (u = 2 * Math.sqrt(1 + q[0][0] - q[1][1] - q[2][2]), v = [0.25 * u, (q[0][1] + q[1][0]) / u, (q[0][2] + q[2][0]) / u, (q[2][1] - q[1][2]) / u]) : q[1][1] > q[2][2] ? (u = 2 * Math.sqrt(1 + q[1][1] - q[0][0] - q[2][2]), v = [(q[0][1] + q[1][0]) / u, 0.25 * u, (q[1][2] + q[2][1]) / u, (q[0][2] - q[2][0]) / u]) : (u = 2 * Math.sqrt(1 + q[2][2] - q[0][0] - q[1][1]), v = [(q[0][2] + q[2][0]) / u, (q[1][2] + q[2][1]) / u, 0.25 * u, (q[1][0] - q[0][1]) / u]), [p, r, s, v, n];
                }
                return j;
              }();
              a2.dot = c2, a2.makeMatrixDecomposition = h, a2.transformListToMatrix = g;
            }(b), function(a2) {
              function b2(a3, b3) {
                var c3 = a3.exec(b3);
                if (c3) return c3 = a3.ignoreCase ? c3[0].toLowerCase() : c3[0], [c3, b3.substr(c3.length)];
              }
              function c2(a3, b3) {
                b3 = b3.replace(/^\s*/, "");
                var c3 = a3(b3);
                if (c3) return [c3[0], c3[1].replace(/^\s*/, "")];
              }
              function d2(a3, d3, e2) {
                a3 = c2.bind(null, a3);
                for (var f2 = []; ; ) {
                  var g2 = a3(e2);
                  if (!g2) return [f2, e2];
                  if (f2.push(g2[0]), e2 = g2[1], !(g2 = b2(d3, e2)) || "" == g2[1]) return [f2, e2];
                  e2 = g2[1];
                }
              }
              function e(a3, b3) {
                for (var c3 = 0, d3 = 0; d3 < b3.length && (!/\s|,/.test(b3[d3]) || 0 != c3); d3++) if ("(" == b3[d3]) c3++;
                else if (")" == b3[d3] && (c3--, 0 == c3 && d3++, c3 <= 0)) break;
                var e2 = a3(b3.substr(0, d3));
                return void 0 == e2 ? void 0 : [e2, b3.substr(d3)];
              }
              function f(a3, b3) {
                for (var c3 = a3, d3 = b3; c3 && d3; ) c3 > d3 ? c3 %= d3 : d3 %= c3;
                return c3 = a3 * b3 / (c3 + d3);
              }
              function g(a3) {
                return function(b3) {
                  var c3 = a3(b3);
                  return c3 && (c3[0] = void 0), c3;
                };
              }
              function h(a3, b3) {
                return function(c3) {
                  return a3(c3) || [b3, c3];
                };
              }
              function i(b3, c3) {
                for (var d3 = [], e2 = 0; e2 < b3.length; e2++) {
                  var f2 = a2.consumeTrimmed(b3[e2], c3);
                  if (!f2 || "" == f2[0]) return;
                  void 0 !== f2[0] && d3.push(f2[0]), c3 = f2[1];
                }
                if ("" == c3) return d3;
              }
              function j(a3, b3, c3, d3, e2) {
                for (var g2 = [], h2 = [], i2 = [], j2 = f(d3.length, e2.length), k2 = 0; k2 < j2; k2++) {
                  var l = b3(d3[k2 % d3.length], e2[k2 % e2.length]);
                  if (!l) return;
                  g2.push(l[0]), h2.push(l[1]), i2.push(l[2]);
                }
                return [g2, h2, function(b4) {
                  var d4 = b4.map(function(a4, b5) {
                    return i2[b5](a4);
                  }).join(c3);
                  return a3 ? a3(d4) : d4;
                }];
              }
              function k(a3, b3, c3) {
                for (var d3 = [], e2 = [], f2 = [], g2 = 0, h2 = 0; h2 < c3.length; h2++) if ("function" == typeof c3[h2]) {
                  var i2 = c3[h2](a3[g2], b3[g2++]);
                  d3.push(i2[0]), e2.push(i2[1]), f2.push(i2[2]);
                } else !function(a4) {
                  d3.push(false), e2.push(false), f2.push(function() {
                    return c3[a4];
                  });
                }(h2);
                return [d3, e2, function(a4) {
                  for (var b4 = "", c4 = 0; c4 < a4.length; c4++) b4 += f2[c4](a4[c4]);
                  return b4;
                }];
              }
              a2.consumeToken = b2, a2.consumeTrimmed = c2, a2.consumeRepeated = d2, a2.consumeParenthesised = e, a2.ignore = g, a2.optional = h, a2.consumeList = i, a2.mergeNestedRepeated = j.bind(null, null), a2.mergeWrappedNestedRepeated = j, a2.mergeList = k;
            }(b), function(a2) {
              function b2(b3) {
                function c3(b4) {
                  var c4 = a2.consumeToken(/^inset/i, b4);
                  return c4 ? (d3.inset = true, c4) : (c4 = a2.consumeLengthOrPercent(b4)) ? (d3.lengths.push(c4[0]), c4) : (c4 = a2.consumeColor(b4), c4 ? (d3.color = c4[0], c4) : void 0);
                }
                var d3 = { inset: false, lengths: [], color: null }, e2 = a2.consumeRepeated(c3, /^/, b3);
                if (e2 && e2[0].length) return [d3, e2[1]];
              }
              function c2(c3) {
                var d3 = a2.consumeRepeated(b2, /^,/, c3);
                if (d3 && "" == d3[1]) return d3[0];
              }
              function d2(b3, c3) {
                for (; b3.lengths.length < Math.max(b3.lengths.length, c3.lengths.length); ) b3.lengths.push({ px: 0 });
                for (; c3.lengths.length < Math.max(b3.lengths.length, c3.lengths.length); ) c3.lengths.push({ px: 0 });
                if (b3.inset == c3.inset && !!b3.color == !!c3.color) {
                  for (var d3, e2 = [], f2 = [[], 0], g = [[], 0], h = 0; h < b3.lengths.length; h++) {
                    var i = a2.mergeDimensions(b3.lengths[h], c3.lengths[h], 2 == h);
                    f2[0].push(i[0]), g[0].push(i[1]), e2.push(i[2]);
                  }
                  if (b3.color && c3.color) {
                    var j = a2.mergeColors(b3.color, c3.color);
                    f2[1] = j[0], g[1] = j[1], d3 = j[2];
                  }
                  return [f2, g, function(a3) {
                    for (var c4 = b3.inset ? "inset " : " ", f3 = 0; f3 < e2.length; f3++) c4 += e2[f3](a3[0][f3]) + " ";
                    return d3 && (c4 += d3(a3[1])), c4;
                  }];
                }
              }
              function e(b3, c3, d3, e2) {
                function f2(a3) {
                  return { inset: a3, color: [0, 0, 0, 0], lengths: [{ px: 0 }, { px: 0 }, { px: 0 }, { px: 0 }] };
                }
                for (var g = [], h = [], i = 0; i < d3.length || i < e2.length; i++) {
                  var j = d3[i] || f2(e2[i].inset), k = e2[i] || f2(d3[i].inset);
                  g.push(j), h.push(k);
                }
                return a2.mergeNestedRepeated(b3, c3, g, h);
              }
              var f = e.bind(null, d2, ", ");
              a2.addPropertiesHandler(c2, f, ["box-shadow", "text-shadow"]);
            }(b), function(a2, b2) {
              function c2(a3) {
                return a3.toFixed(3).replace(/0+$/, "").replace(/\.$/, "");
              }
              function d2(a3, b3, c3) {
                return Math.min(b3, Math.max(a3, c3));
              }
              function e(a3) {
                if (/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a3)) return Number(a3);
              }
              function f(a3, b3) {
                return [a3, b3, c2];
              }
              function g(a3, b3) {
                if (0 != a3) return i(0, 1 / 0)(a3, b3);
              }
              function h(a3, b3) {
                return [a3, b3, function(a4) {
                  return Math.round(d2(1, 1 / 0, a4));
                }];
              }
              function i(a3, b3) {
                return function(e2, f2) {
                  return [e2, f2, function(e3) {
                    return c2(d2(a3, b3, e3));
                  }];
                };
              }
              function j(a3) {
                var b3 = a3.trim().split(/\s*[\s,]\s*/);
                if (0 !== b3.length) {
                  for (var c3 = [], d3 = 0; d3 < b3.length; d3++) {
                    var f2 = e(b3[d3]);
                    if (void 0 === f2) return;
                    c3.push(f2);
                  }
                  return c3;
                }
              }
              function k(a3, b3) {
                if (a3.length == b3.length) return [a3, b3, function(a4) {
                  return a4.map(c2).join(" ");
                }];
              }
              function l(a3, b3) {
                return [a3, b3, Math.round];
              }
              a2.clamp = d2, a2.addPropertiesHandler(j, k, ["stroke-dasharray"]), a2.addPropertiesHandler(e, i(0, 1 / 0), ["border-image-width", "line-height"]), a2.addPropertiesHandler(e, i(0, 1), ["opacity", "shape-image-threshold"]), a2.addPropertiesHandler(e, g, ["flex-grow", "flex-shrink"]), a2.addPropertiesHandler(e, h, ["orphans", "widows"]), a2.addPropertiesHandler(e, l, ["z-index"]), a2.parseNumber = e, a2.parseNumberList = j, a2.mergeNumbers = f, a2.numberToString = c2;
            }(b), function(a2, b2) {
              function c2(a3, b3) {
                if ("visible" == a3 || "visible" == b3) return [0, 1, function(c3) {
                  return c3 <= 0 ? a3 : c3 >= 1 ? b3 : "visible";
                }];
              }
              a2.addPropertiesHandler(String, c2, ["visibility"]);
            }(b), function(a2, b2) {
              function c2(a3) {
                a3 = a3.trim(), f.fillStyle = "#000", f.fillStyle = a3;
                var b3 = f.fillStyle;
                if (f.fillStyle = "#fff", f.fillStyle = a3, b3 == f.fillStyle) {
                  f.fillRect(0, 0, 1, 1);
                  var c3 = f.getImageData(0, 0, 1, 1).data;
                  f.clearRect(0, 0, 1, 1);
                  var d3 = c3[3] / 255;
                  return [c3[0] * d3, c3[1] * d3, c3[2] * d3, d3];
                }
              }
              function d2(b3, c3) {
                return [b3, c3, function(b4) {
                  function c4(a3) {
                    return Math.max(0, Math.min(255, a3));
                  }
                  if (b4[3]) for (var d3 = 0; d3 < 3; d3++) b4[d3] = Math.round(c4(b4[d3] / b4[3]));
                  return b4[3] = a2.numberToString(a2.clamp(0, 1, b4[3])), "rgba(" + b4.join(",") + ")";
                }];
              }
              var e = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
              e.width = e.height = 1;
              var f = e.getContext("2d");
              a2.addPropertiesHandler(c2, d2, ["background-color", "border-bottom-color", "border-left-color", "border-right-color", "border-top-color", "color", "fill", "flood-color", "lighting-color", "outline-color", "stop-color", "stroke", "text-decoration-color"]), a2.consumeColor = a2.consumeParenthesised.bind(null, c2), a2.mergeColors = d2;
            }(b), function(a2, b2) {
              function c2(a3) {
                function b3() {
                  var b4 = h2.exec(a3);
                  g2 = b4 ? b4[0] : void 0;
                }
                function c3() {
                  var a4 = Number(g2);
                  return b3(), a4;
                }
                function d3() {
                  if ("(" !== g2) return c3();
                  b3();
                  var a4 = f2();
                  return ")" !== g2 ? NaN : (b3(), a4);
                }
                function e2() {
                  for (var a4 = d3(); "*" === g2 || "/" === g2; ) {
                    var c4 = g2;
                    b3();
                    var e3 = d3();
                    "*" === c4 ? a4 *= e3 : a4 /= e3;
                  }
                  return a4;
                }
                function f2() {
                  for (var a4 = e2(); "+" === g2 || "-" === g2; ) {
                    var c4 = g2;
                    b3();
                    var d4 = e2();
                    "+" === c4 ? a4 += d4 : a4 -= d4;
                  }
                  return a4;
                }
                var g2, h2 = /([\+\-\w\.]+|[\(\)\*\/])/g;
                return b3(), f2();
              }
              function d2(a3, b3) {
                if ("0" == (b3 = b3.trim().toLowerCase()) && "px".search(a3) >= 0) return { px: 0 };
                if (/^[^(]*$|^calc/.test(b3)) {
                  b3 = b3.replace(/calc\(/g, "(");
                  var d3 = {};
                  b3 = b3.replace(a3, function(a4) {
                    return d3[a4] = null, "U" + a4;
                  });
                  for (var e2 = "U(" + a3.source + ")", f2 = b3.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g, "N").replace(new RegExp("N" + e2, "g"), "D").replace(/\s[+-]\s/g, "O").replace(/\s/g, ""), g2 = [/N\*(D)/g, /(N|D)[*\/]N/g, /(N|D)O\1/g, /\((N|D)\)/g], h2 = 0; h2 < g2.length; ) g2[h2].test(f2) ? (f2 = f2.replace(g2[h2], "$1"), h2 = 0) : h2++;
                  if ("D" == f2) {
                    for (var i2 in d3) {
                      var j2 = c2(b3.replace(new RegExp("U" + i2, "g"), "").replace(new RegExp(e2, "g"), "*0"));
                      if (!isFinite(j2)) return;
                      d3[i2] = j2;
                    }
                    return d3;
                  }
                }
              }
              function e(a3, b3) {
                return f(a3, b3, true);
              }
              function f(b3, c3, d3) {
                var e2, f2 = [];
                for (e2 in b3) f2.push(e2);
                for (e2 in c3) f2.indexOf(e2) < 0 && f2.push(e2);
                return b3 = f2.map(function(a3) {
                  return b3[a3] || 0;
                }), c3 = f2.map(function(a3) {
                  return c3[a3] || 0;
                }), [b3, c3, function(b4) {
                  var c4 = b4.map(function(c5, e3) {
                    return 1 == b4.length && d3 && (c5 = Math.max(c5, 0)), a2.numberToString(c5) + f2[e3];
                  }).join(" + ");
                  return b4.length > 1 ? "calc(" + c4 + ")" : c4;
                }];
              }
              var g = "px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc", h = d2.bind(null, new RegExp(g, "g")), i = d2.bind(null, new RegExp(g + "|%", "g")), j = d2.bind(null, /deg|rad|grad|turn/g);
              a2.parseLength = h, a2.parseLengthOrPercent = i, a2.consumeLengthOrPercent = a2.consumeParenthesised.bind(null, i), a2.parseAngle = j, a2.mergeDimensions = f;
              var k = a2.consumeParenthesised.bind(null, h), l = a2.consumeRepeated.bind(void 0, k, /^/), m = a2.consumeRepeated.bind(void 0, l, /^,/);
              a2.consumeSizePairList = m;
              var n = function(a3) {
                var b3 = m(a3);
                if (b3 && "" == b3[1]) return b3[0];
              }, o = a2.mergeNestedRepeated.bind(void 0, e, " "), p = a2.mergeNestedRepeated.bind(void 0, o, ",");
              a2.mergeNonNegativeSizePair = o, a2.addPropertiesHandler(n, p, ["background-size"]), a2.addPropertiesHandler(i, e, ["border-bottom-width", "border-image-width", "border-left-width", "border-right-width", "border-top-width", "flex-basis", "font-size", "height", "line-height", "max-height", "max-width", "outline-width", "width"]), a2.addPropertiesHandler(i, f, ["border-bottom-left-radius", "border-bottom-right-radius", "border-top-left-radius", "border-top-right-radius", "bottom", "left", "letter-spacing", "margin-bottom", "margin-left", "margin-right", "margin-top", "min-height", "min-width", "outline-offset", "padding-bottom", "padding-left", "padding-right", "padding-top", "perspective", "right", "shape-margin", "stroke-dashoffset", "text-indent", "top", "vertical-align", "word-spacing"]);
            }(b), function(a2, b2) {
              function c2(b3) {
                return a2.consumeLengthOrPercent(b3) || a2.consumeToken(/^auto/, b3);
              }
              function d2(b3) {
                var d3 = a2.consumeList([a2.ignore(a2.consumeToken.bind(null, /^rect/)), a2.ignore(a2.consumeToken.bind(null, /^\(/)), a2.consumeRepeated.bind(null, c2, /^,/), a2.ignore(a2.consumeToken.bind(null, /^\)/))], b3);
                if (d3 && 4 == d3[0].length) return d3[0];
              }
              function e(b3, c3) {
                return "auto" == b3 || "auto" == c3 ? [true, false, function(d3) {
                  var e2 = d3 ? b3 : c3;
                  if ("auto" == e2) return "auto";
                  var f2 = a2.mergeDimensions(e2, e2);
                  return f2[2](f2[0]);
                }] : a2.mergeDimensions(b3, c3);
              }
              function f(a3) {
                return "rect(" + a3 + ")";
              }
              var g = a2.mergeWrappedNestedRepeated.bind(null, f, e, ", ");
              a2.parseBox = d2, a2.mergeBoxes = g, a2.addPropertiesHandler(d2, g, ["clip"]);
            }(b), function(a2, b2) {
              function c2(a3) {
                return function(b3) {
                  var c3 = 0;
                  return a3.map(function(a4) {
                    return a4 === k ? b3[c3++] : a4;
                  });
                };
              }
              function d2(a3) {
                return a3;
              }
              function e(b3) {
                if ("none" == (b3 = b3.toLowerCase().trim())) return [];
                for (var c3, d3 = /\s*(\w+)\(([^)]*)\)/g, e2 = [], f2 = 0; c3 = d3.exec(b3); ) {
                  if (c3.index != f2) return;
                  f2 = c3.index + c3[0].length;
                  var g2 = c3[1], h2 = n[g2];
                  if (!h2) return;
                  var i2 = c3[2].split(","), j2 = h2[0];
                  if (j2.length < i2.length) return;
                  for (var k2 = [], o = 0; o < j2.length; o++) {
                    var p, q = i2[o], r = j2[o];
                    if (void 0 === (p = q ? { A: function(b4) {
                      return "0" == b4.trim() ? m : a2.parseAngle(b4);
                    }, N: a2.parseNumber, T: a2.parseLengthOrPercent, L: a2.parseLength }[r.toUpperCase()](q) : { a: m, n: k2[0], t: l }[r])) return;
                    k2.push(p);
                  }
                  if (e2.push({ t: g2, d: k2 }), d3.lastIndex == b3.length) return e2;
                }
              }
              function f(a3) {
                return a3.toFixed(6).replace(".000000", "");
              }
              function g(b3, c3) {
                if (b3.decompositionPair !== c3) {
                  b3.decompositionPair = c3;
                  var d3 = a2.makeMatrixDecomposition(b3);
                }
                if (c3.decompositionPair !== b3) {
                  c3.decompositionPair = b3;
                  var e2 = a2.makeMatrixDecomposition(c3);
                }
                return null == d3[0] || null == e2[0] ? [[false], [true], function(a3) {
                  return a3 ? c3[0].d : b3[0].d;
                }] : (d3[0].push(0), e2[0].push(1), [d3, e2, function(b4) {
                  var c4 = a2.quat(d3[0][3], e2[0][3], b4[5]);
                  return a2.composeMatrix(b4[0], b4[1], b4[2], c4, b4[4]).map(f).join(",");
                }]);
              }
              function h(a3) {
                return a3.replace(/[xy]/, "");
              }
              function i(a3) {
                return a3.replace(/(x|y|z|3d)?$/, "3d");
              }
              function j(b3, c3) {
                var d3 = a2.makeMatrixDecomposition && true, e2 = false;
                if (!b3.length || !c3.length) {
                  b3.length || (e2 = true, b3 = c3, c3 = []);
                  for (var f2 = 0; f2 < b3.length; f2++) {
                    var j2 = b3[f2].t, k2 = b3[f2].d, l2 = "scale" == j2.substr(0, 5) ? 1 : 0;
                    c3.push({ t: j2, d: k2.map(function(a3) {
                      if ("number" == typeof a3) return l2;
                      var b4 = {};
                      for (var c4 in a3) b4[c4] = l2;
                      return b4;
                    }) });
                  }
                }
                var m2 = function(a3, b4) {
                  return "perspective" == a3 && "perspective" == b4 || ("matrix" == a3 || "matrix3d" == a3) && ("matrix" == b4 || "matrix3d" == b4);
                }, o = [], p = [], q = [];
                if (b3.length != c3.length) {
                  if (!d3) return;
                  var r = g(b3, c3);
                  o = [r[0]], p = [r[1]], q = [["matrix", [r[2]]]];
                } else for (var f2 = 0; f2 < b3.length; f2++) {
                  var j2, s = b3[f2].t, t = c3[f2].t, u = b3[f2].d, v = c3[f2].d, w = n[s], x = n[t];
                  if (m2(s, t)) {
                    if (!d3) return;
                    var r = g([b3[f2]], [c3[f2]]);
                    o.push(r[0]), p.push(r[1]), q.push(["matrix", [r[2]]]);
                  } else {
                    if (s == t) j2 = s;
                    else if (w[2] && x[2] && h(s) == h(t)) j2 = h(s), u = w[2](u), v = x[2](v);
                    else {
                      if (!w[1] || !x[1] || i(s) != i(t)) {
                        if (!d3) return;
                        var r = g(b3, c3);
                        o = [r[0]], p = [r[1]], q = [["matrix", [r[2]]]];
                        break;
                      }
                      j2 = i(s), u = w[1](u), v = x[1](v);
                    }
                    for (var y = [], z = [], A = [], B = 0; B < u.length; B++) {
                      var C = "number" == typeof u[B] ? a2.mergeNumbers : a2.mergeDimensions, r = C(u[B], v[B]);
                      y[B] = r[0], z[B] = r[1], A.push(r[2]);
                    }
                    o.push(y), p.push(z), q.push([j2, A]);
                  }
                }
                if (e2) {
                  var D = o;
                  o = p, p = D;
                }
                return [o, p, function(a3) {
                  return a3.map(function(a4, b4) {
                    var c4 = a4.map(function(a5, c5) {
                      return q[b4][1][c5](a5);
                    }).join(",");
                    return "matrix" == q[b4][0] && 16 == c4.split(",").length && (q[b4][0] = "matrix3d"), q[b4][0] + "(" + c4 + ")";
                  }).join(" ");
                }];
              }
              var k = null, l = { px: 0 }, m = { deg: 0 }, n = { matrix: ["NNNNNN", [k, k, 0, 0, k, k, 0, 0, 0, 0, 1, 0, k, k, 0, 1], d2], matrix3d: ["NNNNNNNNNNNNNNNN", d2], rotate: ["A"], rotatex: ["A"], rotatey: ["A"], rotatez: ["A"], rotate3d: ["NNNA"], perspective: ["L"], scale: ["Nn", c2([k, k, 1]), d2], scalex: ["N", c2([k, 1, 1]), c2([k, 1])], scaley: ["N", c2([1, k, 1]), c2([1, k])], scalez: ["N", c2([1, 1, k])], scale3d: ["NNN", d2], skew: ["Aa", null, d2], skewx: ["A", null, c2([k, m])], skewy: ["A", null, c2([m, k])], translate: ["Tt", c2([k, k, l]), d2], translatex: ["T", c2([k, l, l]), c2([k, l])], translatey: ["T", c2([l, k, l]), c2([l, k])], translatez: ["L", c2([l, l, k])], translate3d: ["TTL", d2] };
              a2.addPropertiesHandler(e, j, ["transform"]), a2.transformToSvgMatrix = function(b3) {
                var c3 = a2.transformListToMatrix(e(b3));
                return "matrix(" + f(c3[0]) + " " + f(c3[1]) + " " + f(c3[4]) + " " + f(c3[5]) + " " + f(c3[12]) + " " + f(c3[13]) + ")";
              };
            }(b), function(a2) {
              function b2(a3) {
                var b3 = Number(a3);
                if (!(isNaN(b3) || b3 < 100 || b3 > 900 || b3 % 100 != 0)) return b3;
              }
              function c2(b3) {
                return b3 = 100 * Math.round(b3 / 100), b3 = a2.clamp(100, 900, b3), 400 === b3 ? "normal" : 700 === b3 ? "bold" : String(b3);
              }
              function d2(a3, b3) {
                return [a3, b3, c2];
              }
              a2.addPropertiesHandler(b2, d2, ["font-weight"]);
            }(b), function(a2) {
              function b2(a3) {
                var b3 = {};
                for (var c3 in a3) b3[c3] = -a3[c3];
                return b3;
              }
              function c2(b3) {
                return a2.consumeToken(/^(left|center|right|top|bottom)\b/i, b3) || a2.consumeLengthOrPercent(b3);
              }
              function d2(b3, d3) {
                var e2 = a2.consumeRepeated(c2, /^/, d3);
                if (e2 && "" == e2[1]) {
                  var f2 = e2[0];
                  if (f2[0] = f2[0] || "center", f2[1] = f2[1] || "center", 3 == b3 && (f2[2] = f2[2] || { px: 0 }), f2.length == b3) {
                    if (/top|bottom/.test(f2[0]) || /left|right/.test(f2[1])) {
                      var h2 = f2[0];
                      f2[0] = f2[1], f2[1] = h2;
                    }
                    if (/left|right|center|Object/.test(f2[0]) && /top|bottom|center|Object/.test(f2[1])) return f2.map(function(a3) {
                      return "object" == typeof a3 ? a3 : g[a3];
                    });
                  }
                }
              }
              function e(d3) {
                var e2 = a2.consumeRepeated(c2, /^/, d3);
                if (e2) {
                  for (var f2 = e2[0], h2 = [{ "%": 50 }, { "%": 50 }], i2 = 0, j = false, k = 0; k < f2.length; k++) {
                    var l = f2[k];
                    "string" == typeof l ? (j = /bottom|right/.test(l), i2 = { left: 0, right: 0, center: i2, top: 1, bottom: 1 }[l], h2[i2] = g[l], "center" == l && i2++) : (j && (l = b2(l), l["%"] = (l["%"] || 0) + 100), h2[i2] = l, i2++, j = false);
                  }
                  return [h2, e2[1]];
                }
              }
              function f(b3) {
                var c3 = a2.consumeRepeated(e, /^,/, b3);
                if (c3 && "" == c3[1]) return c3[0];
              }
              var g = { left: { "%": 0 }, center: { "%": 50 }, right: { "%": 100 }, top: { "%": 0 }, bottom: { "%": 100 } }, h = a2.mergeNestedRepeated.bind(null, a2.mergeDimensions, " ");
              a2.addPropertiesHandler(d2.bind(null, 3), h, ["transform-origin"]), a2.addPropertiesHandler(d2.bind(null, 2), h, ["perspective-origin"]), a2.consumePosition = e, a2.mergeOffsetList = h;
              var i = a2.mergeNestedRepeated.bind(null, h, ", ");
              a2.addPropertiesHandler(f, i, ["background-position", "object-position"]);
            }(b), function(a2) {
              function b2(b3) {
                var c3 = a2.consumeToken(/^circle/, b3);
                if (c3 && c3[0]) return ["circle"].concat(a2.consumeList([a2.ignore(a2.consumeToken.bind(void 0, /^\(/)), d2, a2.ignore(a2.consumeToken.bind(void 0, /^at/)), a2.consumePosition, a2.ignore(a2.consumeToken.bind(void 0, /^\)/))], c3[1]));
                var f2 = a2.consumeToken(/^ellipse/, b3);
                if (f2 && f2[0]) return ["ellipse"].concat(a2.consumeList([a2.ignore(a2.consumeToken.bind(void 0, /^\(/)), e, a2.ignore(a2.consumeToken.bind(void 0, /^at/)), a2.consumePosition, a2.ignore(a2.consumeToken.bind(void 0, /^\)/))], f2[1]));
                var g2 = a2.consumeToken(/^polygon/, b3);
                return g2 && g2[0] ? ["polygon"].concat(a2.consumeList([a2.ignore(a2.consumeToken.bind(void 0, /^\(/)), a2.optional(a2.consumeToken.bind(void 0, /^nonzero\s*,|^evenodd\s*,/), "nonzero,"), a2.consumeSizePairList, a2.ignore(a2.consumeToken.bind(void 0, /^\)/))], g2[1])) : void 0;
              }
              function c2(b3, c3) {
                if (b3[0] === c3[0]) return "circle" == b3[0] ? a2.mergeList(b3.slice(1), c3.slice(1), ["circle(", a2.mergeDimensions, " at ", a2.mergeOffsetList, ")"]) : "ellipse" == b3[0] ? a2.mergeList(b3.slice(1), c3.slice(1), ["ellipse(", a2.mergeNonNegativeSizePair, " at ", a2.mergeOffsetList, ")"]) : "polygon" == b3[0] && b3[1] == c3[1] ? a2.mergeList(b3.slice(2), c3.slice(2), ["polygon(", b3[1], g, ")"]) : void 0;
              }
              var d2 = a2.consumeParenthesised.bind(null, a2.parseLengthOrPercent), e = a2.consumeRepeated.bind(void 0, d2, /^/), f = a2.mergeNestedRepeated.bind(void 0, a2.mergeDimensions, " "), g = a2.mergeNestedRepeated.bind(void 0, f, ",");
              a2.addPropertiesHandler(b2, c2, ["shape-outside"]);
            }(b), function(a2, b2) {
              function c2(a3, b3) {
                b3.concat([a3]).forEach(function(b4) {
                  b4 in document.documentElement.style && (d2[a3] = b4), e[b4] = a3;
                });
              }
              var d2 = {}, e = {};
              c2("transform", ["webkitTransform", "msTransform"]), c2("transformOrigin", ["webkitTransformOrigin"]), c2("perspective", ["webkitPerspective"]), c2("perspectiveOrigin", ["webkitPerspectiveOrigin"]), a2.propertyName = function(a3) {
                return d2[a3] || a3;
              }, a2.unprefixedPropertyName = function(a3) {
                return e[a3] || a3;
              };
            }(b);
          }(), function() {
            if (void 0 === document.createElement("div").animate([]).oncancel) {
              var a2;
              if (window.performance && performance.now) var a2 = function() {
                return performance.now();
              };
              else var a2 = function() {
                return Date.now();
              };
              var b2 = function(a3, b3, c2) {
                this.target = a3, this.currentTime = b3, this.timelineTime = c2, this.type = "cancel", this.bubbles = false, this.cancelable = false, this.currentTarget = a3, this.defaultPrevented = false, this.eventPhase = Event.AT_TARGET, this.timeStamp = Date.now();
              }, c = window.Element.prototype.animate;
              window.Element.prototype.animate = function(d, e) {
                var f = c.call(this, d, e);
                f._cancelHandlers = [], f.oncancel = null;
                var g = f.cancel;
                f.cancel = function() {
                  g.call(this);
                  var c2 = new b2(this, null, a2()), d2 = this._cancelHandlers.concat(this.oncancel ? [this.oncancel] : []);
                  setTimeout(function() {
                    d2.forEach(function(a3) {
                      a3.call(c2.target, c2);
                    });
                  }, 0);
                };
                var h = f.addEventListener;
                f.addEventListener = function(a3, b3) {
                  "function" == typeof b3 && "cancel" == a3 ? this._cancelHandlers.push(b3) : h.call(this, a3, b3);
                };
                var i = f.removeEventListener;
                return f.removeEventListener = function(a3, b3) {
                  if ("cancel" == a3) {
                    var c2 = this._cancelHandlers.indexOf(b3);
                    c2 >= 0 && this._cancelHandlers.splice(c2, 1);
                  } else i.call(this, a3, b3);
                }, f;
              };
            }
          }(), function(a2) {
            var b2 = document.documentElement, c = null, d = false;
            try {
              var e = getComputedStyle(b2).getPropertyValue("opacity"), f = "0" == e ? "1" : "0";
              c = b2.animate({ opacity: [f, f] }, { duration: 1 }), c.currentTime = 0, d = getComputedStyle(b2).getPropertyValue("opacity") == f;
            } catch (a3) {
            } finally {
              c && c.cancel();
            }
            if (!d) {
              var g = window.Element.prototype.animate;
              window.Element.prototype.animate = function(b3, c2) {
                return window.Symbol && Symbol.iterator && Array.prototype.from && b3[Symbol.iterator] && (b3 = Array.from(b3)), Array.isArray(b3) || null === b3 || (b3 = a2.convertToArrayForm(b3)), g.call(this, b3, c2);
              };
            }
          }(a);
        }();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.after.js
var Element_prototype_after_exports = {};
var init_Element_prototype_after = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.after.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("Element" in self && "after" in Element.prototype)) {
        Document.prototype.after = Element.prototype.after = function after() {
          if (this.parentNode) {
            var args = Array.prototype.slice.call(arguments), viableNextSibling = this.nextSibling, idx = viableNextSibling ? args.indexOf(viableNextSibling) : -1;
            while (idx !== -1) {
              viableNextSibling = viableNextSibling.nextSibling;
              if (!viableNextSibling) {
                break;
              }
              idx = args.indexOf(viableNextSibling);
            }
            this.parentNode.insertBefore(mutation_default(arguments), viableNextSibling);
          }
        };
        if ("Text" in self) {
          Text.prototype.after = Element.prototype.after;
        }
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.after.js
var CharacterData_prototype_after_exports = {};
var init_CharacterData_prototype_after = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.after.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("after" in CharacterData.prototype)) {
        CharacterData.prototype.after = Element.prototype.after;
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.before.js
var Element_prototype_before_exports = {};
var init_Element_prototype_before = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/Element.prototype.before.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("Element" in self && "before" in Element.prototype)) {
        Document.prototype.before = Element.prototype.before = function before() {
          if (this.parentNode) {
            var args = Array.prototype.slice.call(arguments), viablePreviousSibling = this.previousSibling, idx = viablePreviousSibling ? args.indexOf(viablePreviousSibling) : -1;
            while (idx !== -1) {
              viablePreviousSibling = viablePreviousSibling.previousSibling;
              if (!viablePreviousSibling) {
                break;
              }
              idx = args.indexOf(viablePreviousSibling);
            }
            this.parentNode.insertBefore(
              mutation_default(arguments),
              viablePreviousSibling ? viablePreviousSibling.nextSibling : this.parentNode.firstChild
            );
          }
        };
        if ("Text" in self) {
          Text.prototype.before = Element.prototype.before;
        }
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.before.js
var CharacterData_prototype_before_exports = {};
var init_CharacterData_prototype_before = __esm({
  "node_modules/.pnpm/@mrhenry+core-web@1.2.4/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.before.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("before" in CharacterData.prototype)) {
        CharacterData.prototype.before = Element.prototype.before;
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/proxy-accessor.js
var require_proxy_accessor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/proxy-accessor.js"(exports, module2) {
    "use strict";
    var defineProperty = require_object_define_property().f;
    module2.exports = function(Target, Source, key) {
      key in Target || defineProperty(Target, key, {
        configurable: true,
        get: function() {
          return Source[key];
        },
        set: function(it) {
          Source[key] = it;
        }
      });
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/normalize-string-argument.js
var require_normalize_string_argument = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/normalize-string-argument.js"(exports, module2) {
    "use strict";
    var toString = require_to_string();
    module2.exports = function(argument, $default) {
      return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/install-error-cause.js
var require_install_error_cause = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/install-error-cause.js"(exports, module2) {
    "use strict";
    var isObject = require_is_object();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    module2.exports = function(O, options) {
      if (isObject(options) && "cause" in options) {
        createNonEnumerableProperty(O, "cause", options.cause);
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-stack-clear.js
var require_error_stack_clear = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-stack-clear.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var $Error = Error;
    var replace = uncurryThis("".replace);
    var TEST = function(arg) {
      return String(new $Error(arg).stack);
    }("zxcasd");
    var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
    var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
    module2.exports = function(stack, dropEntries) {
      if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) {
        while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, "");
      }
      return stack;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-stack-installable.js
var require_error_stack_installable = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-stack-installable.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var createPropertyDescriptor = require_create_property_descriptor();
    module2.exports = !fails(function() {
      var error = new Error("a");
      if (!("stack" in error)) return true;
      Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7));
      return error.stack !== 7;
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-stack-install.js
var require_error_stack_install = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-stack-install.js"(exports, module2) {
    "use strict";
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var clearErrorStack = require_error_stack_clear();
    var ERROR_STACK_INSTALLABLE = require_error_stack_installable();
    var captureStackTrace = Error.captureStackTrace;
    module2.exports = function(error, C, stack, dropEntries) {
      if (ERROR_STACK_INSTALLABLE) {
        if (captureStackTrace) captureStackTrace(error, C);
        else createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries));
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js
var require_wrap_error_constructor_with_cause = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/wrap-error-constructor-with-cause.js"(exports, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var hasOwn = require_has_own_property();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var isPrototypeOf = require_object_is_prototype_of();
    var setPrototypeOf = require_object_set_prototype_of();
    var copyConstructorProperties = require_copy_constructor_properties();
    var proxyAccessor = require_proxy_accessor();
    var inheritIfRequired = require_inherit_if_required();
    var normalizeStringArgument = require_normalize_string_argument();
    var installErrorCause = require_install_error_cause();
    var installErrorStack = require_error_stack_install();
    var DESCRIPTORS = require_descriptors();
    var IS_PURE = require_is_pure();
    module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
      var STACK_TRACE_LIMIT = "stackTraceLimit";
      var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
      var path = FULL_NAME.split(".");
      var ERROR_NAME = path[path.length - 1];
      var OriginalError = getBuiltIn.apply(null, path);
      if (!OriginalError) return;
      var OriginalErrorPrototype = OriginalError.prototype;
      if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) delete OriginalErrorPrototype.cause;
      if (!FORCED) return OriginalError;
      var BaseError = getBuiltIn("Error");
      var WrappedError = wrapper(function(a, b) {
        var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0);
        var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
        if (message !== void 0) createNonEnumerableProperty(result, "message", message);
        installErrorStack(result, WrappedError, result.stack, 2);
        if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
        if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
        return result;
      });
      WrappedError.prototype = OriginalErrorPrototype;
      if (ERROR_NAME !== "Error") {
        if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
        else copyConstructorProperties(WrappedError, BaseError, { name: true });
      } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
        proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
        proxyAccessor(WrappedError, OriginalError, "prepareStackTrace");
      }
      copyConstructorProperties(WrappedError, OriginalError);
      if (!IS_PURE) try {
        if (OriginalErrorPrototype.name !== ERROR_NAME) {
          createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME);
        }
        OriginalErrorPrototype.constructor = WrappedError;
      } catch (error) {
      }
      return WrappedError;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.error.cause.js
var require_es_error_cause = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.error.cause.js"() {
    "use strict";
    var $2 = require_export();
    var globalThis2 = require_global_this();
    var apply = require_function_apply();
    var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause();
    var WEB_ASSEMBLY = "WebAssembly";
    var WebAssembly = globalThis2[WEB_ASSEMBLY];
    var FORCED = new Error("e", { cause: 7 }).cause !== 7;
    var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) {
      var O = {};
      O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
      $2({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
    };
    var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) {
      if (WebAssembly && WebAssembly[ERROR_NAME]) {
        var O = {};
        O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED);
        $2({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
      }
    };
    exportGlobalErrorCauseWrapper("Error", function(init) {
      return function Error2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("EvalError", function(init) {
      return function EvalError(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("RangeError", function(init) {
      return function RangeError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("ReferenceError", function(init) {
      return function ReferenceError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("SyntaxError", function(init) {
      return function SyntaxError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("TypeError", function(init) {
      return function TypeError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("URIError", function(init) {
      return function URIError(message) {
        return apply(init, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("CompileError", function(init) {
      return function CompileError(message) {
        return apply(init, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("LinkError", function(init) {
      return function LinkError(message) {
        return apply(init, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) {
      return function RuntimeError(message) {
        return apply(init, this, arguments);
      };
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-to-string.js
var require_error_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/error-to-string.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    var anObject = require_an_object();
    var normalizeStringArgument = require_normalize_string_argument();
    var nativeErrorToString = Error.prototype.toString;
    var INCORRECT_TO_STRING = fails(function() {
      if (DESCRIPTORS) {
        var object = Object.create(Object.defineProperty({}, "name", { get: function() {
          return this === object;
        } }));
        if (nativeErrorToString.call(object) !== "true") return true;
      }
      return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error";
    });
    module2.exports = INCORRECT_TO_STRING ? function toString() {
      var O = anObject(this);
      var name = normalizeStringArgument(O.name, "Error");
      var message = normalizeStringArgument(O.message);
      return !name ? message : !message ? name : name + ": " + message;
    } : nativeErrorToString;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.error.to-string.js
var require_es_error_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.error.to-string.js"() {
    "use strict";
    var defineBuiltIn = require_define_built_in();
    var errorToString = require_error_to_string();
    var ErrorPrototype = Error.prototype;
    if (ErrorPrototype.toString !== errorToString) {
      defineBuiltIn(ErrorPrototype, "toString", errorToString);
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js
var require_does_not_exceed_safe_integer = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports, module2) {
    "use strict";
    var $TypeError = TypeError;
    var MAX_SAFE_INTEGER = 9007199254740991;
    module2.exports = function(it) {
      if (it > MAX_SAFE_INTEGER) throw $TypeError("Maximum allowed index exceeded");
      return it;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.concat.js
var require_es_array_concat = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.concat.js"() {
    "use strict";
    var $2 = require_export();
    var fails = require_fails();
    var isArray = require_is_array();
    var isObject = require_is_object();
    var toObject = require_to_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
    var createProperty = require_create_property();
    var arraySpeciesCreate = require_array_species_create();
    var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
    var wellKnownSymbol = require_well_known_symbol();
    var V8_VERSION = require_environment_v8_version();
    var IS_CONCAT_SPREADABLE = wellKnownSymbol("isConcatSpreadable");
    var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function() {
      var array = [];
      array[IS_CONCAT_SPREADABLE] = false;
      return array.concat()[0] !== array;
    });
    var isConcatSpreadable = function(O) {
      if (!isObject(O)) return false;
      var spreadable = O[IS_CONCAT_SPREADABLE];
      return spreadable !== void 0 ? !!spreadable : isArray(O);
    };
    var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport("concat");
    $2({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      concat: function concat(arg) {
        var O = toObject(this);
        var A = arraySpeciesCreate(O, 0);
        var n = 0;
        var i, k, length, len, E;
        for (i = -1, length = arguments.length; i < length; i++) {
          E = i === -1 ? O : arguments[i];
          if (isConcatSpreadable(E)) {
            len = lengthOfArrayLike(E);
            doesNotExceedSafeInteger(n + len);
            for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
          } else {
            doesNotExceedSafeInteger(n + 1);
            createProperty(A, n++, E);
          }
        }
        A.length = n;
        return A;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/add-to-unscopables.js
var require_add_to_unscopables = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/add-to-unscopables.js"(exports, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var create = require_object_create();
    var defineProperty = require_object_define_property().f;
    var UNSCOPABLES = wellKnownSymbol("unscopables");
    var ArrayPrototype = Array.prototype;
    if (ArrayPrototype[UNSCOPABLES] === void 0) {
      defineProperty(ArrayPrototype, UNSCOPABLES, {
        configurable: true,
        value: create(null)
      });
    }
    module2.exports = function(key) {
      ArrayPrototype[UNSCOPABLES][key] = true;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.find.js
var require_es_array_find = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.find.js"() {
    "use strict";
    var $2 = require_export();
    var $find = require_array_iteration().find;
    var addToUnscopables = require_add_to_unscopables();
    var FIND = "find";
    var SKIPS_HOLES = true;
    if (FIND in []) Array(1)[FIND](function() {
      SKIPS_HOLES = false;
    });
    $2({ target: "Array", proto: true, forced: SKIPS_HOLES }, {
      find: function find(callbackfn) {
        return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
      }
    });
    addToUnscopables(FIND);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.includes.js
var require_es_array_includes = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.includes.js"() {
    "use strict";
    var $2 = require_export();
    var $includes = require_array_includes().includes;
    var fails = require_fails();
    var addToUnscopables = require_add_to_unscopables();
    var BROKEN_ON_SPARSE = fails(function() {
      return !Array(1).includes();
    });
    $2({ target: "Array", proto: true, forced: BROKEN_ON_SPARSE }, {
      includes: function includes(el) {
        return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0);
      }
    });
    addToUnscopables("includes");
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.iterator.js
var require_es_array_iterator = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.iterator.js"(exports, module2) {
    "use strict";
    var toIndexedObject = require_to_indexed_object();
    var addToUnscopables = require_add_to_unscopables();
    var Iterators = require_iterators();
    var InternalStateModule = require_internal_state();
    var defineProperty = require_object_define_property().f;
    var defineIterator = require_iterator_define();
    var createIterResultObject = require_create_iter_result_object();
    var IS_PURE = require_is_pure();
    var DESCRIPTORS = require_descriptors();
    var ARRAY_ITERATOR = "Array Iterator";
    var setInternalState = InternalStateModule.set;
    var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
    module2.exports = defineIterator(Array, "Array", function(iterated, kind) {
      setInternalState(this, {
        type: ARRAY_ITERATOR,
        target: toIndexedObject(iterated),
        // target
        index: 0,
        // next index
        kind
        // kind
      });
    }, function() {
      var state = getInternalState(this);
      var target = state.target;
      var index = state.index++;
      if (!target || index >= target.length) {
        state.target = null;
        return createIterResultObject(void 0, true);
      }
      switch (state.kind) {
        case "keys":
          return createIterResultObject(index, false);
        case "values":
          return createIterResultObject(target[index], false);
      }
      return createIterResultObject([index, target[index]], false);
    }, "values");
    var values = Iterators.Arguments = Iterators.Array;
    addToUnscopables("keys");
    addToUnscopables("values");
    addToUnscopables("entries");
    if (!IS_PURE && DESCRIPTORS && values.name !== "values") try {
      defineProperty(values, "name", { value: "values" });
    } catch (error) {
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.join.js
var require_es_array_join = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.join.js"() {
    "use strict";
    var $2 = require_export();
    var uncurryThis = require_function_uncurry_this();
    var IndexedObject = require_indexed_object();
    var toIndexedObject = require_to_indexed_object();
    var arrayMethodIsStrict = require_array_method_is_strict();
    var nativeJoin = uncurryThis([].join);
    var ES3_STRINGS = IndexedObject !== Object;
    var FORCED = ES3_STRINGS || !arrayMethodIsStrict("join", ",");
    $2({ target: "Array", proto: true, forced: FORCED }, {
      join: function join(separator) {
        return nativeJoin(toIndexedObject(this), separator === void 0 ? "," : separator);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-set-length.js
var require_array_set_length = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-set-length.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var isArray = require_is_array();
    var $TypeError = TypeError;
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() {
      if (this !== void 0) return true;
      try {
        Object.defineProperty([], "length", { writable: false }).length = 1;
      } catch (error) {
        return error instanceof TypeError;
      }
    }();
    module2.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) {
      if (isArray(O) && !getOwnPropertyDescriptor(O, "length").writable) {
        throw new $TypeError("Cannot set read only .length");
      }
      return O.length = length;
    } : function(O, length) {
      return O.length = length;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.push.js
var require_es_array_push = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.array.push.js"() {
    "use strict";
    var $2 = require_export();
    var toObject = require_to_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var setArrayLength = require_array_set_length();
    var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
    var fails = require_fails();
    var INCORRECT_TO_LENGTH = fails(function() {
      return [].push.call({ length: 4294967296 }, 1) !== 4294967297;
    });
    var properErrorOnNonWritableLength = function() {
      try {
        Object.defineProperty([], "length", { writable: false }).push();
      } catch (error) {
        return error instanceof TypeError;
      }
    };
    var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();
    $2({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      push: function push(item) {
        var O = toObject(this);
        var len = lengthOfArrayLike(O);
        var argCount = arguments.length;
        doesNotExceedSafeInteger(len + argCount);
        for (var i = 0; i < argCount; i++) {
          O[len] = arguments[i];
          len++;
        }
        setArrayLength(O, len);
        return len;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.date.to-json.js
var require_es_date_to_json = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.date.to-json.js"() {
    "use strict";
    var $2 = require_export();
    var fails = require_fails();
    var toObject = require_to_object();
    var toPrimitive = require_to_primitive();
    var FORCED = fails(function() {
      return (/* @__PURE__ */ new Date(NaN)).toJSON() !== null || Date.prototype.toJSON.call({ toISOString: function() {
        return 1;
      } }) !== 1;
    });
    $2({ target: "Date", proto: true, arity: 1, forced: FORCED }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      toJSON: function toJSON(key) {
        var O = toObject(this);
        var pv = toPrimitive(O, "number");
        return typeof pv == "number" && !isFinite(pv) ? null : O.toISOString();
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.constructor.js
var require_es_iterator_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.constructor.js"() {
    "use strict";
    var $2 = require_export();
    var globalThis2 = require_global_this();
    var anInstance = require_an_instance();
    var anObject = require_an_object();
    var isCallable = require_is_callable();
    var getPrototypeOf = require_object_get_prototype_of();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var createProperty = require_create_property();
    var fails = require_fails();
    var hasOwn = require_has_own_property();
    var wellKnownSymbol = require_well_known_symbol();
    var IteratorPrototype = require_iterators_core().IteratorPrototype;
    var DESCRIPTORS = require_descriptors();
    var IS_PURE = require_is_pure();
    var CONSTRUCTOR = "constructor";
    var ITERATOR = "Iterator";
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var $TypeError = TypeError;
    var NativeIterator = globalThis2[ITERATOR];
    var FORCED = IS_PURE || !isCallable(NativeIterator) || NativeIterator.prototype !== IteratorPrototype || !fails(function() {
      NativeIterator({});
    });
    var IteratorConstructor = function Iterator() {
      anInstance(this, IteratorPrototype);
      if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError("Abstract class Iterator not directly constructable");
    };
    var defineIteratorPrototypeAccessor = function(key, value) {
      if (DESCRIPTORS) {
        defineBuiltInAccessor(IteratorPrototype, key, {
          configurable: true,
          get: function() {
            return value;
          },
          set: function(replacement) {
            anObject(this);
            if (this === IteratorPrototype) throw new $TypeError("You can't redefine this property");
            if (hasOwn(this, key)) this[key] = replacement;
            else createProperty(this, key, replacement);
          }
        });
      } else IteratorPrototype[key] = value;
    };
    if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);
    if (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {
      defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);
    }
    IteratorConstructor.prototype = IteratorPrototype;
    $2({ global: true, constructor: true, forced: FORCED }, {
      Iterator: IteratorConstructor
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.find.js
var require_es_iterator_find = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.iterator.find.js"() {
    "use strict";
    var $2 = require_export();
    var iterate = require_iterate();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    $2({ target: "Iterator", proto: true, real: true }, {
      find: function find(predicate) {
        anObject(this);
        aCallable(predicate);
        var record = getIteratorDirect(this);
        var counter = 0;
        return iterate(record, function(value, stop) {
          if (predicate(value, counter++)) return stop(value);
        }, { IS_RECORD: true, INTERRUPTED: true }).result;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-to-array.js
var require_object_to_array = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-to-array.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    var uncurryThis = require_function_uncurry_this();
    var objectGetPrototypeOf = require_object_get_prototype_of();
    var objectKeys = require_object_keys();
    var toIndexedObject = require_to_indexed_object();
    var $propertyIsEnumerable = require_object_property_is_enumerable().f;
    var propertyIsEnumerable = uncurryThis($propertyIsEnumerable);
    var push = uncurryThis([].push);
    var IE_BUG = DESCRIPTORS && fails(function() {
      var O = /* @__PURE__ */ Object.create(null);
      O[2] = 2;
      return !propertyIsEnumerable(O, 2);
    });
    var createMethod = function(TO_ENTRIES) {
      return function(it) {
        var O = toIndexedObject(it);
        var keys = objectKeys(O);
        var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;
        var length = keys.length;
        var i = 0;
        var result = [];
        var key;
        while (length > i) {
          key = keys[i++];
          if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {
            push(result, TO_ENTRIES ? [key, O[key]] : O[key]);
          }
        }
        return result;
      };
    };
    module2.exports = {
      // `Object.entries` method
      // https://tc39.es/ecma262/#sec-object.entries
      entries: createMethod(true),
      // `Object.values` method
      // https://tc39.es/ecma262/#sec-object.values
      values: createMethod(false)
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.entries.js
var require_es_object_entries = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.entries.js"() {
    "use strict";
    var $2 = require_export();
    var $entries = require_object_to_array().entries;
    $2({ target: "Object", stat: true }, {
      entries: function entries(O) {
        return $entries(O);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-names.js
var require_es_object_get_own_property_names = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.get-own-property-names.js"() {
    "use strict";
    var $2 = require_export();
    var fails = require_fails();
    var getOwnPropertyNames = require_object_get_own_property_names_external().f;
    var FAILS_ON_PRIMITIVES = fails(function() {
      return !Object.getOwnPropertyNames(1);
    });
    $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, {
      getOwnPropertyNames
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.keys.js
var require_es_object_keys = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.keys.js"() {
    "use strict";
    var $2 = require_export();
    var toObject = require_to_object();
    var nativeKeys = require_object_keys();
    var fails = require_fails();
    var FAILS_ON_PRIMITIVES = fails(function() {
      nativeKeys(1);
    });
    $2({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, {
      keys: function keys(it) {
        return nativeKeys(toObject(it));
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-to-string.js
var require_object_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-to-string.js"(exports, module2) {
    "use strict";
    var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
    var classof = require_classof();
    module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
      return "[object " + classof(this) + "]";
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.to-string.js
var require_es_object_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.object.to-string.js"() {
    "use strict";
    var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
    var defineBuiltIn = require_define_built_in();
    var toString = require_object_to_string();
    if (!TO_STRING_TAG_SUPPORT) {
      defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment.js
var require_environment = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var userAgent = require_environment_user_agent();
    var classof = require_classof_raw();
    var userAgentStartsWith = function(string) {
      return userAgent.slice(0, string.length) === string;
    };
    module2.exports = function() {
      if (userAgentStartsWith("Bun/")) return "BUN";
      if (userAgentStartsWith("Cloudflare-Workers")) return "CLOUDFLARE";
      if (userAgentStartsWith("Deno/")) return "DENO";
      if (userAgentStartsWith("Node.js/")) return "NODE";
      if (globalThis2.Bun && typeof Bun.version == "string") return "BUN";
      if (globalThis2.Deno && typeof Deno.version == "object") return "DENO";
      if (classof(globalThis2.process) === "process") return "NODE";
      if (globalThis2.window && globalThis2.document) return "BROWSER";
      return "REST";
    }();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-node.js
var require_environment_is_node = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-node.js"(exports, module2) {
    "use strict";
    var ENVIRONMENT = require_environment();
    module2.exports = ENVIRONMENT === "NODE";
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/species-constructor.js
var require_species_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/species-constructor.js"(exports, module2) {
    "use strict";
    var anObject = require_an_object();
    var aConstructor = require_a_constructor();
    var isNullOrUndefined = require_is_null_or_undefined();
    var wellKnownSymbol = require_well_known_symbol();
    var SPECIES = wellKnownSymbol("species");
    module2.exports = function(O, defaultConstructor) {
      var C = anObject(O).constructor;
      var S;
      return C === void 0 || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/validate-arguments-length.js
var require_validate_arguments_length = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/validate-arguments-length.js"(exports, module2) {
    "use strict";
    var $TypeError = TypeError;
    module2.exports = function(passed, required) {
      if (passed < required) throw new $TypeError("Not enough arguments");
      return passed;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-ios.js
var require_environment_is_ios = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-ios.js"(exports, module2) {
    "use strict";
    var userAgent = require_environment_user_agent();
    module2.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/task.js
var require_task = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/task.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var apply = require_function_apply();
    var bind = require_function_bind_context();
    var isCallable = require_is_callable();
    var hasOwn = require_has_own_property();
    var fails = require_fails();
    var html = require_html();
    var arraySlice = require_array_slice();
    var createElement = require_document_create_element();
    var validateArgumentsLength = require_validate_arguments_length();
    var IS_IOS = require_environment_is_ios();
    var IS_NODE = require_environment_is_node();
    var set = globalThis2.setImmediate;
    var clear = globalThis2.clearImmediate;
    var process = globalThis2.process;
    var Dispatch = globalThis2.Dispatch;
    var Function2 = globalThis2.Function;
    var MessageChannel = globalThis2.MessageChannel;
    var String2 = globalThis2.String;
    var counter = 0;
    var queue = {};
    var ONREADYSTATECHANGE = "onreadystatechange";
    var $location;
    var defer;
    var channel;
    var port;
    fails(function() {
      $location = globalThis2.location;
    });
    var run = function(id) {
      if (hasOwn(queue, id)) {
        var fn = queue[id];
        delete queue[id];
        fn();
      }
    };
    var runner = function(id) {
      return function() {
        run(id);
      };
    };
    var eventListener = function(event) {
      run(event.data);
    };
    var globalPostMessageDefer = function(id) {
      globalThis2.postMessage(String2(id), $location.protocol + "//" + $location.host);
    };
    if (!set || !clear) {
      set = function setImmediate(handler) {
        validateArgumentsLength(arguments.length, 1);
        var fn = isCallable(handler) ? handler : Function2(handler);
        var args = arraySlice(arguments, 1);
        queue[++counter] = function() {
          apply(fn, void 0, args);
        };
        defer(counter);
        return counter;
      };
      clear = function clearImmediate(id) {
        delete queue[id];
      };
      if (IS_NODE) {
        defer = function(id) {
          process.nextTick(runner(id));
        };
      } else if (Dispatch && Dispatch.now) {
        defer = function(id) {
          Dispatch.now(runner(id));
        };
      } else if (MessageChannel && !IS_IOS) {
        channel = new MessageChannel();
        port = channel.port2;
        channel.port1.onmessage = eventListener;
        defer = bind(port.postMessage, port);
      } else if (globalThis2.addEventListener && isCallable(globalThis2.postMessage) && !globalThis2.importScripts && $location && $location.protocol !== "file:" && !fails(globalPostMessageDefer)) {
        defer = globalPostMessageDefer;
        globalThis2.addEventListener("message", eventListener, false);
      } else if (ONREADYSTATECHANGE in createElement("script")) {
        defer = function(id) {
          html.appendChild(createElement("script"))[ONREADYSTATECHANGE] = function() {
            html.removeChild(this);
            run(id);
          };
        };
      } else {
        defer = function(id) {
          setTimeout(runner(id), 0);
        };
      }
    }
    module2.exports = {
      set,
      clear
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/safe-get-built-in.js
var require_safe_get_built_in = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/safe-get-built-in.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var DESCRIPTORS = require_descriptors();
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    module2.exports = function(name) {
      if (!DESCRIPTORS) return globalThis2[name];
      var descriptor = getOwnPropertyDescriptor(globalThis2, name);
      return descriptor && descriptor.value;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/queue.js
var require_queue = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/queue.js"(exports, module2) {
    "use strict";
    var Queue = function() {
      this.head = null;
      this.tail = null;
    };
    Queue.prototype = {
      add: function(item) {
        var entry = { item, next: null };
        var tail = this.tail;
        if (tail) tail.next = entry;
        else this.head = entry;
        this.tail = entry;
      },
      get: function() {
        var entry = this.head;
        if (entry) {
          var next = this.head = entry.next;
          if (next === null) this.tail = null;
          return entry.item;
        }
      }
    };
    module2.exports = Queue;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-ios-pebble.js
var require_environment_is_ios_pebble = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-ios-pebble.js"(exports, module2) {
    "use strict";
    var userAgent = require_environment_user_agent();
    module2.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != "undefined";
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-webos-webkit.js
var require_environment_is_webos_webkit = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/environment-is-webos-webkit.js"(exports, module2) {
    "use strict";
    var userAgent = require_environment_user_agent();
    module2.exports = /web0s(?!.*chrome)/i.test(userAgent);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/microtask.js
var require_microtask = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/microtask.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var safeGetBuiltIn = require_safe_get_built_in();
    var bind = require_function_bind_context();
    var macrotask = require_task().set;
    var Queue = require_queue();
    var IS_IOS = require_environment_is_ios();
    var IS_IOS_PEBBLE = require_environment_is_ios_pebble();
    var IS_WEBOS_WEBKIT = require_environment_is_webos_webkit();
    var IS_NODE = require_environment_is_node();
    var MutationObserver = globalThis2.MutationObserver || globalThis2.WebKitMutationObserver;
    var document2 = globalThis2.document;
    var process = globalThis2.process;
    var Promise2 = globalThis2.Promise;
    var microtask = safeGetBuiltIn("queueMicrotask");
    var notify;
    var toggle;
    var node;
    var promise;
    var then;
    if (!microtask) {
      queue = new Queue();
      flush = function() {
        var parent, fn;
        if (IS_NODE && (parent = process.domain)) parent.exit();
        while (fn = queue.get()) try {
          fn();
        } catch (error) {
          if (queue.head) notify();
          throw error;
        }
        if (parent) parent.enter();
      };
      if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document2) {
        toggle = true;
        node = document2.createTextNode("");
        new MutationObserver(flush).observe(node, { characterData: true });
        notify = function() {
          node.data = toggle = !toggle;
        };
      } else if (!IS_IOS_PEBBLE && Promise2 && Promise2.resolve) {
        promise = Promise2.resolve(void 0);
        promise.constructor = Promise2;
        then = bind(promise.then, promise);
        notify = function() {
          then(flush);
        };
      } else if (IS_NODE) {
        notify = function() {
          process.nextTick(flush);
        };
      } else {
        macrotask = bind(macrotask, globalThis2);
        notify = function() {
          macrotask(flush);
        };
      }
      microtask = function(fn) {
        if (!queue.head) notify();
        queue.add(fn);
      };
    }
    var queue;
    var flush;
    module2.exports = microtask;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/host-report-errors.js
var require_host_report_errors = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/host-report-errors.js"(exports, module2) {
    "use strict";
    module2.exports = function(a, b) {
      try {
        arguments.length === 1 ? console.error(a) : console.error(a, b);
      } catch (error) {
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/perform.js
var require_perform = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/perform.js"(exports, module2) {
    "use strict";
    module2.exports = function(exec) {
      try {
        return { error: false, value: exec() };
      } catch (error) {
        return { error: true, value: error };
      }
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-native-constructor.js
var require_promise_native_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-native-constructor.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    module2.exports = globalThis2.Promise;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-constructor-detection.js
var require_promise_constructor_detection = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-constructor-detection.js"(exports, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var NativePromiseConstructor = require_promise_native_constructor();
    var isCallable = require_is_callable();
    var isForced = require_is_forced();
    var inspectSource = require_inspect_source();
    var wellKnownSymbol = require_well_known_symbol();
    var ENVIRONMENT = require_environment();
    var IS_PURE = require_is_pure();
    var V8_VERSION = require_environment_v8_version();
    var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
    var SPECIES = wellKnownSymbol("species");
    var SUBCLASSING = false;
    var NATIVE_PROMISE_REJECTION_EVENT = isCallable(globalThis2.PromiseRejectionEvent);
    var FORCED_PROMISE_CONSTRUCTOR = isForced("Promise", function() {
      var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);
      var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);
      if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;
      if (IS_PURE && !(NativePromisePrototype["catch"] && NativePromisePrototype["finally"])) return true;
      if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {
        var promise = new NativePromiseConstructor(function(resolve) {
          resolve(1);
        });
        var FakePromise = function(exec) {
          exec(function() {
          }, function() {
          });
        };
        var constructor = promise.constructor = {};
        constructor[SPECIES] = FakePromise;
        SUBCLASSING = promise.then(function() {
        }) instanceof FakePromise;
        if (!SUBCLASSING) return true;
      }
      return !GLOBAL_CORE_JS_PROMISE && (ENVIRONMENT === "BROWSER" || ENVIRONMENT === "DENO") && !NATIVE_PROMISE_REJECTION_EVENT;
    });
    module2.exports = {
      CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,
      REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,
      SUBCLASSING
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/new-promise-capability.js
var require_new_promise_capability = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/new-promise-capability.js"(exports, module2) {
    "use strict";
    var aCallable = require_a_callable();
    var $TypeError = TypeError;
    var PromiseCapability = function(C) {
      var resolve, reject;
      this.promise = new C(function($$resolve, $$reject) {
        if (resolve !== void 0 || reject !== void 0) throw new $TypeError("Bad Promise constructor");
        resolve = $$resolve;
        reject = $$reject;
      });
      this.resolve = aCallable(resolve);
      this.reject = aCallable(reject);
    };
    module2.exports.f = function(C) {
      return new PromiseCapability(C);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.constructor.js
var require_es_promise_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.constructor.js"() {
    "use strict";
    var $2 = require_export();
    var IS_PURE = require_is_pure();
    var IS_NODE = require_environment_is_node();
    var globalThis2 = require_global_this();
    var call = require_function_call();
    var defineBuiltIn = require_define_built_in();
    var setPrototypeOf = require_object_set_prototype_of();
    var setToStringTag = require_set_to_string_tag();
    var setSpecies = require_set_species();
    var aCallable = require_a_callable();
    var isCallable = require_is_callable();
    var isObject = require_is_object();
    var anInstance = require_an_instance();
    var speciesConstructor = require_species_constructor();
    var task = require_task().set;
    var microtask = require_microtask();
    var hostReportErrors = require_host_report_errors();
    var perform = require_perform();
    var Queue = require_queue();
    var InternalStateModule = require_internal_state();
    var NativePromiseConstructor = require_promise_native_constructor();
    var PromiseConstructorDetection = require_promise_constructor_detection();
    var newPromiseCapabilityModule = require_new_promise_capability();
    var PROMISE = "Promise";
    var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;
    var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;
    var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;
    var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
    var setInternalState = InternalStateModule.set;
    var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
    var PromiseConstructor = NativePromiseConstructor;
    var PromisePrototype = NativePromisePrototype;
    var TypeError2 = globalThis2.TypeError;
    var document2 = globalThis2.document;
    var process = globalThis2.process;
    var newPromiseCapability = newPromiseCapabilityModule.f;
    var newGenericPromiseCapability = newPromiseCapability;
    var DISPATCH_EVENT = !!(document2 && document2.createEvent && globalThis2.dispatchEvent);
    var UNHANDLED_REJECTION = "unhandledrejection";
    var REJECTION_HANDLED = "rejectionhandled";
    var PENDING = 0;
    var FULFILLED = 1;
    var REJECTED = 2;
    var HANDLED = 1;
    var UNHANDLED = 2;
    var Internal;
    var OwnPromiseCapability;
    var PromiseWrapper;
    var nativeThen;
    var isThenable = function(it) {
      var then;
      return isObject(it) && isCallable(then = it.then) ? then : false;
    };
    var callReaction = function(reaction, state) {
      var value = state.value;
      var ok = state.state === FULFILLED;
      var handler = ok ? reaction.ok : reaction.fail;
      var resolve = reaction.resolve;
      var reject = reaction.reject;
      var domain = reaction.domain;
      var result, then, exited;
      try {
        if (handler) {
          if (!ok) {
            if (state.rejection === UNHANDLED) onHandleUnhandled(state);
            state.rejection = HANDLED;
          }
          if (handler === true) result = value;
          else {
            if (domain) domain.enter();
            result = handler(value);
            if (domain) {
              domain.exit();
              exited = true;
            }
          }
          if (result === reaction.promise) {
            reject(new TypeError2("Promise-chain cycle"));
          } else if (then = isThenable(result)) {
            call(then, result, resolve, reject);
          } else resolve(result);
        } else reject(value);
      } catch (error) {
        if (domain && !exited) domain.exit();
        reject(error);
      }
    };
    var notify = function(state, isReject) {
      if (state.notified) return;
      state.notified = true;
      microtask(function() {
        var reactions = state.reactions;
        var reaction;
        while (reaction = reactions.get()) {
          callReaction(reaction, state);
        }
        state.notified = false;
        if (isReject && !state.rejection) onUnhandled(state);
      });
    };
    var dispatchEvent = function(name, promise, reason) {
      var event, handler;
      if (DISPATCH_EVENT) {
        event = document2.createEvent("Event");
        event.promise = promise;
        event.reason = reason;
        event.initEvent(name, false, true);
        globalThis2.dispatchEvent(event);
      } else event = { promise, reason };
      if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = globalThis2["on" + name])) handler(event);
      else if (name === UNHANDLED_REJECTION) hostReportErrors("Unhandled promise rejection", reason);
    };
    var onUnhandled = function(state) {
      call(task, globalThis2, function() {
        var promise = state.facade;
        var value = state.value;
        var IS_UNHANDLED = isUnhandled(state);
        var result;
        if (IS_UNHANDLED) {
          result = perform(function() {
            if (IS_NODE) {
              process.emit("unhandledRejection", value, promise);
            } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
          });
          state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
          if (result.error) throw result.value;
        }
      });
    };
    var isUnhandled = function(state) {
      return state.rejection !== HANDLED && !state.parent;
    };
    var onHandleUnhandled = function(state) {
      call(task, globalThis2, function() {
        var promise = state.facade;
        if (IS_NODE) {
          process.emit("rejectionHandled", promise);
        } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
      });
    };
    var bind = function(fn, state, unwrap) {
      return function(value) {
        fn(state, value, unwrap);
      };
    };
    var internalReject = function(state, value, unwrap) {
      if (state.done) return;
      state.done = true;
      if (unwrap) state = unwrap;
      state.value = value;
      state.state = REJECTED;
      notify(state, true);
    };
    var internalResolve = function(state, value, unwrap) {
      if (state.done) return;
      state.done = true;
      if (unwrap) state = unwrap;
      try {
        if (state.facade === value) throw new TypeError2("Promise can't be resolved itself");
        var then = isThenable(value);
        if (then) {
          microtask(function() {
            var wrapper = { done: false };
            try {
              call(
                then,
                value,
                bind(internalResolve, wrapper, state),
                bind(internalReject, wrapper, state)
              );
            } catch (error) {
              internalReject(wrapper, error, state);
            }
          });
        } else {
          state.value = value;
          state.state = FULFILLED;
          notify(state, false);
        }
      } catch (error) {
        internalReject({ done: false }, error, state);
      }
    };
    if (FORCED_PROMISE_CONSTRUCTOR) {
      PromiseConstructor = function Promise2(executor) {
        anInstance(this, PromisePrototype);
        aCallable(executor);
        call(Internal, this);
        var state = getInternalPromiseState(this);
        try {
          executor(bind(internalResolve, state), bind(internalReject, state));
        } catch (error) {
          internalReject(state, error);
        }
      };
      PromisePrototype = PromiseConstructor.prototype;
      Internal = function Promise2(executor) {
        setInternalState(this, {
          type: PROMISE,
          done: false,
          notified: false,
          parent: false,
          reactions: new Queue(),
          rejection: false,
          state: PENDING,
          value: null
        });
      };
      Internal.prototype = defineBuiltIn(PromisePrototype, "then", function then(onFulfilled, onRejected) {
        var state = getInternalPromiseState(this);
        var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));
        state.parent = true;
        reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;
        reaction.fail = isCallable(onRejected) && onRejected;
        reaction.domain = IS_NODE ? process.domain : void 0;
        if (state.state === PENDING) state.reactions.add(reaction);
        else microtask(function() {
          callReaction(reaction, state);
        });
        return reaction.promise;
      });
      OwnPromiseCapability = function() {
        var promise = new Internal();
        var state = getInternalPromiseState(promise);
        this.promise = promise;
        this.resolve = bind(internalResolve, state);
        this.reject = bind(internalReject, state);
      };
      newPromiseCapabilityModule.f = newPromiseCapability = function(C) {
        return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);
      };
      if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {
        nativeThen = NativePromisePrototype.then;
        if (!NATIVE_PROMISE_SUBCLASSING) {
          defineBuiltIn(NativePromisePrototype, "then", function then(onFulfilled, onRejected) {
            var that = this;
            return new PromiseConstructor(function(resolve, reject) {
              call(nativeThen, that, resolve, reject);
            }).then(onFulfilled, onRejected);
          }, { unsafe: true });
        }
        try {
          delete NativePromisePrototype.constructor;
        } catch (error) {
        }
        if (setPrototypeOf) {
          setPrototypeOf(NativePromisePrototype, PromisePrototype);
        }
      }
    }
    $2({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
      Promise: PromiseConstructor
    });
    setToStringTag(PromiseConstructor, PROMISE, false, true);
    setSpecies(PROMISE);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-statics-incorrect-iteration.js
var require_promise_statics_incorrect_iteration = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-statics-incorrect-iteration.js"(exports, module2) {
    "use strict";
    var NativePromiseConstructor = require_promise_native_constructor();
    var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
    var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR;
    module2.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function(iterable) {
      NativePromiseConstructor.all(iterable).then(void 0, function() {
      });
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.all.js
var require_es_promise_all = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.all.js"() {
    "use strict";
    var $2 = require_export();
    var call = require_function_call();
    var aCallable = require_a_callable();
    var newPromiseCapabilityModule = require_new_promise_capability();
    var perform = require_perform();
    var iterate = require_iterate();
    var PROMISE_STATICS_INCORRECT_ITERATION = require_promise_statics_incorrect_iteration();
    $2({ target: "Promise", stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
      all: function all(iterable) {
        var C = this;
        var capability = newPromiseCapabilityModule.f(C);
        var resolve = capability.resolve;
        var reject = capability.reject;
        var result = perform(function() {
          var $promiseResolve = aCallable(C.resolve);
          var values = [];
          var counter = 0;
          var remaining = 1;
          iterate(iterable, function(promise) {
            var index = counter++;
            var alreadyCalled = false;
            remaining++;
            call($promiseResolve, C, promise).then(function(value) {
              if (alreadyCalled) return;
              alreadyCalled = true;
              values[index] = value;
              --remaining || resolve(values);
            }, reject);
          });
          --remaining || resolve(values);
        });
        if (result.error) reject(result.value);
        return capability.promise;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.catch.js
var require_es_promise_catch = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.catch.js"() {
    "use strict";
    var $2 = require_export();
    var IS_PURE = require_is_pure();
    var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR;
    var NativePromiseConstructor = require_promise_native_constructor();
    var getBuiltIn = require_get_built_in();
    var isCallable = require_is_callable();
    var defineBuiltIn = require_define_built_in();
    var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
    $2({ target: "Promise", proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {
      "catch": function(onRejected) {
        return this.then(void 0, onRejected);
      }
    });
    if (!IS_PURE && isCallable(NativePromiseConstructor)) {
      method = getBuiltIn("Promise").prototype["catch"];
      if (NativePromisePrototype["catch"] !== method) {
        defineBuiltIn(NativePromisePrototype, "catch", method, { unsafe: true });
      }
    }
    var method;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.race.js
var require_es_promise_race = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.race.js"() {
    "use strict";
    var $2 = require_export();
    var call = require_function_call();
    var aCallable = require_a_callable();
    var newPromiseCapabilityModule = require_new_promise_capability();
    var perform = require_perform();
    var iterate = require_iterate();
    var PROMISE_STATICS_INCORRECT_ITERATION = require_promise_statics_incorrect_iteration();
    $2({ target: "Promise", stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
      race: function race(iterable) {
        var C = this;
        var capability = newPromiseCapabilityModule.f(C);
        var reject = capability.reject;
        var result = perform(function() {
          var $promiseResolve = aCallable(C.resolve);
          iterate(iterable, function(promise) {
            call($promiseResolve, C, promise).then(capability.resolve, reject);
          });
        });
        if (result.error) reject(result.value);
        return capability.promise;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.reject.js
var require_es_promise_reject = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.reject.js"() {
    "use strict";
    var $2 = require_export();
    var newPromiseCapabilityModule = require_new_promise_capability();
    var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR;
    $2({ target: "Promise", stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
      reject: function reject(r) {
        var capability = newPromiseCapabilityModule.f(this);
        var capabilityReject = capability.reject;
        capabilityReject(r);
        return capability.promise;
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-resolve.js
var require_promise_resolve = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/promise-resolve.js"(exports, module2) {
    "use strict";
    var anObject = require_an_object();
    var isObject = require_is_object();
    var newPromiseCapability = require_new_promise_capability();
    module2.exports = function(C, x) {
      anObject(C);
      if (isObject(x) && x.constructor === C) return x;
      var promiseCapability = newPromiseCapability.f(C);
      var resolve = promiseCapability.resolve;
      resolve(x);
      return promiseCapability.promise;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.resolve.js
var require_es_promise_resolve = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.resolve.js"() {
    "use strict";
    var $2 = require_export();
    var getBuiltIn = require_get_built_in();
    var IS_PURE = require_is_pure();
    var NativePromiseConstructor = require_promise_native_constructor();
    var FORCED_PROMISE_CONSTRUCTOR = require_promise_constructor_detection().CONSTRUCTOR;
    var promiseResolve = require_promise_resolve();
    var PromiseConstructorWrapper = getBuiltIn("Promise");
    var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;
    $2({ target: "Promise", stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {
      resolve: function resolve(x) {
        return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.js
var require_es_promise = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.promise.js"() {
    "use strict";
    require_es_promise_constructor();
    require_es_promise_all();
    require_es_promise_catch();
    require_es_promise_race();
    require_es_promise_reject();
    require_es_promise_resolve();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-regexp.js
var require_is_regexp = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/is-regexp.js"(exports, module2) {
    "use strict";
    var isObject = require_is_object();
    var classof = require_classof_raw();
    var wellKnownSymbol = require_well_known_symbol();
    var MATCH = wellKnownSymbol("match");
    module2.exports = function(it) {
      var isRegExp;
      return isObject(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-get-flags.js
var require_regexp_get_flags = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-get-flags.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var hasOwn = require_has_own_property();
    var isPrototypeOf = require_object_is_prototype_of();
    var regExpFlags = require_regexp_flags();
    var RegExpPrototype = RegExp.prototype;
    module2.exports = function(R) {
      var flags = R.flags;
      return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.constructor.js
var require_es_regexp_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.constructor.js"() {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var globalThis2 = require_global_this();
    var uncurryThis = require_function_uncurry_this();
    var isForced = require_is_forced();
    var inheritIfRequired = require_inherit_if_required();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var create = require_object_create();
    var getOwnPropertyNames = require_object_get_own_property_names().f;
    var isPrototypeOf = require_object_is_prototype_of();
    var isRegExp = require_is_regexp();
    var toString = require_to_string();
    var getRegExpFlags = require_regexp_get_flags();
    var stickyHelpers = require_regexp_sticky_helpers();
    var proxyAccessor = require_proxy_accessor();
    var defineBuiltIn = require_define_built_in();
    var fails = require_fails();
    var hasOwn = require_has_own_property();
    var enforceInternalState = require_internal_state().enforce;
    var setSpecies = require_set_species();
    var wellKnownSymbol = require_well_known_symbol();
    var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
    var UNSUPPORTED_NCG = require_regexp_unsupported_ncg();
    var MATCH = wellKnownSymbol("match");
    var NativeRegExp = globalThis2.RegExp;
    var RegExpPrototype = NativeRegExp.prototype;
    var SyntaxError2 = globalThis2.SyntaxError;
    var exec = uncurryThis(RegExpPrototype.exec);
    var charAt = uncurryThis("".charAt);
    var replace = uncurryThis("".replace);
    var stringIndexOf = uncurryThis("".indexOf);
    var stringSlice = uncurryThis("".slice);
    var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
    var re1 = /a/g;
    var re2 = /a/g;
    var CORRECT_NEW = new NativeRegExp(re1) !== re1;
    var MISSED_STICKY = stickyHelpers.MISSED_STICKY;
    var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
    var BASE_FORCED = DESCRIPTORS && (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function() {
      re2[MATCH] = false;
      return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, "i")) !== "/a/i";
    }));
    var handleDotAll = function(string) {
      var length = string.length;
      var index2 = 0;
      var result = "";
      var brackets = false;
      var chr;
      for (; index2 <= length; index2++) {
        chr = charAt(string, index2);
        if (chr === "\\") {
          result += chr + charAt(string, ++index2);
          continue;
        }
        if (!brackets && chr === ".") {
          result += "[\\s\\S]";
        } else {
          if (chr === "[") {
            brackets = true;
          } else if (chr === "]") {
            brackets = false;
          }
          result += chr;
        }
      }
      return result;
    };
    var handleNCG = function(string) {
      var length = string.length;
      var index2 = 0;
      var result = "";
      var named = [];
      var names = create(null);
      var brackets = false;
      var ncg = false;
      var groupid = 0;
      var groupname = "";
      var chr;
      for (; index2 <= length; index2++) {
        chr = charAt(string, index2);
        if (chr === "\\") {
          chr += charAt(string, ++index2);
        } else if (chr === "]") {
          brackets = false;
        } else if (!brackets) switch (true) {
          case chr === "[":
            brackets = true;
            break;
          case chr === "(":
            result += chr;
            if (stringSlice(string, index2 + 1, index2 + 3) === "?:") {
              continue;
            }
            if (exec(IS_NCG, stringSlice(string, index2 + 1))) {
              index2 += 2;
              ncg = true;
            }
            groupid++;
            continue;
          case (chr === ">" && ncg):
            if (groupname === "" || hasOwn(names, groupname)) {
              throw new SyntaxError2("Invalid capture group name");
            }
            names[groupname] = true;
            named[named.length] = [groupname, groupid];
            ncg = false;
            groupname = "";
            continue;
        }
        if (ncg) groupname += chr;
        else result += chr;
      }
      return [result, named];
    };
    if (isForced("RegExp", BASE_FORCED)) {
      RegExpWrapper = function RegExp2(pattern, flags) {
        var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);
        var patternIsRegExp = isRegExp(pattern);
        var flagsAreUndefined = flags === void 0;
        var groups = [];
        var rawPattern = pattern;
        var rawFlags, dotAll, sticky, handled, result, state;
        if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {
          return pattern;
        }
        if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {
          pattern = pattern.source;
          if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);
        }
        pattern = pattern === void 0 ? "" : toString(pattern);
        flags = flags === void 0 ? "" : toString(flags);
        rawPattern = pattern;
        if (UNSUPPORTED_DOT_ALL && "dotAll" in re1) {
          dotAll = !!flags && stringIndexOf(flags, "s") > -1;
          if (dotAll) flags = replace(flags, /s/g, "");
        }
        rawFlags = flags;
        if (MISSED_STICKY && "sticky" in re1) {
          sticky = !!flags && stringIndexOf(flags, "y") > -1;
          if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, "");
        }
        if (UNSUPPORTED_NCG) {
          handled = handleNCG(pattern);
          pattern = handled[0];
          groups = handled[1];
        }
        result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);
        if (dotAll || sticky || groups.length) {
          state = enforceInternalState(result);
          if (dotAll) {
            state.dotAll = true;
            state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);
          }
          if (sticky) state.sticky = true;
          if (groups.length) state.groups = groups;
        }
        if (pattern !== rawPattern) try {
          createNonEnumerableProperty(result, "source", rawPattern === "" ? "(?:)" : rawPattern);
        } catch (error) {
        }
        return result;
      };
      for (keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index; ) {
        proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);
      }
      RegExpPrototype.constructor = RegExpWrapper;
      RegExpWrapper.prototype = RegExpPrototype;
      defineBuiltIn(globalThis2, "RegExp", RegExpWrapper, { constructor: true });
    }
    var RegExpWrapper;
    var keys;
    var index;
    setSpecies("RegExp");
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.dot-all.js
var require_es_regexp_dot_all = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.dot-all.js"() {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
    var classof = require_classof_raw();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var getInternalState = require_internal_state().get;
    var RegExpPrototype = RegExp.prototype;
    var $TypeError = TypeError;
    if (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {
      defineBuiltInAccessor(RegExpPrototype, "dotAll", {
        configurable: true,
        get: function dotAll() {
          if (this === RegExpPrototype) return;
          if (classof(this) === "RegExp") {
            return !!getInternalState(this).dotAll;
          }
          throw new $TypeError("Incompatible receiver, RegExp required");
        }
      });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.sticky.js
var require_es_regexp_sticky = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.sticky.js"() {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var MISSED_STICKY = require_regexp_sticky_helpers().MISSED_STICKY;
    var classof = require_classof_raw();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var getInternalState = require_internal_state().get;
    var RegExpPrototype = RegExp.prototype;
    var $TypeError = TypeError;
    if (DESCRIPTORS && MISSED_STICKY) {
      defineBuiltInAccessor(RegExpPrototype, "sticky", {
        configurable: true,
        get: function sticky() {
          if (this === RegExpPrototype) return;
          if (classof(this) === "RegExp") {
            return !!getInternalState(this).sticky;
          }
          throw new $TypeError("Incompatible receiver, RegExp required");
        }
      });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.to-string.js
var require_es_regexp_to_string = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.regexp.to-string.js"() {
    "use strict";
    var PROPER_FUNCTION_NAME = require_function_name().PROPER;
    var defineBuiltIn = require_define_built_in();
    var anObject = require_an_object();
    var $toString = require_to_string();
    var fails = require_fails();
    var getRegExpFlags = require_regexp_get_flags();
    var TO_STRING = "toString";
    var RegExpPrototype = RegExp.prototype;
    var nativeToString = RegExpPrototype[TO_STRING];
    var NOT_GENERIC = fails(function() {
      return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b";
    });
    var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;
    if (NOT_GENERIC || INCORRECT_NAME) {
      defineBuiltIn(RegExpPrototype, TO_STRING, function toString() {
        var R = anObject(this);
        var pattern = $toString(R.source);
        var flags = $toString(getRegExpFlags(R));
        return "/" + pattern + "/" + flags;
      }, { unsafe: true });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/not-a-regexp.js
var require_not_a_regexp = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/not-a-regexp.js"(exports, module2) {
    "use strict";
    var isRegExp = require_is_regexp();
    var $TypeError = TypeError;
    module2.exports = function(it) {
      if (isRegExp(it)) {
        throw new $TypeError("The method doesn't accept regular expressions");
      }
      return it;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/correct-is-regexp-logic.js
var require_correct_is_regexp_logic = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/correct-is-regexp-logic.js"(exports, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var MATCH = wellKnownSymbol("match");
    module2.exports = function(METHOD_NAME) {
      var regexp = /./;
      try {
        "/./"[METHOD_NAME](regexp);
      } catch (error1) {
        try {
          regexp[MATCH] = false;
          return "/./"[METHOD_NAME](regexp);
        } catch (error2) {
        }
      }
      return false;
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.includes.js
var require_es_string_includes = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.includes.js"() {
    "use strict";
    var $2 = require_export();
    var uncurryThis = require_function_uncurry_this();
    var notARegExp = require_not_a_regexp();
    var requireObjectCoercible = require_require_object_coercible();
    var toString = require_to_string();
    var correctIsRegExpLogic = require_correct_is_regexp_logic();
    var stringIndexOf = uncurryThis("".indexOf);
    $2({ target: "String", proto: true, forced: !correctIsRegExpLogic("includes") }, {
      includes: function includes(searchString) {
        return !!~stringIndexOf(
          toString(requireObjectCoercible(this)),
          toString(notARegExp(searchString)),
          arguments.length > 1 ? arguments[1] : void 0
        );
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-multibyte.js
var require_string_multibyte = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-multibyte.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var toString = require_to_string();
    var requireObjectCoercible = require_require_object_coercible();
    var charAt = uncurryThis("".charAt);
    var charCodeAt = uncurryThis("".charCodeAt);
    var stringSlice = uncurryThis("".slice);
    var createMethod = function(CONVERT_TO_STRING) {
      return function($this, pos) {
        var S = toString(requireObjectCoercible($this));
        var position = toIntegerOrInfinity(pos);
        var size = S.length;
        var first, second;
        if (position < 0 || position >= size) return CONVERT_TO_STRING ? "" : void 0;
        first = charCodeAt(S, position);
        return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536;
      };
    };
    module2.exports = {
      // `String.prototype.codePointAt` method
      // https://tc39.es/ecma262/#sec-string.prototype.codepointat
      codeAt: createMethod(false),
      // `String.prototype.at` method
      // https://github.com/mathiasbynens/String.prototype.at
      charAt: createMethod(true)
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.iterator.js
var require_es_string_iterator = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.iterator.js"() {
    "use strict";
    var charAt = require_string_multibyte().charAt;
    var toString = require_to_string();
    var InternalStateModule = require_internal_state();
    var defineIterator = require_iterator_define();
    var createIterResultObject = require_create_iter_result_object();
    var STRING_ITERATOR = "String Iterator";
    var setInternalState = InternalStateModule.set;
    var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
    defineIterator(String, "String", function(iterated) {
      setInternalState(this, {
        type: STRING_ITERATOR,
        string: toString(iterated),
        index: 0
      });
    }, function next() {
      var state = getInternalState(this);
      var string = state.string;
      var index = state.index;
      var point;
      if (index >= string.length) return createIterResultObject(void 0, true);
      point = charAt(string, index);
      state.index += point.length;
      return createIterResultObject(point, false);
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js
var require_fix_regexp_well_known_symbol_logic = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js"(exports, module2) {
    "use strict";
    require_es_regexp_exec();
    var call = require_function_call();
    var defineBuiltIn = require_define_built_in();
    var regexpExec = require_regexp_exec();
    var fails = require_fails();
    var wellKnownSymbol = require_well_known_symbol();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var SPECIES = wellKnownSymbol("species");
    var RegExpPrototype = RegExp.prototype;
    module2.exports = function(KEY, exec, FORCED, SHAM) {
      var SYMBOL = wellKnownSymbol(KEY);
      var DELEGATES_TO_SYMBOL = !fails(function() {
        var O = {};
        O[SYMBOL] = function() {
          return 7;
        };
        return ""[KEY](O) !== 7;
      });
      var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() {
        var execCalled = false;
        var re = /a/;
        if (KEY === "split") {
          re = {};
          re.constructor = {};
          re.constructor[SPECIES] = function() {
            return re;
          };
          re.flags = "";
          re[SYMBOL] = /./[SYMBOL];
        }
        re.exec = function() {
          execCalled = true;
          return null;
        };
        re[SYMBOL]("");
        return !execCalled;
      });
      if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) {
        var nativeRegExpMethod = /./[SYMBOL];
        var methods = exec(SYMBOL, ""[KEY], function(nativeMethod, regexp, str, arg2, forceStringMethod) {
          var $exec = regexp.exec;
          if ($exec === regexpExec || $exec === RegExpPrototype.exec) {
            if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
              return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };
            }
            return { done: true, value: call(nativeMethod, str, regexp, arg2) };
          }
          return { done: false };
        });
        defineBuiltIn(String.prototype, KEY, methods[0]);
        defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);
      }
      if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/advance-string-index.js
var require_advance_string_index = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/advance-string-index.js"(exports, module2) {
    "use strict";
    var charAt = require_string_multibyte().charAt;
    module2.exports = function(S, index, unicode) {
      return index + (unicode ? charAt(S, index).length : 1);
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-exec-abstract.js
var require_regexp_exec_abstract = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/regexp-exec-abstract.js"(exports, module2) {
    "use strict";
    var call = require_function_call();
    var anObject = require_an_object();
    var isCallable = require_is_callable();
    var classof = require_classof_raw();
    var regexpExec = require_regexp_exec();
    var $TypeError = TypeError;
    module2.exports = function(R, S) {
      var exec = R.exec;
      if (isCallable(exec)) {
        var result = call(exec, R, S);
        if (result !== null) anObject(result);
        return result;
      }
      if (classof(R) === "RegExp") return call(regexpExec, R, S);
      throw new $TypeError("RegExp#exec called on incompatible receiver");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.match.js
var require_es_string_match = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.match.js"() {
    "use strict";
    var call = require_function_call();
    var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic();
    var anObject = require_an_object();
    var isNullOrUndefined = require_is_null_or_undefined();
    var toLength = require_to_length();
    var toString = require_to_string();
    var requireObjectCoercible = require_require_object_coercible();
    var getMethod = require_get_method();
    var advanceStringIndex = require_advance_string_index();
    var regExpExec = require_regexp_exec_abstract();
    fixRegExpWellKnownSymbolLogic("match", function(MATCH, nativeMatch, maybeCallNative) {
      return [
        // `String.prototype.match` method
        // https://tc39.es/ecma262/#sec-string.prototype.match
        function match(regexp) {
          var O = requireObjectCoercible(this);
          var matcher = isNullOrUndefined(regexp) ? void 0 : getMethod(regexp, MATCH);
          return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));
        },
        // `RegExp.prototype[@@match]` method
        // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
        function(string) {
          var rx = anObject(this);
          var S = toString(string);
          var res = maybeCallNative(nativeMatch, rx, S);
          if (res.done) return res.value;
          if (!rx.global) return regExpExec(rx, S);
          var fullUnicode = rx.unicode;
          rx.lastIndex = 0;
          var A = [];
          var n = 0;
          var result;
          while ((result = regExpExec(rx, S)) !== null) {
            var matchStr = toString(result[0]);
            A[n] = matchStr;
            if (matchStr === "") rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
            n++;
          }
          return n === 0 ? null : A;
        }
      ];
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-substitution.js
var require_get_substitution = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/get-substitution.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toObject = require_to_object();
    var floor = Math.floor;
    var charAt = uncurryThis("".charAt);
    var replace = uncurryThis("".replace);
    var stringSlice = uncurryThis("".slice);
    var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
    var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
    module2.exports = function(matched, str, position, captures, namedCaptures, replacement) {
      var tailPos = position + matched.length;
      var m = captures.length;
      var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
      if (namedCaptures !== void 0) {
        namedCaptures = toObject(namedCaptures);
        symbols = SUBSTITUTION_SYMBOLS;
      }
      return replace(replacement, symbols, function(match, ch) {
        var capture;
        switch (charAt(ch, 0)) {
          case "$":
            return "$";
          case "&":
            return matched;
          case "`":
            return stringSlice(str, 0, position);
          case "'":
            return stringSlice(str, tailPos);
          case "<":
            capture = namedCaptures[stringSlice(ch, 1, -1)];
            break;
          default:
            var n = +ch;
            if (n === 0) return match;
            if (n > m) {
              var f = floor(n / 10);
              if (f === 0) return match;
              if (f <= m) return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
              return match;
            }
            capture = captures[n - 1];
        }
        return capture === void 0 ? "" : capture;
      });
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.replace.js
var require_es_string_replace = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.replace.js"() {
    "use strict";
    var apply = require_function_apply();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic();
    var fails = require_fails();
    var anObject = require_an_object();
    var isCallable = require_is_callable();
    var isNullOrUndefined = require_is_null_or_undefined();
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var toLength = require_to_length();
    var toString = require_to_string();
    var requireObjectCoercible = require_require_object_coercible();
    var advanceStringIndex = require_advance_string_index();
    var getMethod = require_get_method();
    var getSubstitution = require_get_substitution();
    var regExpExec = require_regexp_exec_abstract();
    var wellKnownSymbol = require_well_known_symbol();
    var REPLACE = wellKnownSymbol("replace");
    var max = Math.max;
    var min = Math.min;
    var concat = uncurryThis([].concat);
    var push = uncurryThis([].push);
    var stringIndexOf = uncurryThis("".indexOf);
    var stringSlice = uncurryThis("".slice);
    var maybeToString = function(it) {
      return it === void 0 ? it : String(it);
    };
    var REPLACE_KEEPS_$0 = function() {
      return "a".replace(/./, "$0") === "$0";
    }();
    var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() {
      if (/./[REPLACE]) {
        return /./[REPLACE]("a", "$0") === "";
      }
      return false;
    }();
    var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() {
      var re = /./;
      re.exec = function() {
        var result = [];
        result.groups = { a: "7" };
        return result;
      };
      return "".replace(re, "$<a>") !== "7";
    });
    fixRegExpWellKnownSymbolLogic("replace", function(_, nativeReplace, maybeCallNative) {
      var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? "$" : "$0";
      return [
        // `String.prototype.replace` method
        // https://tc39.es/ecma262/#sec-string.prototype.replace
        function replace(searchValue, replaceValue) {
          var O = requireObjectCoercible(this);
          var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE);
          return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue);
        },
        // `RegExp.prototype[@@replace]` method
        // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
        function(string, replaceValue) {
          var rx = anObject(this);
          var S = toString(string);
          if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) {
            var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
            if (res.done) return res.value;
          }
          var functionalReplace = isCallable(replaceValue);
          if (!functionalReplace) replaceValue = toString(replaceValue);
          var global2 = rx.global;
          var fullUnicode;
          if (global2) {
            fullUnicode = rx.unicode;
            rx.lastIndex = 0;
          }
          var results = [];
          var result;
          while (true) {
            result = regExpExec(rx, S);
            if (result === null) break;
            push(results, result);
            if (!global2) break;
            var matchStr = toString(result[0]);
            if (matchStr === "") rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
          }
          var accumulatedResult = "";
          var nextSourcePosition = 0;
          for (var i = 0; i < results.length; i++) {
            result = results[i];
            var matched = toString(result[0]);
            var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
            var captures = [];
            var replacement;
            for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
            var namedCaptures = result.groups;
            if (functionalReplace) {
              var replacerArgs = concat([matched], captures, position, S);
              if (namedCaptures !== void 0) push(replacerArgs, namedCaptures);
              replacement = toString(apply(replaceValue, void 0, replacerArgs));
            } else {
              replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
            }
            if (position >= nextSourcePosition) {
              accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
              nextSourcePosition = position + matched.length;
            }
          }
          return accumulatedResult + stringSlice(S, nextSourcePosition);
        }
      ];
    }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-trim-forced.js
var require_string_trim_forced = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-trim-forced.js"(exports, module2) {
    "use strict";
    var PROPER_FUNCTION_NAME = require_function_name().PROPER;
    var fails = require_fails();
    var whitespaces = require_whitespaces();
    var non = "​…᠎";
    module2.exports = function(METHOD_NAME) {
      return fails(function() {
        return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() !== non || PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME;
      });
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.trim.js
var require_es_string_trim = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.trim.js"() {
    "use strict";
    var $2 = require_export();
    var $trim = require_string_trim().trim;
    var forcedStringTrimMethod = require_string_trim_forced();
    $2({ target: "String", proto: true, forced: forcedStringTrimMethod("trim") }, {
      trim: function trim() {
        return $trim(this);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/url-constructor-detection.js
var require_url_constructor_detection = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/url-constructor-detection.js"(exports, module2) {
    "use strict";
    var fails = require_fails();
    var wellKnownSymbol = require_well_known_symbol();
    var DESCRIPTORS = require_descriptors();
    var IS_PURE = require_is_pure();
    var ITERATOR = wellKnownSymbol("iterator");
    module2.exports = !fails(function() {
      var url = new URL("b?a=1&b=2&c=3", "https://a");
      var params = url.searchParams;
      var params2 = new URLSearchParams("a=1&a=2&b=3");
      var result = "";
      url.pathname = "c%20d";
      params.forEach(function(value, key) {
        params["delete"]("b");
        result += key + value;
      });
      params2["delete"]("a", 2);
      params2["delete"]("b", void 0);
      return IS_PURE && (!url.toJSON || !params2.has("a", 1) || params2.has("a", 2) || !params2.has("a", void 0) || params2.has("b")) || !params.size && (IS_PURE || !DESCRIPTORS) || !params.sort || url.href !== "https://a/c%20d?a=1&c=3" || params.get("c") !== "3" || String(new URLSearchParams("?a=1")) !== "a=1" || !params[ITERATOR] || new URL("https://a@b").username !== "a" || new URLSearchParams(new URLSearchParams("a=b")).get("a") !== "b" || new URL("https://тест").host !== "xn--e1aybc" || new URL("https://a#б").hash !== "#%D0%B1" || result !== "a1c3" || new URL("https://x", void 0).host !== "x";
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-assign.js
var require_object_assign = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/object-assign.js"(exports, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var uncurryThis = require_function_uncurry_this();
    var call = require_function_call();
    var fails = require_fails();
    var objectKeys = require_object_keys();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var propertyIsEnumerableModule = require_object_property_is_enumerable();
    var toObject = require_to_object();
    var IndexedObject = require_indexed_object();
    var $assign = Object.assign;
    var defineProperty = Object.defineProperty;
    var concat = uncurryThis([].concat);
    module2.exports = !$assign || fails(function() {
      if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, "a", {
        enumerable: true,
        get: function() {
          defineProperty(this, "b", {
            value: 3,
            enumerable: false
          });
        }
      }), { b: 2 })).b !== 1) return true;
      var A = {};
      var B = {};
      var symbol = Symbol("assign detection");
      var alphabet = "abcdefghijklmnopqrst";
      A[symbol] = 7;
      alphabet.split("").forEach(function(chr) {
        B[chr] = chr;
      });
      return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join("") !== alphabet;
    }) ? function assign(target, source) {
      var T = toObject(target);
      var argumentsLength = arguments.length;
      var index = 1;
      var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
      var propertyIsEnumerable = propertyIsEnumerableModule.f;
      while (argumentsLength > index) {
        var S = IndexedObject(arguments[index++]);
        var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);
        var length = keys.length;
        var j = 0;
        var key;
        while (length > j) {
          key = keys[j++];
          if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];
        }
      }
      return T;
    } : $assign;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-punycode-to-ascii.js
var require_string_punycode_to_ascii = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/string-punycode-to-ascii.js"(exports, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var maxInt = 2147483647;
    var base = 36;
    var tMin = 1;
    var tMax = 26;
    var skew = 38;
    var damp = 700;
    var initialBias = 72;
    var initialN = 128;
    var delimiter = "-";
    var regexNonASCII = /[^\0-\u007E]/;
    var regexSeparators = /[.\u3002\uFF0E\uFF61]/g;
    var OVERFLOW_ERROR = "Overflow: input needs wider integers to process";
    var baseMinusTMin = base - tMin;
    var $RangeError = RangeError;
    var exec = uncurryThis(regexSeparators.exec);
    var floor = Math.floor;
    var fromCharCode = String.fromCharCode;
    var charCodeAt = uncurryThis("".charCodeAt);
    var join = uncurryThis([].join);
    var push = uncurryThis([].push);
    var replace = uncurryThis("".replace);
    var split = uncurryThis("".split);
    var toLowerCase = uncurryThis("".toLowerCase);
    var ucs2decode = function(string) {
      var output = [];
      var counter = 0;
      var length = string.length;
      while (counter < length) {
        var value = charCodeAt(string, counter++);
        if (value >= 55296 && value <= 56319 && counter < length) {
          var extra = charCodeAt(string, counter++);
          if ((extra & 64512) === 56320) {
            push(output, ((value & 1023) << 10) + (extra & 1023) + 65536);
          } else {
            push(output, value);
            counter--;
          }
        } else {
          push(output, value);
        }
      }
      return output;
    };
    var digitToBasic = function(digit) {
      return digit + 22 + 75 * (digit < 26);
    };
    var adapt = function(delta, numPoints, firstTime) {
      var k = 0;
      delta = firstTime ? floor(delta / damp) : delta >> 1;
      delta += floor(delta / numPoints);
      while (delta > baseMinusTMin * tMax >> 1) {
        delta = floor(delta / baseMinusTMin);
        k += base;
      }
      return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
    };
    var encode = function(input) {
      var output = [];
      input = ucs2decode(input);
      var inputLength = input.length;
      var n = initialN;
      var delta = 0;
      var bias = initialBias;
      var i, currentValue;
      for (i = 0; i < input.length; i++) {
        currentValue = input[i];
        if (currentValue < 128) {
          push(output, fromCharCode(currentValue));
        }
      }
      var basicLength = output.length;
      var handledCPCount = basicLength;
      if (basicLength) {
        push(output, delimiter);
      }
      while (handledCPCount < inputLength) {
        var m = maxInt;
        for (i = 0; i < input.length; i++) {
          currentValue = input[i];
          if (currentValue >= n && currentValue < m) {
            m = currentValue;
          }
        }
        var handledCPCountPlusOne = handledCPCount + 1;
        if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
          throw new $RangeError(OVERFLOW_ERROR);
        }
        delta += (m - n) * handledCPCountPlusOne;
        n = m;
        for (i = 0; i < input.length; i++) {
          currentValue = input[i];
          if (currentValue < n && ++delta > maxInt) {
            throw new $RangeError(OVERFLOW_ERROR);
          }
          if (currentValue === n) {
            var q = delta;
            var k = base;
            while (true) {
              var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
              if (q < t) break;
              var qMinusT = q - t;
              var baseMinusT = base - t;
              push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
              q = floor(qMinusT / baseMinusT);
              k += base;
            }
            push(output, fromCharCode(digitToBasic(q)));
            bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);
            delta = 0;
            handledCPCount++;
          }
        }
        delta++;
        n++;
      }
      return join(output, "");
    };
    module2.exports = function(input) {
      var encoded = [];
      var labels = split(replace(toLowerCase(input), regexSeparators, "."), ".");
      var i, label;
      for (i = 0; i < labels.length; i++) {
        label = labels[i];
        push(encoded, exec(regexNonASCII, label) ? "xn--" + encode(label) : label);
      }
      return join(encoded, ".");
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.from-code-point.js
var require_es_string_from_code_point = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/es.string.from-code-point.js"() {
    "use strict";
    var $2 = require_export();
    var uncurryThis = require_function_uncurry_this();
    var toAbsoluteIndex = require_to_absolute_index();
    var $RangeError = RangeError;
    var fromCharCode = String.fromCharCode;
    var $fromCodePoint = String.fromCodePoint;
    var join = uncurryThis([].join);
    var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1;
    $2({ target: "String", stat: true, arity: 1, forced: INCORRECT_LENGTH }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      fromCodePoint: function fromCodePoint(x) {
        var elements = [];
        var length = arguments.length;
        var i = 0;
        var code;
        while (length > i) {
          code = +arguments[i++];
          if (toAbsoluteIndex(code, 1114111) !== code) throw new $RangeError(code + " is not a valid code point");
          elements[i] = code < 65536 ? fromCharCode(code) : fromCharCode(((code -= 65536) >> 10) + 55296, code % 1024 + 56320);
        }
        return join(elements, "");
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-sort.js
var require_array_sort = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/internals/array-sort.js"(exports, module2) {
    "use strict";
    var arraySlice = require_array_slice();
    var floor = Math.floor;
    var sort = function(array, comparefn) {
      var length = array.length;
      if (length < 8) {
        var i = 1;
        var element, j;
        while (i < length) {
          j = i;
          element = array[i];
          while (j && comparefn(array[j - 1], element) > 0) {
            array[j] = array[--j];
          }
          if (j !== i++) array[j] = element;
        }
      } else {
        var middle = floor(length / 2);
        var left = sort(arraySlice(array, 0, middle), comparefn);
        var right = sort(arraySlice(array, middle), comparefn);
        var llength = left.length;
        var rlength = right.length;
        var lindex = 0;
        var rindex = 0;
        while (lindex < llength || rindex < rlength) {
          array[lindex + rindex] = lindex < llength && rindex < rlength ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++] : lindex < llength ? left[lindex++] : right[rindex++];
        }
      }
      return array;
    };
    module2.exports = sort;
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.constructor.js
var require_web_url_search_params_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.constructor.js"(exports, module2) {
    "use strict";
    require_es_array_iterator();
    require_es_string_from_code_point();
    var $2 = require_export();
    var globalThis2 = require_global_this();
    var safeGetBuiltIn = require_safe_get_built_in();
    var getBuiltIn = require_get_built_in();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var DESCRIPTORS = require_descriptors();
    var USE_NATIVE_URL = require_url_constructor_detection();
    var defineBuiltIn = require_define_built_in();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var defineBuiltIns = require_define_built_ins();
    var setToStringTag = require_set_to_string_tag();
    var createIteratorConstructor = require_iterator_create_constructor();
    var InternalStateModule = require_internal_state();
    var anInstance = require_an_instance();
    var isCallable = require_is_callable();
    var hasOwn = require_has_own_property();
    var bind = require_function_bind_context();
    var classof = require_classof();
    var anObject = require_an_object();
    var isObject = require_is_object();
    var $toString = require_to_string();
    var create = require_object_create();
    var createPropertyDescriptor = require_create_property_descriptor();
    var getIterator = require_get_iterator();
    var getIteratorMethod = require_get_iterator_method();
    var createIterResultObject = require_create_iter_result_object();
    var validateArgumentsLength = require_validate_arguments_length();
    var wellKnownSymbol = require_well_known_symbol();
    var arraySort = require_array_sort();
    var ITERATOR = wellKnownSymbol("iterator");
    var URL_SEARCH_PARAMS = "URLSearchParams";
    var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + "Iterator";
    var setInternalState = InternalStateModule.set;
    var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);
    var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);
    var nativeFetch = safeGetBuiltIn("fetch");
    var NativeRequest = safeGetBuiltIn("Request");
    var Headers = safeGetBuiltIn("Headers");
    var RequestPrototype = NativeRequest && NativeRequest.prototype;
    var HeadersPrototype = Headers && Headers.prototype;
    var TypeError2 = globalThis2.TypeError;
    var encodeURIComponent2 = globalThis2.encodeURIComponent;
    var fromCharCode = String.fromCharCode;
    var fromCodePoint = getBuiltIn("String", "fromCodePoint");
    var $parseInt = parseInt;
    var charAt = uncurryThis("".charAt);
    var join = uncurryThis([].join);
    var push = uncurryThis([].push);
    var replace = uncurryThis("".replace);
    var shift = uncurryThis([].shift);
    var splice = uncurryThis([].splice);
    var split = uncurryThis("".split);
    var stringSlice = uncurryThis("".slice);
    var exec = uncurryThis(/./.exec);
    var plus = /\+/g;
    var FALLBACK_REPLACER = "�";
    var VALID_HEX = /^[0-9a-f]+$/i;
    var parseHexOctet = function(string, start) {
      var substr = stringSlice(string, start, start + 2);
      if (!exec(VALID_HEX, substr)) return NaN;
      return $parseInt(substr, 16);
    };
    var getLeadingOnes = function(octet) {
      var count = 0;
      for (var mask = 128; mask > 0 && (octet & mask) !== 0; mask >>= 1) {
        count++;
      }
      return count;
    };
    var utf8Decode = function(octets) {
      var codePoint = null;
      switch (octets.length) {
        case 1:
          codePoint = octets[0];
          break;
        case 2:
          codePoint = (octets[0] & 31) << 6 | octets[1] & 63;
          break;
        case 3:
          codePoint = (octets[0] & 15) << 12 | (octets[1] & 63) << 6 | octets[2] & 63;
          break;
        case 4:
          codePoint = (octets[0] & 7) << 18 | (octets[1] & 63) << 12 | (octets[2] & 63) << 6 | octets[3] & 63;
          break;
      }
      return codePoint > 1114111 ? null : codePoint;
    };
    var decode = function(input) {
      input = replace(input, plus, " ");
      var length = input.length;
      var result = "";
      var i = 0;
      while (i < length) {
        var decodedChar = charAt(input, i);
        if (decodedChar === "%") {
          if (charAt(input, i + 1) === "%" || i + 3 > length) {
            result += "%";
            i++;
            continue;
          }
          var octet = parseHexOctet(input, i + 1);
          if (octet !== octet) {
            result += decodedChar;
            i++;
            continue;
          }
          i += 2;
          var byteSequenceLength = getLeadingOnes(octet);
          if (byteSequenceLength === 0) {
            decodedChar = fromCharCode(octet);
          } else {
            if (byteSequenceLength === 1 || byteSequenceLength > 4) {
              result += FALLBACK_REPLACER;
              i++;
              continue;
            }
            var octets = [octet];
            var sequenceIndex = 1;
            while (sequenceIndex < byteSequenceLength) {
              i++;
              if (i + 3 > length || charAt(input, i) !== "%") break;
              var nextByte = parseHexOctet(input, i + 1);
              if (nextByte !== nextByte) {
                i += 3;
                break;
              }
              if (nextByte > 191 || nextByte < 128) break;
              push(octets, nextByte);
              i += 2;
              sequenceIndex++;
            }
            if (octets.length !== byteSequenceLength) {
              result += FALLBACK_REPLACER;
              continue;
            }
            var codePoint = utf8Decode(octets);
            if (codePoint === null) {
              result += FALLBACK_REPLACER;
            } else {
              decodedChar = fromCodePoint(codePoint);
            }
          }
        }
        result += decodedChar;
        i++;
      }
      return result;
    };
    var find = /[!'()~]|%20/g;
    var replacements = {
      "!": "%21",
      "'": "%27",
      "(": "%28",
      ")": "%29",
      "~": "%7E",
      "%20": "+"
    };
    var replacer = function(match) {
      return replacements[match];
    };
    var serialize = function(it) {
      return replace(encodeURIComponent2(it), find, replacer);
    };
    var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
      setInternalState(this, {
        type: URL_SEARCH_PARAMS_ITERATOR,
        target: getInternalParamsState(params).entries,
        index: 0,
        kind
      });
    }, URL_SEARCH_PARAMS, function next() {
      var state = getInternalIteratorState(this);
      var target = state.target;
      var index = state.index++;
      if (!target || index >= target.length) {
        state.target = null;
        return createIterResultObject(void 0, true);
      }
      var entry = target[index];
      switch (state.kind) {
        case "keys":
          return createIterResultObject(entry.key, false);
        case "values":
          return createIterResultObject(entry.value, false);
      }
      return createIterResultObject([entry.key, entry.value], false);
    }, true);
    var URLSearchParamsState = function(init) {
      this.entries = [];
      this.url = null;
      if (init !== void 0) {
        if (isObject(init)) this.parseObject(init);
        else this.parseQuery(typeof init == "string" ? charAt(init, 0) === "?" ? stringSlice(init, 1) : init : $toString(init));
      }
    };
    URLSearchParamsState.prototype = {
      type: URL_SEARCH_PARAMS,
      bindURL: function(url) {
        this.url = url;
        this.update();
      },
      parseObject: function(object) {
        var entries = this.entries;
        var iteratorMethod = getIteratorMethod(object);
        var iterator, next, step, entryIterator, entryNext, first, second;
        if (iteratorMethod) {
          iterator = getIterator(object, iteratorMethod);
          next = iterator.next;
          while (!(step = call(next, iterator)).done) {
            entryIterator = getIterator(anObject(step.value));
            entryNext = entryIterator.next;
            if ((first = call(entryNext, entryIterator)).done || (second = call(entryNext, entryIterator)).done || !call(entryNext, entryIterator).done) throw new TypeError2("Expected sequence with length 2");
            push(entries, { key: $toString(first.value), value: $toString(second.value) });
          }
        } else for (var key in object) if (hasOwn(object, key)) {
          push(entries, { key, value: $toString(object[key]) });
        }
      },
      parseQuery: function(query) {
        if (query) {
          var entries = this.entries;
          var attributes = split(query, "&");
          var index = 0;
          var attribute, entry;
          while (index < attributes.length) {
            attribute = attributes[index++];
            if (attribute.length) {
              entry = split(attribute, "=");
              push(entries, {
                key: decode(shift(entry)),
                value: decode(join(entry, "="))
              });
            }
          }
        }
      },
      serialize: function() {
        var entries = this.entries;
        var result = [];
        var index = 0;
        var entry;
        while (index < entries.length) {
          entry = entries[index++];
          push(result, serialize(entry.key) + "=" + serialize(entry.value));
        }
        return join(result, "&");
      },
      update: function() {
        this.entries.length = 0;
        this.parseQuery(this.url.query);
      },
      updateURL: function() {
        if (this.url) this.url.update();
      }
    };
    var URLSearchParamsConstructor = function URLSearchParams2() {
      anInstance(this, URLSearchParamsPrototype);
      var init = arguments.length > 0 ? arguments[0] : void 0;
      var state = setInternalState(this, new URLSearchParamsState(init));
      if (!DESCRIPTORS) this.size = state.entries.length;
    };
    var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
    defineBuiltIns(URLSearchParamsPrototype, {
      // `URLSearchParams.prototype.append` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-append
      append: function append(name, value) {
        var state = getInternalParamsState(this);
        validateArgumentsLength(arguments.length, 2);
        push(state.entries, { key: $toString(name), value: $toString(value) });
        if (!DESCRIPTORS) this.length++;
        state.updateURL();
      },
      // `URLSearchParams.prototype.delete` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
      "delete": function(name) {
        var state = getInternalParamsState(this);
        var length = validateArgumentsLength(arguments.length, 1);
        var entries = state.entries;
        var key = $toString(name);
        var $value = length < 2 ? void 0 : arguments[1];
        var value = $value === void 0 ? $value : $toString($value);
        var index = 0;
        while (index < entries.length) {
          var entry = entries[index];
          if (entry.key === key && (value === void 0 || entry.value === value)) {
            splice(entries, index, 1);
            if (value !== void 0) break;
          } else index++;
        }
        if (!DESCRIPTORS) this.size = entries.length;
        state.updateURL();
      },
      // `URLSearchParams.prototype.get` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-get
      get: function get(name) {
        var entries = getInternalParamsState(this).entries;
        validateArgumentsLength(arguments.length, 1);
        var key = $toString(name);
        var index = 0;
        for (; index < entries.length; index++) {
          if (entries[index].key === key) return entries[index].value;
        }
        return null;
      },
      // `URLSearchParams.prototype.getAll` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
      getAll: function getAll(name) {
        var entries = getInternalParamsState(this).entries;
        validateArgumentsLength(arguments.length, 1);
        var key = $toString(name);
        var result = [];
        var index = 0;
        for (; index < entries.length; index++) {
          if (entries[index].key === key) push(result, entries[index].value);
        }
        return result;
      },
      // `URLSearchParams.prototype.has` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-has
      has: function has(name) {
        var entries = getInternalParamsState(this).entries;
        var length = validateArgumentsLength(arguments.length, 1);
        var key = $toString(name);
        var $value = length < 2 ? void 0 : arguments[1];
        var value = $value === void 0 ? $value : $toString($value);
        var index = 0;
        while (index < entries.length) {
          var entry = entries[index++];
          if (entry.key === key && (value === void 0 || entry.value === value)) return true;
        }
        return false;
      },
      // `URLSearchParams.prototype.set` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-set
      set: function set(name, value) {
        var state = getInternalParamsState(this);
        validateArgumentsLength(arguments.length, 1);
        var entries = state.entries;
        var found = false;
        var key = $toString(name);
        var val = $toString(value);
        var index = 0;
        var entry;
        for (; index < entries.length; index++) {
          entry = entries[index];
          if (entry.key === key) {
            if (found) splice(entries, index--, 1);
            else {
              found = true;
              entry.value = val;
            }
          }
        }
        if (!found) push(entries, { key, value: val });
        if (!DESCRIPTORS) this.size = entries.length;
        state.updateURL();
      },
      // `URLSearchParams.prototype.sort` method
      // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
      sort: function sort() {
        var state = getInternalParamsState(this);
        arraySort(state.entries, function(a, b) {
          return a.key > b.key ? 1 : -1;
        });
        state.updateURL();
      },
      // `URLSearchParams.prototype.forEach` method
      forEach: function forEach(callback) {
        var entries = getInternalParamsState(this).entries;
        var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : void 0);
        var index = 0;
        var entry;
        while (index < entries.length) {
          entry = entries[index++];
          boundFunction(entry.value, entry.key, this);
        }
      },
      // `URLSearchParams.prototype.keys` method
      keys: function keys() {
        return new URLSearchParamsIterator(this, "keys");
      },
      // `URLSearchParams.prototype.values` method
      values: function values() {
        return new URLSearchParamsIterator(this, "values");
      },
      // `URLSearchParams.prototype.entries` method
      entries: function entries() {
        return new URLSearchParamsIterator(this, "entries");
      }
    }, { enumerable: true });
    defineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: "entries" });
    defineBuiltIn(URLSearchParamsPrototype, "toString", function toString() {
      return getInternalParamsState(this).serialize();
    }, { enumerable: true });
    if (DESCRIPTORS) defineBuiltInAccessor(URLSearchParamsPrototype, "size", {
      get: function size() {
        return getInternalParamsState(this).entries.length;
      },
      configurable: true,
      enumerable: true
    });
    setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
    $2({ global: true, constructor: true, forced: !USE_NATIVE_URL }, {
      URLSearchParams: URLSearchParamsConstructor
    });
    if (!USE_NATIVE_URL && isCallable(Headers)) {
      headersHas = uncurryThis(HeadersPrototype.has);
      headersSet = uncurryThis(HeadersPrototype.set);
      wrapRequestOptions = function(init) {
        if (isObject(init)) {
          var body = init.body;
          var headers;
          if (classof(body) === URL_SEARCH_PARAMS) {
            headers = init.headers ? new Headers(init.headers) : new Headers();
            if (!headersHas(headers, "content-type")) {
              headersSet(headers, "content-type", "application/x-www-form-urlencoded;charset=UTF-8");
            }
            return create(init, {
              body: createPropertyDescriptor(0, $toString(body)),
              headers: createPropertyDescriptor(0, headers)
            });
          }
        }
        return init;
      };
      if (isCallable(nativeFetch)) {
        $2({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {
          fetch: function fetch2(input) {
            return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
          }
        });
      }
      if (isCallable(NativeRequest)) {
        RequestConstructor = function Request2(input) {
          anInstance(this, RequestPrototype);
          return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
        };
        RequestPrototype.constructor = RequestConstructor;
        RequestConstructor.prototype = RequestPrototype;
        $2({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {
          Request: RequestConstructor
        });
      }
    }
    var headersHas;
    var headersSet;
    var wrapRequestOptions;
    var RequestConstructor;
    module2.exports = {
      URLSearchParams: URLSearchParamsConstructor,
      getState: getInternalParamsState
    };
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url.constructor.js
var require_web_url_constructor = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url.constructor.js"() {
    "use strict";
    require_es_string_iterator();
    var $2 = require_export();
    var DESCRIPTORS = require_descriptors();
    var USE_NATIVE_URL = require_url_constructor_detection();
    var globalThis2 = require_global_this();
    var bind = require_function_bind_context();
    var uncurryThis = require_function_uncurry_this();
    var defineBuiltIn = require_define_built_in();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var anInstance = require_an_instance();
    var hasOwn = require_has_own_property();
    var assign = require_object_assign();
    var arrayFrom = require_array_from();
    var arraySlice = require_array_slice();
    var codeAt = require_string_multibyte().codeAt;
    var toASCII = require_string_punycode_to_ascii();
    var $toString = require_to_string();
    var setToStringTag = require_set_to_string_tag();
    var validateArgumentsLength = require_validate_arguments_length();
    var URLSearchParamsModule = require_web_url_search_params_constructor();
    var InternalStateModule = require_internal_state();
    var setInternalState = InternalStateModule.set;
    var getInternalURLState = InternalStateModule.getterFor("URL");
    var URLSearchParams2 = URLSearchParamsModule.URLSearchParams;
    var getInternalSearchParamsState = URLSearchParamsModule.getState;
    var NativeURL = globalThis2.URL;
    var TypeError2 = globalThis2.TypeError;
    var parseInt2 = globalThis2.parseInt;
    var floor = Math.floor;
    var pow = Math.pow;
    var charAt = uncurryThis("".charAt);
    var exec = uncurryThis(/./.exec);
    var join = uncurryThis([].join);
    var numberToString = uncurryThis(1 .toString);
    var pop = uncurryThis([].pop);
    var push = uncurryThis([].push);
    var replace = uncurryThis("".replace);
    var shift = uncurryThis([].shift);
    var split = uncurryThis("".split);
    var stringSlice = uncurryThis("".slice);
    var toLowerCase = uncurryThis("".toLowerCase);
    var unshift = uncurryThis([].unshift);
    var INVALID_AUTHORITY = "Invalid authority";
    var INVALID_SCHEME = "Invalid scheme";
    var INVALID_HOST = "Invalid host";
    var INVALID_PORT = "Invalid port";
    var ALPHA = /[a-z]/i;
    var ALPHANUMERIC = /[\d+-.a-z]/i;
    var DIGIT = /\d/;
    var HEX_START = /^0x/i;
    var OCT = /^[0-7]+$/;
    var DEC = /^\d+$/;
    var HEX = /^[\da-f]+$/i;
    var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/;
    var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/;
    var LEADING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+/;
    var TRAILING_C0_CONTROL_OR_SPACE = /(^|[^\u0000-\u0020])[\u0000-\u0020]+$/;
    var TAB_AND_NEW_LINE = /[\t\n\r]/g;
    var EOF;
    var parseIPv4 = function(input) {
      var parts = split(input, ".");
      var partsLength, numbers, index, part, radix, number, ipv4;
      if (parts.length && parts[parts.length - 1] === "") {
        parts.length--;
      }
      partsLength = parts.length;
      if (partsLength > 4) return input;
      numbers = [];
      for (index = 0; index < partsLength; index++) {
        part = parts[index];
        if (part === "") return input;
        radix = 10;
        if (part.length > 1 && charAt(part, 0) === "0") {
          radix = exec(HEX_START, part) ? 16 : 8;
          part = stringSlice(part, radix === 8 ? 1 : 2);
        }
        if (part === "") {
          number = 0;
        } else {
          if (!exec(radix === 10 ? DEC : radix === 8 ? OCT : HEX, part)) return input;
          number = parseInt2(part, radix);
        }
        push(numbers, number);
      }
      for (index = 0; index < partsLength; index++) {
        number = numbers[index];
        if (index === partsLength - 1) {
          if (number >= pow(256, 5 - partsLength)) return null;
        } else if (number > 255) return null;
      }
      ipv4 = pop(numbers);
      for (index = 0; index < numbers.length; index++) {
        ipv4 += numbers[index] * pow(256, 3 - index);
      }
      return ipv4;
    };
    var parseIPv6 = function(input) {
      var address = [0, 0, 0, 0, 0, 0, 0, 0];
      var pieceIndex = 0;
      var compress = null;
      var pointer = 0;
      var value, length, numbersSeen, ipv4Piece, number, swaps, swap;
      var chr = function() {
        return charAt(input, pointer);
      };
      if (chr() === ":") {
        if (charAt(input, 1) !== ":") return;
        pointer += 2;
        pieceIndex++;
        compress = pieceIndex;
      }
      while (chr()) {
        if (pieceIndex === 8) return;
        if (chr() === ":") {
          if (compress !== null) return;
          pointer++;
          pieceIndex++;
          compress = pieceIndex;
          continue;
        }
        value = length = 0;
        while (length < 4 && exec(HEX, chr())) {
          value = value * 16 + parseInt2(chr(), 16);
          pointer++;
          length++;
        }
        if (chr() === ".") {
          if (length === 0) return;
          pointer -= length;
          if (pieceIndex > 6) return;
          numbersSeen = 0;
          while (chr()) {
            ipv4Piece = null;
            if (numbersSeen > 0) {
              if (chr() === "." && numbersSeen < 4) pointer++;
              else return;
            }
            if (!exec(DIGIT, chr())) return;
            while (exec(DIGIT, chr())) {
              number = parseInt2(chr(), 10);
              if (ipv4Piece === null) ipv4Piece = number;
              else if (ipv4Piece === 0) return;
              else ipv4Piece = ipv4Piece * 10 + number;
              if (ipv4Piece > 255) return;
              pointer++;
            }
            address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
            numbersSeen++;
            if (numbersSeen === 2 || numbersSeen === 4) pieceIndex++;
          }
          if (numbersSeen !== 4) return;
          break;
        } else if (chr() === ":") {
          pointer++;
          if (!chr()) return;
        } else if (chr()) return;
        address[pieceIndex++] = value;
      }
      if (compress !== null) {
        swaps = pieceIndex - compress;
        pieceIndex = 7;
        while (pieceIndex !== 0 && swaps > 0) {
          swap = address[pieceIndex];
          address[pieceIndex--] = address[compress + swaps - 1];
          address[compress + --swaps] = swap;
        }
      } else if (pieceIndex !== 8) return;
      return address;
    };
    var findLongestZeroSequence = function(ipv6) {
      var maxIndex = null;
      var maxLength = 1;
      var currStart = null;
      var currLength = 0;
      var index = 0;
      for (; index < 8; index++) {
        if (ipv6[index] !== 0) {
          if (currLength > maxLength) {
            maxIndex = currStart;
            maxLength = currLength;
          }
          currStart = null;
          currLength = 0;
        } else {
          if (currStart === null) currStart = index;
          ++currLength;
        }
      }
      return currLength > maxLength ? currStart : maxIndex;
    };
    var serializeHost = function(host) {
      var result, index, compress, ignore0;
      if (typeof host == "number") {
        result = [];
        for (index = 0; index < 4; index++) {
          unshift(result, host % 256);
          host = floor(host / 256);
        }
        return join(result, ".");
      }
      if (typeof host == "object") {
        result = "";
        compress = findLongestZeroSequence(host);
        for (index = 0; index < 8; index++) {
          if (ignore0 && host[index] === 0) continue;
          if (ignore0) ignore0 = false;
          if (compress === index) {
            result += index ? ":" : "::";
            ignore0 = true;
          } else {
            result += numberToString(host[index], 16);
            if (index < 7) result += ":";
          }
        }
        return "[" + result + "]";
      }
      return host;
    };
    var C0ControlPercentEncodeSet = {};
    var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
      " ": 1,
      '"': 1,
      "<": 1,
      ">": 1,
      "`": 1
    });
    var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
      "#": 1,
      "?": 1,
      "{": 1,
      "}": 1
    });
    var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
      "/": 1,
      ":": 1,
      ";": 1,
      "=": 1,
      "@": 1,
      "[": 1,
      "\\": 1,
      "]": 1,
      "^": 1,
      "|": 1
    });
    var percentEncode = function(chr, set) {
      var code = codeAt(chr, 0);
      return code > 32 && code < 127 && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);
    };
    var specialSchemes = {
      ftp: 21,
      file: null,
      http: 80,
      https: 443,
      ws: 80,
      wss: 443
    };
    var isWindowsDriveLetter = function(string, normalized) {
      var second;
      return string.length === 2 && exec(ALPHA, charAt(string, 0)) && ((second = charAt(string, 1)) === ":" || !normalized && second === "|");
    };
    var startsWithWindowsDriveLetter = function(string) {
      var third;
      return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (string.length === 2 || ((third = charAt(string, 2)) === "/" || third === "\\" || third === "?" || third === "#"));
    };
    var isSingleDot = function(segment) {
      return segment === "." || toLowerCase(segment) === "%2e";
    };
    var isDoubleDot = function(segment) {
      segment = toLowerCase(segment);
      return segment === ".." || segment === "%2e." || segment === ".%2e" || segment === "%2e%2e";
    };
    var SCHEME_START = {};
    var SCHEME = {};
    var NO_SCHEME = {};
    var SPECIAL_RELATIVE_OR_AUTHORITY = {};
    var PATH_OR_AUTHORITY = {};
    var RELATIVE = {};
    var RELATIVE_SLASH = {};
    var SPECIAL_AUTHORITY_SLASHES = {};
    var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
    var AUTHORITY = {};
    var HOST = {};
    var HOSTNAME = {};
    var PORT = {};
    var FILE = {};
    var FILE_SLASH = {};
    var FILE_HOST = {};
    var PATH_START = {};
    var PATH = {};
    var CANNOT_BE_A_BASE_URL_PATH = {};
    var QUERY = {};
    var FRAGMENT = {};
    var URLState = function(url, isBase, base) {
      var urlString = $toString(url);
      var baseState, failure, searchParams;
      if (isBase) {
        failure = this.parse(urlString);
        if (failure) throw new TypeError2(failure);
        this.searchParams = null;
      } else {
        if (base !== void 0) baseState = new URLState(base, true);
        failure = this.parse(urlString, null, baseState);
        if (failure) throw new TypeError2(failure);
        searchParams = getInternalSearchParamsState(new URLSearchParams2());
        searchParams.bindURL(this);
        this.searchParams = searchParams;
      }
    };
    URLState.prototype = {
      type: "URL",
      // https://url.spec.whatwg.org/#url-parsing
      // eslint-disable-next-line max-statements -- TODO
      parse: function(input, stateOverride, base) {
        var url = this;
        var state = stateOverride || SCHEME_START;
        var pointer = 0;
        var buffer = "";
        var seenAt = false;
        var seenBracket = false;
        var seenPasswordToken = false;
        var codePoints, chr, bufferCodePoints, failure;
        input = $toString(input);
        if (!stateOverride) {
          url.scheme = "";
          url.username = "";
          url.password = "";
          url.host = null;
          url.port = null;
          url.path = [];
          url.query = null;
          url.fragment = null;
          url.cannotBeABaseURL = false;
          input = replace(input, LEADING_C0_CONTROL_OR_SPACE, "");
          input = replace(input, TRAILING_C0_CONTROL_OR_SPACE, "$1");
        }
        input = replace(input, TAB_AND_NEW_LINE, "");
        codePoints = arrayFrom(input);
        while (pointer <= codePoints.length) {
          chr = codePoints[pointer];
          switch (state) {
            case SCHEME_START:
              if (chr && exec(ALPHA, chr)) {
                buffer += toLowerCase(chr);
                state = SCHEME;
              } else if (!stateOverride) {
                state = NO_SCHEME;
                continue;
              } else return INVALID_SCHEME;
              break;
            case SCHEME:
              if (chr && (exec(ALPHANUMERIC, chr) || chr === "+" || chr === "-" || chr === ".")) {
                buffer += toLowerCase(chr);
              } else if (chr === ":") {
                if (stateOverride && (url.isSpecial() !== hasOwn(specialSchemes, buffer) || buffer === "file" && (url.includesCredentials() || url.port !== null) || url.scheme === "file" && !url.host)) return;
                url.scheme = buffer;
                if (stateOverride) {
                  if (url.isSpecial() && specialSchemes[url.scheme] === url.port) url.port = null;
                  return;
                }
                buffer = "";
                if (url.scheme === "file") {
                  state = FILE;
                } else if (url.isSpecial() && base && base.scheme === url.scheme) {
                  state = SPECIAL_RELATIVE_OR_AUTHORITY;
                } else if (url.isSpecial()) {
                  state = SPECIAL_AUTHORITY_SLASHES;
                } else if (codePoints[pointer + 1] === "/") {
                  state = PATH_OR_AUTHORITY;
                  pointer++;
                } else {
                  url.cannotBeABaseURL = true;
                  push(url.path, "");
                  state = CANNOT_BE_A_BASE_URL_PATH;
                }
              } else if (!stateOverride) {
                buffer = "";
                state = NO_SCHEME;
                pointer = 0;
                continue;
              } else return INVALID_SCHEME;
              break;
            case NO_SCHEME:
              if (!base || base.cannotBeABaseURL && chr !== "#") return INVALID_SCHEME;
              if (base.cannotBeABaseURL && chr === "#") {
                url.scheme = base.scheme;
                url.path = arraySlice(base.path);
                url.query = base.query;
                url.fragment = "";
                url.cannotBeABaseURL = true;
                state = FRAGMENT;
                break;
              }
              state = base.scheme === "file" ? FILE : RELATIVE;
              continue;
            case SPECIAL_RELATIVE_OR_AUTHORITY:
              if (chr === "/" && codePoints[pointer + 1] === "/") {
                state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
                pointer++;
              } else {
                state = RELATIVE;
                continue;
              }
              break;
            case PATH_OR_AUTHORITY:
              if (chr === "/") {
                state = AUTHORITY;
                break;
              } else {
                state = PATH;
                continue;
              }
            case RELATIVE:
              url.scheme = base.scheme;
              if (chr === EOF) {
                url.username = base.username;
                url.password = base.password;
                url.host = base.host;
                url.port = base.port;
                url.path = arraySlice(base.path);
                url.query = base.query;
              } else if (chr === "/" || chr === "\\" && url.isSpecial()) {
                state = RELATIVE_SLASH;
              } else if (chr === "?") {
                url.username = base.username;
                url.password = base.password;
                url.host = base.host;
                url.port = base.port;
                url.path = arraySlice(base.path);
                url.query = "";
                state = QUERY;
              } else if (chr === "#") {
                url.username = base.username;
                url.password = base.password;
                url.host = base.host;
                url.port = base.port;
                url.path = arraySlice(base.path);
                url.query = base.query;
                url.fragment = "";
                state = FRAGMENT;
              } else {
                url.username = base.username;
                url.password = base.password;
                url.host = base.host;
                url.port = base.port;
                url.path = arraySlice(base.path);
                url.path.length--;
                state = PATH;
                continue;
              }
              break;
            case RELATIVE_SLASH:
              if (url.isSpecial() && (chr === "/" || chr === "\\")) {
                state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
              } else if (chr === "/") {
                state = AUTHORITY;
              } else {
                url.username = base.username;
                url.password = base.password;
                url.host = base.host;
                url.port = base.port;
                state = PATH;
                continue;
              }
              break;
            case SPECIAL_AUTHORITY_SLASHES:
              state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
              if (chr !== "/" || charAt(buffer, pointer + 1) !== "/") continue;
              pointer++;
              break;
            case SPECIAL_AUTHORITY_IGNORE_SLASHES:
              if (chr !== "/" && chr !== "\\") {
                state = AUTHORITY;
                continue;
              }
              break;
            case AUTHORITY:
              if (chr === "@") {
                if (seenAt) buffer = "%40" + buffer;
                seenAt = true;
                bufferCodePoints = arrayFrom(buffer);
                for (var i = 0; i < bufferCodePoints.length; i++) {
                  var codePoint = bufferCodePoints[i];
                  if (codePoint === ":" && !seenPasswordToken) {
                    seenPasswordToken = true;
                    continue;
                  }
                  var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
                  if (seenPasswordToken) url.password += encodedCodePoints;
                  else url.username += encodedCodePoints;
                }
                buffer = "";
              } else if (chr === EOF || chr === "/" || chr === "?" || chr === "#" || chr === "\\" && url.isSpecial()) {
                if (seenAt && buffer === "") return INVALID_AUTHORITY;
                pointer -= arrayFrom(buffer).length + 1;
                buffer = "";
                state = HOST;
              } else buffer += chr;
              break;
            case HOST:
            case HOSTNAME:
              if (stateOverride && url.scheme === "file") {
                state = FILE_HOST;
                continue;
              } else if (chr === ":" && !seenBracket) {
                if (buffer === "") return INVALID_HOST;
                failure = url.parseHost(buffer);
                if (failure) return failure;
                buffer = "";
                state = PORT;
                if (stateOverride === HOSTNAME) return;
              } else if (chr === EOF || chr === "/" || chr === "?" || chr === "#" || chr === "\\" && url.isSpecial()) {
                if (url.isSpecial() && buffer === "") return INVALID_HOST;
                if (stateOverride && buffer === "" && (url.includesCredentials() || url.port !== null)) return;
                failure = url.parseHost(buffer);
                if (failure) return failure;
                buffer = "";
                state = PATH_START;
                if (stateOverride) return;
                continue;
              } else {
                if (chr === "[") seenBracket = true;
                else if (chr === "]") seenBracket = false;
                buffer += chr;
              }
              break;
            case PORT:
              if (exec(DIGIT, chr)) {
                buffer += chr;
              } else if (chr === EOF || chr === "/" || chr === "?" || chr === "#" || chr === "\\" && url.isSpecial() || stateOverride) {
                if (buffer !== "") {
                  var port = parseInt2(buffer, 10);
                  if (port > 65535) return INVALID_PORT;
                  url.port = url.isSpecial() && port === specialSchemes[url.scheme] ? null : port;
                  buffer = "";
                }
                if (stateOverride) return;
                state = PATH_START;
                continue;
              } else return INVALID_PORT;
              break;
            case FILE:
              url.scheme = "file";
              if (chr === "/" || chr === "\\") state = FILE_SLASH;
              else if (base && base.scheme === "file") {
                switch (chr) {
                  case EOF:
                    url.host = base.host;
                    url.path = arraySlice(base.path);
                    url.query = base.query;
                    break;
                  case "?":
                    url.host = base.host;
                    url.path = arraySlice(base.path);
                    url.query = "";
                    state = QUERY;
                    break;
                  case "#":
                    url.host = base.host;
                    url.path = arraySlice(base.path);
                    url.query = base.query;
                    url.fragment = "";
                    state = FRAGMENT;
                    break;
                  default:
                    if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ""))) {
                      url.host = base.host;
                      url.path = arraySlice(base.path);
                      url.shortenPath();
                    }
                    state = PATH;
                    continue;
                }
              } else {
                state = PATH;
                continue;
              }
              break;
            case FILE_SLASH:
              if (chr === "/" || chr === "\\") {
                state = FILE_HOST;
                break;
              }
              if (base && base.scheme === "file" && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ""))) {
                if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);
                else url.host = base.host;
              }
              state = PATH;
              continue;
            case FILE_HOST:
              if (chr === EOF || chr === "/" || chr === "\\" || chr === "?" || chr === "#") {
                if (!stateOverride && isWindowsDriveLetter(buffer)) {
                  state = PATH;
                } else if (buffer === "") {
                  url.host = "";
                  if (stateOverride) return;
                  state = PATH_START;
                } else {
                  failure = url.parseHost(buffer);
                  if (failure) return failure;
                  if (url.host === "localhost") url.host = "";
                  if (stateOverride) return;
                  buffer = "";
                  state = PATH_START;
                }
                continue;
              } else buffer += chr;
              break;
            case PATH_START:
              if (url.isSpecial()) {
                state = PATH;
                if (chr !== "/" && chr !== "\\") continue;
              } else if (!stateOverride && chr === "?") {
                url.query = "";
                state = QUERY;
              } else if (!stateOverride && chr === "#") {
                url.fragment = "";
                state = FRAGMENT;
              } else if (chr !== EOF) {
                state = PATH;
                if (chr !== "/") continue;
              }
              break;
            case PATH:
              if (chr === EOF || chr === "/" || chr === "\\" && url.isSpecial() || !stateOverride && (chr === "?" || chr === "#")) {
                if (isDoubleDot(buffer)) {
                  url.shortenPath();
                  if (chr !== "/" && !(chr === "\\" && url.isSpecial())) {
                    push(url.path, "");
                  }
                } else if (isSingleDot(buffer)) {
                  if (chr !== "/" && !(chr === "\\" && url.isSpecial())) {
                    push(url.path, "");
                  }
                } else {
                  if (url.scheme === "file" && !url.path.length && isWindowsDriveLetter(buffer)) {
                    if (url.host) url.host = "";
                    buffer = charAt(buffer, 0) + ":";
                  }
                  push(url.path, buffer);
                }
                buffer = "";
                if (url.scheme === "file" && (chr === EOF || chr === "?" || chr === "#")) {
                  while (url.path.length > 1 && url.path[0] === "") {
                    shift(url.path);
                  }
                }
                if (chr === "?") {
                  url.query = "";
                  state = QUERY;
                } else if (chr === "#") {
                  url.fragment = "";
                  state = FRAGMENT;
                }
              } else {
                buffer += percentEncode(chr, pathPercentEncodeSet);
              }
              break;
            case CANNOT_BE_A_BASE_URL_PATH:
              if (chr === "?") {
                url.query = "";
                state = QUERY;
              } else if (chr === "#") {
                url.fragment = "";
                state = FRAGMENT;
              } else if (chr !== EOF) {
                url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
              }
              break;
            case QUERY:
              if (!stateOverride && chr === "#") {
                url.fragment = "";
                state = FRAGMENT;
              } else if (chr !== EOF) {
                if (chr === "'" && url.isSpecial()) url.query += "%27";
                else if (chr === "#") url.query += "%23";
                else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
              }
              break;
            case FRAGMENT:
              if (chr !== EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
              break;
          }
          pointer++;
        }
      },
      // https://url.spec.whatwg.org/#host-parsing
      parseHost: function(input) {
        var result, codePoints, index;
        if (charAt(input, 0) === "[") {
          if (charAt(input, input.length - 1) !== "]") return INVALID_HOST;
          result = parseIPv6(stringSlice(input, 1, -1));
          if (!result) return INVALID_HOST;
          this.host = result;
        } else if (!this.isSpecial()) {
          if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;
          result = "";
          codePoints = arrayFrom(input);
          for (index = 0; index < codePoints.length; index++) {
            result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
          }
          this.host = result;
        } else {
          input = toASCII(input);
          if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;
          result = parseIPv4(input);
          if (result === null) return INVALID_HOST;
          this.host = result;
        }
      },
      // https://url.spec.whatwg.org/#cannot-have-a-username-password-port
      cannotHaveUsernamePasswordPort: function() {
        return !this.host || this.cannotBeABaseURL || this.scheme === "file";
      },
      // https://url.spec.whatwg.org/#include-credentials
      includesCredentials: function() {
        return this.username !== "" || this.password !== "";
      },
      // https://url.spec.whatwg.org/#is-special
      isSpecial: function() {
        return hasOwn(specialSchemes, this.scheme);
      },
      // https://url.spec.whatwg.org/#shorten-a-urls-path
      shortenPath: function() {
        var path = this.path;
        var pathSize = path.length;
        if (pathSize && (this.scheme !== "file" || pathSize !== 1 || !isWindowsDriveLetter(path[0], true))) {
          path.length--;
        }
      },
      // https://url.spec.whatwg.org/#concept-url-serializer
      serialize: function() {
        var url = this;
        var scheme = url.scheme;
        var username = url.username;
        var password = url.password;
        var host = url.host;
        var port = url.port;
        var path = url.path;
        var query = url.query;
        var fragment = url.fragment;
        var output = scheme + ":";
        if (host !== null) {
          output += "//";
          if (url.includesCredentials()) {
            output += username + (password ? ":" + password : "") + "@";
          }
          output += serializeHost(host);
          if (port !== null) output += ":" + port;
        } else if (scheme === "file") output += "//";
        output += url.cannotBeABaseURL ? path[0] : path.length ? "/" + join(path, "/") : "";
        if (query !== null) output += "?" + query;
        if (fragment !== null) output += "#" + fragment;
        return output;
      },
      // https://url.spec.whatwg.org/#dom-url-href
      setHref: function(href) {
        var failure = this.parse(href);
        if (failure) throw new TypeError2(failure);
        this.searchParams.update();
      },
      // https://url.spec.whatwg.org/#dom-url-origin
      getOrigin: function() {
        var scheme = this.scheme;
        var port = this.port;
        if (scheme === "blob") try {
          return new URLConstructor(scheme.path[0]).origin;
        } catch (error) {
          return "null";
        }
        if (scheme === "file" || !this.isSpecial()) return "null";
        return scheme + "://" + serializeHost(this.host) + (port !== null ? ":" + port : "");
      },
      // https://url.spec.whatwg.org/#dom-url-protocol
      getProtocol: function() {
        return this.scheme + ":";
      },
      setProtocol: function(protocol) {
        this.parse($toString(protocol) + ":", SCHEME_START);
      },
      // https://url.spec.whatwg.org/#dom-url-username
      getUsername: function() {
        return this.username;
      },
      setUsername: function(username) {
        var codePoints = arrayFrom($toString(username));
        if (this.cannotHaveUsernamePasswordPort()) return;
        this.username = "";
        for (var i = 0; i < codePoints.length; i++) {
          this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
        }
      },
      // https://url.spec.whatwg.org/#dom-url-password
      getPassword: function() {
        return this.password;
      },
      setPassword: function(password) {
        var codePoints = arrayFrom($toString(password));
        if (this.cannotHaveUsernamePasswordPort()) return;
        this.password = "";
        for (var i = 0; i < codePoints.length; i++) {
          this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
        }
      },
      // https://url.spec.whatwg.org/#dom-url-host
      getHost: function() {
        var host = this.host;
        var port = this.port;
        return host === null ? "" : port === null ? serializeHost(host) : serializeHost(host) + ":" + port;
      },
      setHost: function(host) {
        if (this.cannotBeABaseURL) return;
        this.parse(host, HOST);
      },
      // https://url.spec.whatwg.org/#dom-url-hostname
      getHostname: function() {
        var host = this.host;
        return host === null ? "" : serializeHost(host);
      },
      setHostname: function(hostname) {
        if (this.cannotBeABaseURL) return;
        this.parse(hostname, HOSTNAME);
      },
      // https://url.spec.whatwg.org/#dom-url-port
      getPort: function() {
        var port = this.port;
        return port === null ? "" : $toString(port);
      },
      setPort: function(port) {
        if (this.cannotHaveUsernamePasswordPort()) return;
        port = $toString(port);
        if (port === "") this.port = null;
        else this.parse(port, PORT);
      },
      // https://url.spec.whatwg.org/#dom-url-pathname
      getPathname: function() {
        var path = this.path;
        return this.cannotBeABaseURL ? path[0] : path.length ? "/" + join(path, "/") : "";
      },
      setPathname: function(pathname) {
        if (this.cannotBeABaseURL) return;
        this.path = [];
        this.parse(pathname, PATH_START);
      },
      // https://url.spec.whatwg.org/#dom-url-search
      getSearch: function() {
        var query = this.query;
        return query ? "?" + query : "";
      },
      setSearch: function(search) {
        search = $toString(search);
        if (search === "") {
          this.query = null;
        } else {
          if (charAt(search, 0) === "?") search = stringSlice(search, 1);
          this.query = "";
          this.parse(search, QUERY);
        }
        this.searchParams.update();
      },
      // https://url.spec.whatwg.org/#dom-url-searchparams
      getSearchParams: function() {
        return this.searchParams.facade;
      },
      // https://url.spec.whatwg.org/#dom-url-hash
      getHash: function() {
        var fragment = this.fragment;
        return fragment ? "#" + fragment : "";
      },
      setHash: function(hash) {
        hash = $toString(hash);
        if (hash === "") {
          this.fragment = null;
          return;
        }
        if (charAt(hash, 0) === "#") hash = stringSlice(hash, 1);
        this.fragment = "";
        this.parse(hash, FRAGMENT);
      },
      update: function() {
        this.query = this.searchParams.serialize() || null;
      }
    };
    var URLConstructor = function URL2(url) {
      var that = anInstance(this, URLPrototype);
      var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : void 0;
      var state = setInternalState(that, new URLState(url, false, base));
      if (!DESCRIPTORS) {
        that.href = state.serialize();
        that.origin = state.getOrigin();
        that.protocol = state.getProtocol();
        that.username = state.getUsername();
        that.password = state.getPassword();
        that.host = state.getHost();
        that.hostname = state.getHostname();
        that.port = state.getPort();
        that.pathname = state.getPathname();
        that.search = state.getSearch();
        that.searchParams = state.getSearchParams();
        that.hash = state.getHash();
      }
    };
    var URLPrototype = URLConstructor.prototype;
    var accessorDescriptor = function(getter, setter) {
      return {
        get: function() {
          return getInternalURLState(this)[getter]();
        },
        set: setter && function(value) {
          return getInternalURLState(this)[setter](value);
        },
        configurable: true,
        enumerable: true
      };
    };
    if (DESCRIPTORS) {
      defineBuiltInAccessor(URLPrototype, "href", accessorDescriptor("serialize", "setHref"));
      defineBuiltInAccessor(URLPrototype, "origin", accessorDescriptor("getOrigin"));
      defineBuiltInAccessor(URLPrototype, "protocol", accessorDescriptor("getProtocol", "setProtocol"));
      defineBuiltInAccessor(URLPrototype, "username", accessorDescriptor("getUsername", "setUsername"));
      defineBuiltInAccessor(URLPrototype, "password", accessorDescriptor("getPassword", "setPassword"));
      defineBuiltInAccessor(URLPrototype, "host", accessorDescriptor("getHost", "setHost"));
      defineBuiltInAccessor(URLPrototype, "hostname", accessorDescriptor("getHostname", "setHostname"));
      defineBuiltInAccessor(URLPrototype, "port", accessorDescriptor("getPort", "setPort"));
      defineBuiltInAccessor(URLPrototype, "pathname", accessorDescriptor("getPathname", "setPathname"));
      defineBuiltInAccessor(URLPrototype, "search", accessorDescriptor("getSearch", "setSearch"));
      defineBuiltInAccessor(URLPrototype, "searchParams", accessorDescriptor("getSearchParams"));
      defineBuiltInAccessor(URLPrototype, "hash", accessorDescriptor("getHash", "setHash"));
    }
    defineBuiltIn(URLPrototype, "toJSON", function toJSON() {
      return getInternalURLState(this).serialize();
    }, { enumerable: true });
    defineBuiltIn(URLPrototype, "toString", function toString() {
      return getInternalURLState(this).serialize();
    }, { enumerable: true });
    if (NativeURL) {
      nativeCreateObjectURL = NativeURL.createObjectURL;
      nativeRevokeObjectURL = NativeURL.revokeObjectURL;
      if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, "createObjectURL", bind(nativeCreateObjectURL, NativeURL));
      if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, "revokeObjectURL", bind(nativeRevokeObjectURL, NativeURL));
    }
    var nativeCreateObjectURL;
    var nativeRevokeObjectURL;
    setToStringTag(URLConstructor, "URL");
    $2({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {
      URL: URLConstructor
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url.js
var require_web_url = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url.js"() {
    "use strict";
    require_web_url_constructor();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url.to-json.js
var require_web_url_to_json = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url.to-json.js"() {
    "use strict";
    var $2 = require_export();
    var call = require_function_call();
    $2({ target: "URL", proto: true, enumerable: true }, {
      toJSON: function toJSON() {
        return call(URL.prototype.toString, this);
      }
    });
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.js
var require_web_url_search_params = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.js"() {
    "use strict";
    require_web_url_search_params_constructor();
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.delete.js
var require_web_url_search_params_delete = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.delete.js"() {
    "use strict";
    var defineBuiltIn = require_define_built_in();
    var uncurryThis = require_function_uncurry_this();
    var toString = require_to_string();
    var validateArgumentsLength = require_validate_arguments_length();
    var $URLSearchParams = URLSearchParams;
    var URLSearchParamsPrototype = $URLSearchParams.prototype;
    var append = uncurryThis(URLSearchParamsPrototype.append);
    var $delete = uncurryThis(URLSearchParamsPrototype["delete"]);
    var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
    var push = uncurryThis([].push);
    var params = new $URLSearchParams("a=1&a=2&b=3");
    params["delete"]("a", 1);
    params["delete"]("b", void 0);
    if (params + "" !== "a=2") {
      defineBuiltIn(URLSearchParamsPrototype, "delete", function(name) {
        var length = arguments.length;
        var $value = length < 2 ? void 0 : arguments[1];
        if (length && $value === void 0) return $delete(this, name);
        var entries = [];
        forEach(this, function(v, k) {
          push(entries, { key: k, value: v });
        });
        validateArgumentsLength(length, 1);
        var key = toString(name);
        var value = toString($value);
        var index = 0;
        var dindex = 0;
        var found = false;
        var entriesLength = entries.length;
        var entry;
        while (index < entriesLength) {
          entry = entries[index++];
          if (found || entry.key === key) {
            found = true;
            $delete(this, entry.key);
          } else dindex++;
        }
        while (dindex < entriesLength) {
          entry = entries[dindex++];
          if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);
        }
      }, { enumerable: true, unsafe: true });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.has.js
var require_web_url_search_params_has = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.has.js"() {
    "use strict";
    var defineBuiltIn = require_define_built_in();
    var uncurryThis = require_function_uncurry_this();
    var toString = require_to_string();
    var validateArgumentsLength = require_validate_arguments_length();
    var $URLSearchParams = URLSearchParams;
    var URLSearchParamsPrototype = $URLSearchParams.prototype;
    var getAll = uncurryThis(URLSearchParamsPrototype.getAll);
    var $has = uncurryThis(URLSearchParamsPrototype.has);
    var params = new $URLSearchParams("a=1");
    if (params.has("a", 2) || !params.has("a", void 0)) {
      defineBuiltIn(URLSearchParamsPrototype, "has", function has(name) {
        var length = arguments.length;
        var $value = length < 2 ? void 0 : arguments[1];
        if (length && $value === void 0) return $has(this, name);
        var values = getAll(this, name);
        validateArgumentsLength(length, 1);
        var value = toString($value);
        var index = 0;
        while (index < values.length) {
          if (values[index++] === value) return true;
        }
        return false;
      }, { enumerable: true, unsafe: true });
    }
  }
});

// node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.size.js
var require_web_url_search_params_size = __commonJS({
  "node_modules/.pnpm/core-js@3.41.0/node_modules/core-js/modules/web.url-search-params.size.js"() {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var uncurryThis = require_function_uncurry_this();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var URLSearchParamsPrototype = URLSearchParams.prototype;
    var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
    if (DESCRIPTORS && !("size" in URLSearchParamsPrototype)) {
      defineBuiltInAccessor(URLSearchParamsPrototype, "size", {
        get: function size() {
          var count = 0;
          forEach(this, function() {
            count++;
          });
          return count;
        },
        configurable: true,
        enumerable: true
      });
    }
  }
});

// dist/Wikiplus/Wikiplus.js
require_es_symbol();
require_es_symbol_description();
require_es_symbol_iterator();
require_es_symbol_to_primitive();
require_es_array_filter();
require_es_array_for_each();
require_es_array_from();
require_es_array_index_of();
require_es_array_reverse();
require_es_array_slice();
require_es_date_to_primitive();
require_es_iterator_filter();
require_es_iterator_for_each();
require_es_map();
require_es_number_constructor();
require_es_object_define_properties();
require_es_object_define_property();
require_es_object_get_own_property_descriptor();
require_es_object_get_own_property_descriptors();
require_es_object_get_prototype_of();
require_es_object_set_prototype_of();
require_es_reflect_construct();
require_es_regexp_test();
function _typeof(o) {
  "@babel/helpers - typeof";
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) {
    return typeof o2;
  } : function(o2) {
    return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2;
  }, _typeof(o);
}
init_DOMTokenList2();
init_DOMTokenList_prototype_replace();
require_DocumentFragment();
init_DocumentFragment_prototype_append();
init_Element_prototype_append();
require_fetch();
init_Element_prototype_remove();
init_CharacterData_prototype_remove();
require_requestAnimationFrame();
require_WebAnimations();
init_Element_prototype_after();
init_CharacterData_prototype_after();
init_Element_prototype_before();
init_CharacterData_prototype_before();
require_es_error_cause();
require_es_error_to_string();
require_es_array_concat();
require_es_array_find();
require_es_array_includes();
require_es_array_iterator();
require_es_array_join();
require_es_array_push();
require_es_date_to_json();
require_es_iterator_constructor();
require_es_iterator_find();
require_es_json_stringify();
require_es_object_entries();
require_es_object_get_own_property_names();
require_es_object_keys();
require_es_object_to_string();
require_es_promise();
require_es_regexp_constructor();
require_es_regexp_dot_all();
require_es_regexp_exec();
require_es_regexp_sticky();
require_es_regexp_to_string();
require_es_string_includes();
require_es_string_iterator();
require_es_string_match();
require_es_string_replace();
require_es_string_trim();
require_web_url();
require_web_url_to_json();
require_web_url_search_params();
require_web_url_search_params_delete();
require_web_url_search_params_has();
require_web_url_search_params_size();
function ownKeys(e, r) {
  var t = Object.keys(e);
  if (Object.getOwnPropertySymbols) {
    var o = Object.getOwnPropertySymbols(e);
    r && (o = o.filter(function(r2) {
      return Object.getOwnPropertyDescriptor(e, r2).enumerable;
    })), t.push.apply(t, o);
  }
  return t;
}
function _objectSpread(e) {
  for (var r = 1; r < arguments.length; r++) {
    var t = null != arguments[r] ? arguments[r] : {};
    r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
      _defineProperty(e, r2, t[r2]);
    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
      Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
    });
  }
  return e;
}
function _callSuper(t, o, e) {
  return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _possibleConstructorReturn(t, e) {
  if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
  if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
  return _assertThisInitialized(t);
}
function _assertThisInitialized(e) {
  if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  return e;
}
function _inherits(t, e) {
  if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
  t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: true, configurable: true } }), Object.defineProperty(t, "prototype", { writable: false }), e && _setPrototypeOf(t, e);
}
function _wrapNativeSuper(t) {
  var r = "function" == typeof Map ? /* @__PURE__ */ new Map() : void 0;
  return _wrapNativeSuper = function _wrapNativeSuper2(t2) {
    if (null === t2 || !_isNativeFunction(t2)) return t2;
    if ("function" != typeof t2) throw new TypeError("Super expression must either be null or a function");
    if (void 0 !== r) {
      if (r.has(t2)) return r.get(t2);
      r.set(t2, Wrapper);
    }
    function Wrapper() {
      return _construct(t2, arguments, _getPrototypeOf(this).constructor);
    }
    return Wrapper.prototype = Object.create(t2.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }), _setPrototypeOf(Wrapper, t2);
  }, _wrapNativeSuper(t);
}
function _construct(t, e, r) {
  if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
  var o = [null];
  o.push.apply(o, e);
  var p = new (t.bind.apply(t, o))();
  return r && _setPrototypeOf(p, r.prototype), p;
}
function _isNativeReflectConstruct() {
  try {
    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
    }));
  } catch (t2) {
  }
  return (_isNativeReflectConstruct = function _isNativeReflectConstruct2() {
    return !!t;
  })();
}
function _isNativeFunction(t) {
  try {
    return -1 !== Function.toString.call(t).indexOf("[native code]");
  } catch (n) {
    return "function" == typeof t;
  }
}
function _setPrototypeOf(t, e) {
  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t2, e2) {
    return t2.__proto__ = e2, t2;
  }, _setPrototypeOf(t, e);
}
function _getPrototypeOf(t) {
  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t2) {
    return t2.__proto__ || Object.getPrototypeOf(t2);
  }, _getPrototypeOf(t);
}
function _createForOfIteratorHelper(r, e) {
  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (!t) {
    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
      t && (r = t);
      var _n = 0, F = function F2() {
      };
      return { s: F, n: function n() {
        return _n >= r.length ? { done: true } : { done: false, value: r[_n++] };
      }, e: function e2(r2) {
        throw r2;
      }, f: F };
    }
    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  var o, a = true, u = false;
  return { s: function s() {
    t = t.call(r);
  }, n: function n() {
    var r2 = t.next();
    return a = r2.done, r2;
  }, e: function e2(r2) {
    u = true, o = r2;
  }, f: function f() {
    try {
      a || null == t.return || t.return();
    } finally {
      if (u) throw o;
    }
  } };
}
function _slicedToArray(r, e) {
  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
}
function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _unsupportedIterableToArray(r, a) {
  if (r) {
    if ("string" == typeof r) return _arrayLikeToArray(r, a);
    var t = {}.toString.call(r).slice(8, -1);
    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
  }
}
function _arrayLikeToArray(r, a) {
  (null == a || a > r.length) && (a = r.length);
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
  return n;
}
function _iterableToArrayLimit(r, l) {
  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (null != t) {
    var e, n, i, u, a = [], f = true, o = false;
    try {
      if (i = (t = t.call(r)).next, 0 === l) {
        if (Object(t) !== t) return;
        f = false;
      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = true) ;
    } catch (r2) {
      o = true, n = r2;
    } finally {
      try {
        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
      } finally {
        if (o) throw n;
      }
    }
    return a;
  }
}
function _arrayWithHoles(r) {
  if (Array.isArray(r)) return r;
}
function _regeneratorRuntime() {
  "use strict";
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
  _regeneratorRuntime = function _regeneratorRuntime2() {
    return e;
  };
  var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function(t2, e2, r2) {
    t2[e2] = r2.value;
  }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag";
  function define2(t2, e2, r2) {
    return Object.defineProperty(t2, e2, { value: r2, enumerable: true, configurable: true, writable: true }), t2[e2];
  }
  try {
    define2({}, "");
  } catch (t2) {
    define2 = function define3(t3, e2, r2) {
      return t3[e2] = r2;
    };
  }
  function wrap(t2, e2, r2, n2) {
    var i2 = e2 && e2.prototype instanceof Generator ? e2 : Generator, a2 = Object.create(i2.prototype), c2 = new Context(n2 || []);
    return o(a2, "_invoke", { value: makeInvokeMethod(t2, r2, c2) }), a2;
  }
  function tryCatch(t2, e2, r2) {
    try {
      return { type: "normal", arg: t2.call(e2, r2) };
    } catch (t3) {
      return { type: "throw", arg: t3 };
    }
  }
  e.wrap = wrap;
  var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {};
  function Generator() {
  }
  function GeneratorFunction() {
  }
  function GeneratorFunctionPrototype() {
  }
  var p = {};
  define2(p, a, function() {
    return this;
  });
  var d = Object.getPrototypeOf, v = d && d(d(values([])));
  v && v !== r && n.call(v, a) && (p = v);
  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
  function defineIteratorMethods(t2) {
    ["next", "throw", "return"].forEach(function(e2) {
      define2(t2, e2, function(t3) {
        return this._invoke(e2, t3);
      });
    });
  }
  function AsyncIterator(t2, e2) {
    function invoke(r3, o2, i2, a2) {
      var c2 = tryCatch(t2[r3], t2, o2);
      if ("throw" !== c2.type) {
        var u2 = c2.arg, h2 = u2.value;
        return h2 && "object" == _typeof(h2) && n.call(h2, "__await") ? e2.resolve(h2.__await).then(function(t3) {
          invoke("next", t3, i2, a2);
        }, function(t3) {
          invoke("throw", t3, i2, a2);
        }) : e2.resolve(h2).then(function(t3) {
          u2.value = t3, i2(u2);
        }, function(t3) {
          return invoke("throw", t3, i2, a2);
        });
      }
      a2(c2.arg);
    }
    var r2;
    o(this, "_invoke", { value: function value(t3, n2) {
      function callInvokeWithMethodAndArg() {
        return new e2(function(e3, r3) {
          invoke(t3, n2, e3, r3);
        });
      }
      return r2 = r2 ? r2.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
    } });
  }
  function makeInvokeMethod(e2, r2, n2) {
    var o2 = h;
    return function(i2, a2) {
      if (o2 === f) throw Error("Generator is already running");
      if (o2 === s) {
        if ("throw" === i2) throw a2;
        return { value: t, done: true };
      }
      for (n2.method = i2, n2.arg = a2; ; ) {
        var c2 = n2.delegate;
        if (c2) {
          var u2 = maybeInvokeDelegate(c2, n2);
          if (u2) {
            if (u2 === y) continue;
            return u2;
          }
        }
        if ("next" === n2.method) n2.sent = n2._sent = n2.arg;
        else if ("throw" === n2.method) {
          if (o2 === h) throw o2 = s, n2.arg;
          n2.dispatchException(n2.arg);
        } else "return" === n2.method && n2.abrupt("return", n2.arg);
        o2 = f;
        var p2 = tryCatch(e2, r2, n2);
        if ("normal" === p2.type) {
          if (o2 = n2.done ? s : l, p2.arg === y) continue;
          return { value: p2.arg, done: n2.done };
        }
        "throw" === p2.type && (o2 = s, n2.method = "throw", n2.arg = p2.arg);
      }
    };
  }
  function maybeInvokeDelegate(e2, r2) {
    var n2 = r2.method, o2 = e2.iterator[n2];
    if (o2 === t) return r2.delegate = null, "throw" === n2 && e2.iterator.return && (r2.method = "return", r2.arg = t, maybeInvokeDelegate(e2, r2), "throw" === r2.method) || "return" !== n2 && (r2.method = "throw", r2.arg = new TypeError("The iterator does not provide a '" + n2 + "' method")), y;
    var i2 = tryCatch(o2, e2.iterator, r2.arg);
    if ("throw" === i2.type) return r2.method = "throw", r2.arg = i2.arg, r2.delegate = null, y;
    var a2 = i2.arg;
    return a2 ? a2.done ? (r2[e2.resultName] = a2.value, r2.next = e2.nextLoc, "return" !== r2.method && (r2.method = "next", r2.arg = t), r2.delegate = null, y) : a2 : (r2.method = "throw", r2.arg = new TypeError("iterator result is not an object"), r2.delegate = null, y);
  }
  function pushTryEntry(t2) {
    var e2 = { tryLoc: t2[0] };
    1 in t2 && (e2.catchLoc = t2[1]), 2 in t2 && (e2.finallyLoc = t2[2], e2.afterLoc = t2[3]), this.tryEntries.push(e2);
  }
  function resetTryEntry(t2) {
    var e2 = t2.completion || {};
    e2.type = "normal", delete e2.arg, t2.completion = e2;
  }
  function Context(t2) {
    this.tryEntries = [{ tryLoc: "root" }], t2.forEach(pushTryEntry, this), this.reset(true);
  }
  function values(e2) {
    if (e2 || "" === e2) {
      var r2 = e2[a];
      if (r2) return r2.call(e2);
      if ("function" == typeof e2.next) return e2;
      if (!isNaN(e2.length)) {
        var o2 = -1, i2 = function next() {
          for (; ++o2 < e2.length; ) if (n.call(e2, o2)) return next.value = e2[o2], next.done = false, next;
          return next.value = t, next.done = true, next;
        };
        return i2.next = i2;
      }
    }
    throw new TypeError(_typeof(e2) + " is not iterable");
  }
  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: true }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: true }), GeneratorFunction.displayName = define2(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function(t2) {
    var e2 = "function" == typeof t2 && t2.constructor;
    return !!e2 && (e2 === GeneratorFunction || "GeneratorFunction" === (e2.displayName || e2.name));
  }, e.mark = function(t2) {
    return Object.setPrototypeOf ? Object.setPrototypeOf(t2, GeneratorFunctionPrototype) : (t2.__proto__ = GeneratorFunctionPrototype, define2(t2, u, "GeneratorFunction")), t2.prototype = Object.create(g), t2;
  }, e.awrap = function(t2) {
    return { __await: t2 };
  }, defineIteratorMethods(AsyncIterator.prototype), define2(AsyncIterator.prototype, c, function() {
    return this;
  }), e.AsyncIterator = AsyncIterator, e.async = function(t2, r2, n2, o2, i2) {
    void 0 === i2 && (i2 = Promise);
    var a2 = new AsyncIterator(wrap(t2, r2, n2, o2), i2);
    return e.isGeneratorFunction(r2) ? a2 : a2.next().then(function(t3) {
      return t3.done ? t3.value : a2.next();
    });
  }, defineIteratorMethods(g), define2(g, u, "Generator"), define2(g, a, function() {
    return this;
  }), define2(g, "toString", function() {
    return "[object Generator]";
  }), e.keys = function(t2) {
    var e2 = Object(t2), r2 = [];
    for (var n2 in e2) r2.push(n2);
    return r2.reverse(), function next() {
      for (; r2.length; ) {
        var t3 = r2.pop();
        if (t3 in e2) return next.value = t3, next.done = false, next;
      }
      return next.done = true, next;
    };
  }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e2) {
    if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = false, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e2) for (var r2 in this) "t" === r2.charAt(0) && n.call(this, r2) && !isNaN(+r2.slice(1)) && (this[r2] = t);
  }, stop: function stop() {
    this.done = true;
    var t2 = this.tryEntries[0].completion;
    if ("throw" === t2.type) throw t2.arg;
    return this.rval;
  }, dispatchException: function dispatchException(e2) {
    if (this.done) throw e2;
    var r2 = this;
    function handle(n2, o3) {
      return a2.type = "throw", a2.arg = e2, r2.next = n2, o3 && (r2.method = "next", r2.arg = t), !!o3;
    }
    for (var o2 = this.tryEntries.length - 1; o2 >= 0; --o2) {
      var i2 = this.tryEntries[o2], a2 = i2.completion;
      if ("root" === i2.tryLoc) return handle("end");
      if (i2.tryLoc <= this.prev) {
        var c2 = n.call(i2, "catchLoc"), u2 = n.call(i2, "finallyLoc");
        if (c2 && u2) {
          if (this.prev < i2.catchLoc) return handle(i2.catchLoc, true);
          if (this.prev < i2.finallyLoc) return handle(i2.finallyLoc);
        } else if (c2) {
          if (this.prev < i2.catchLoc) return handle(i2.catchLoc, true);
        } else {
          if (!u2) throw Error("try statement without catch or finally");
          if (this.prev < i2.finallyLoc) return handle(i2.finallyLoc);
        }
      }
    }
  }, abrupt: function abrupt(t2, e2) {
    for (var r2 = this.tryEntries.length - 1; r2 >= 0; --r2) {
      var o2 = this.tryEntries[r2];
      if (o2.tryLoc <= this.prev && n.call(o2, "finallyLoc") && this.prev < o2.finallyLoc) {
        var i2 = o2;
        break;
      }
    }
    i2 && ("break" === t2 || "continue" === t2) && i2.tryLoc <= e2 && e2 <= i2.finallyLoc && (i2 = null);
    var a2 = i2 ? i2.completion : {};
    return a2.type = t2, a2.arg = e2, i2 ? (this.method = "next", this.next = i2.finallyLoc, y) : this.complete(a2);
  }, complete: function complete(t2, e2) {
    if ("throw" === t2.type) throw t2.arg;
    return "break" === t2.type || "continue" === t2.type ? this.next = t2.arg : "return" === t2.type ? (this.rval = this.arg = t2.arg, this.method = "return", this.next = "end") : "normal" === t2.type && e2 && (this.next = e2), y;
  }, finish: function finish(t2) {
    for (var e2 = this.tryEntries.length - 1; e2 >= 0; --e2) {
      var r2 = this.tryEntries[e2];
      if (r2.finallyLoc === t2) return this.complete(r2.completion, r2.afterLoc), resetTryEntry(r2), y;
    }
  }, catch: function _catch(t2) {
    for (var e2 = this.tryEntries.length - 1; e2 >= 0; --e2) {
      var r2 = this.tryEntries[e2];
      if (r2.tryLoc === t2) {
        var n2 = r2.completion;
        if ("throw" === n2.type) {
          var o2 = n2.arg;
          resetTryEntry(r2);
        }
        return o2;
      }
    }
    throw Error("illegal catch attempt");
  }, delegateYield: function delegateYield(e2, r2, n2) {
    return this.delegate = { iterator: values(e2), resultName: r2, nextLoc: n2 }, "next" === this.method && (this.arg = t), y;
  } }, e;
}
function asyncGeneratorStep(n, t, e, r, o, a, c) {
  try {
    var i = n[a](c), u = i.value;
  } catch (n2) {
    return void e(n2);
  }
  i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
  return function() {
    var t = this, e = arguments;
    return new Promise(function(r, o) {
      var a = n.apply(t, e);
      function _next(n2) {
        asyncGeneratorStep(a, r, o, _next, _throw, "next", n2);
      }
      function _throw(n2) {
        asyncGeneratorStep(a, r, o, _next, _throw, "throw", n2);
      }
      _next(void 0);
    });
  };
}
function _classCallCheck(a, n) {
  if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
}
function _defineProperties(e, r) {
  for (var t = 0; t < r.length; t++) {
    var o = r[t];
    o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
  }
}
function _createClass(e, r, t) {
  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: false }), e;
}
function _defineProperty(e, r, t) {
  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
}
function _toPropertyKey(t) {
  var i = _toPrimitive(t, "string");
  return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
  if ("object" != _typeof(t) || !t) return t;
  var e = t[Symbol.toPrimitive];
  if (void 0 !== e) {
    var i = e.call(t, r || "default");
    if ("object" != _typeof(i)) return i;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }
  return ("string" === r ? String : Number)(t);
}
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __esm2 = function __esm3(fn, res) {
  return function __init() {
    return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
  };
};
//! src/Wikiplus/modules/utils/constants.js
var Constants;
var constants_default;
var init_constants = __esm2({
  "src/Wikiplus/modules/utils/constants.js": function src_Wikiplus_modules_utils_constantsJs() {
    "use strict";
    Constants = /* @__PURE__ */ function() {
      function Constants2() {
        _classCallCheck(this, Constants2);
        _defineProperty(this, "version", "4.1.0");
        _defineProperty(this, "userAgent", "CaelLab/1.0 Wikiplus/".concat(this.version, " (").concat(this.wikiId, ")"));
      }
      return _createClass(Constants2, [{
        key: "isArticle",
        get: function get() {
          return window.mw.config.get("wgIsArticle");
        }
      }, {
        key: "currentPageName",
        get: function get() {
          return window.mw.config.get("wgPageName").replace(/ /g, "_");
        }
      }, {
        key: "articleId",
        get: function get() {
          return window.mw.config.get("wgArticleId");
        }
      }, {
        key: "revisionId",
        get: function get() {
          return window.mw.config.get("wgRevisionId");
        }
      }, {
        key: "latestRevisionId",
        get: function get() {
          return window.mw.config.get("wgCurRevisionId");
        }
      }, {
        key: "articlePath",
        get: function get() {
          return window.mw.config.get("wgArticlePath");
        }
      }, {
        key: "scriptPath",
        get: function get() {
          return window.mw.config.get("wgScriptPath");
        }
      }, {
        key: "action",
        get: function get() {
          return window.mw.config.get("wgAction");
        }
      }, {
        key: "skin",
        get: function get() {
          return window.mw.config.get("skin");
        }
      }, {
        key: "userGroups",
        get: function get() {
          return window.mw.config.get("wgUserGroups");
        }
      }, {
        key: "wikiId",
        get: function get() {
          return window.mw.config.get("wgWikiID");
        }
      }]);
    }();
    constants_default = new Constants();
  }
});
//! src/Wikiplus/modules/utils/requests.js
var Requests;
var requests_default;
var init_requests = __esm2({
  "src/Wikiplus/modules/utils/requests.js": function src_Wikiplus_modules_utils_requestsJs() {
    "use strict";
    init_constants();
    Requests = {
      base: "".concat(location.protocol, "//").concat(location.host).concat(constants_default.scriptPath, "/api.php"),
      get: function get(query) {
        return _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee() {
          var url, _i, _Object$keys, key, response;
          return _regeneratorRuntime().wrap(function _callee$(_context) {
            while (1) switch (_context.prev = _context.next) {
              case 0:
                url = new URL(Requests.base);
                for (_i = 0, _Object$keys = Object.keys(query); _i < _Object$keys.length; _i++) {
                  key = _Object$keys[_i];
                  url.searchParams.append(key, query[key]);
                }
                _context.next = 4;
                return fetch(url, {
                  credentials: "same-origin",
                  headers: {
                    "Api-User-Agent": constants_default.userAgent
                  }
                });
              case 4:
                response = _context.sent;
                _context.next = 7;
                return response.json();
              case 7:
                return _context.abrupt("return", _context.sent);
              case 8:
              case "end":
                return _context.stop();
            }
          }, _callee);
        }))();
      },
      post: function post(payload) {
        return _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee2() {
          var url, form, _i2, _Object$entries, _Object$entries$_i, key, value, response;
          return _regeneratorRuntime().wrap(function _callee2$(_context2) {
            while (1) switch (_context2.prev = _context2.next) {
              case 0:
                url = new URL(Requests.base);
                form = new FormData();
                for (_i2 = 0, _Object$entries = Object.entries(payload); _i2 < _Object$entries.length; _i2++) {
                  _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2), key = _Object$entries$_i[0], value = _Object$entries$_i[1];
                  form.append(key, value);
                }
                _context2.next = 5;
                return fetch(url, {
                  method: "POST",
                  body: form,
                  credentials: "same-origin",
                  headers: {
                    "Api-User-Agent": constants_default.userAgent
                  }
                });
              case 5:
                response = _context2.sent;
                _context2.next = 8;
                return response.json();
              case 8:
                return _context2.abrupt("return", _context2.sent);
              case 9:
              case "end":
                return _context2.stop();
            }
          }, _callee2);
        }))();
      }
    };
    requests_default = Requests;
  }
});
//! src/Wikiplus/modules/utils/i18n-zh-cn.js
var i18n_zh_cn_default;
var init_i18n_zh_cn = __esm2({
  "src/Wikiplus/modules/utils/i18n-zh-cn.js": function src_Wikiplus_modules_utils_i18nZhCnJs() {
    "use strict";
    i18n_zh_cn_default = {
      unknown_error_name: "未知的错误名",
      api_unaccessiable: "无可用的API",
      api_unwriteable: "无可用的写入API",
      fail_to_get_timestamp: "无法获得页面编辑起始时间戳",
      fail_to_get_edittoken: "无法获得页面编辑权标",
      fail_to_get_pageinfo: "无法获得页面信息",
      not_autoconfirmed_user: "非自动确认用户",
      hit_abusefilter: "被防滥用过滤器拦截",
      unknown_edit_error: "未知编辑错误",
      unknown_edit_error_message: "未知编辑错误($1)",
      notitle: "无法编辑空标题页面",
      notext: "缺少页面内容",
      notoken: "空编辑权标",
      invalidsection: "段落编号非法",
      protectedtitle: "该标题被保护,无法创建",
      cantcreate: "无新建页面权限",
      cantcreate_anon: "匿名用户无新建页面权限",
      articleexists: "无法创建已经存在的页面",
      noimageredirect_anon: "匿名用户无新建文件重定向权限",
      noimageredirect: "无新建文件重定向权限",
      spamdetected: "文本含有敏感内容,被SPAM过滤器拦截",
      filtered: "编辑被过滤器拦截",
      contenttoobig: "文本超过最大长度限制",
      noedit_anon: "匿名用户无编辑页面权限",
      noedit: "无编辑页面权限",
      pagedeleted: "编辑时,此页面被删除",
      emptypage: "无法新建空内容页面",
      emptynewsection: "无法新建空内容段落",
      editconflict: "编辑冲突,请手工检查页面当前内容与提交内容差异并修正后,刷新页面提交",
      revwrongpage: "编辑的修订版本与编辑的页面不匹配",
      undofailure: "由于存在冲突的中间版本,无法撤销编辑",
      missingtitle: "无法创建或编辑空标题页面",
      mustbeposted: "必须使用POST方式提交编辑",
      readapidenied: "无读取API使用权限",
      writeapidenied: "无通过API编辑页面权限",
      noapiwrite: "本Wiki未开启可用的写入API",
      badtoken: "非法的编辑权标",
      missingparam: "缺少必要参数,页面名和页面ID不能均为空",
      invalidparammix: "参数重复,页面名和页面ID不能同时给定",
      invalidtitle: "非法的标题",
      nosuchpageid: "不存在的页面ID",
      pagecannotexist: "该名称空间不允许新建一般页面",
      nosuchrevid: "不存在的修订版本",
      badmd5: "非法的MD5值",
      hookaborted: "编辑被扩展Hook拦截",
      parseerror: "无法解析页面文本",
      summaryrequired: "编辑摘要不能为空",
      blocked: "已被封禁",
      ratelimited: "达到操作速率上限,请稍后重试",
      unknownerror: "未知错误",
      nosuchsection: "无法编辑不存在的段落",
      sectionsnotsupported: "该页面不支持段落编辑",
      editnotsupported: "该页面不支持通过API编辑",
      appendnotsupported: "该页面无法在前后插入文本",
      redirect_appendonly: "在遵循重定向的情况下,只能进行前后插入或创建新段落",
      badformat: "文本格式错误",
      customcssprotected: "无法编辑用户CSS页",
      customjsprotected: "无法编辑用户JS页",
      cascadeprotected: "该页面被级联保护",
      network_edit_error: "由于网络原因编辑失败",
      redirect_to_summary: "重定向页面至[[$1]] // Wikiplus",
      redirect_from_summary: "将[[$1]]重定向至[[$2]] // Wikiplus",
      need_init: "页面类未加载完成",
      fail_to_get_wikitext: "无法获得页面文本",
      quickedit_topbtn: "快速编辑",
      quickedit_sectionbtn: "快速编辑",
      fail_to_init_quickedit: "无法加载快速编辑",
      back: "返回",
      goto_editbox: "到编辑框",
      summary_placehold: "请输入编辑摘要",
      submit: "提交",
      publish_page: "发布页面",
      publish_change: "发布更改",
      preview: "预览",
      cancel: "取消",
      mark_minoredit: "标记为小编辑",
      onclose_confirm: "[Wikiplus] 您确认要关闭/刷新页面吗?这会导致您的编辑数据丢失",
      fail_to_get_wikitext_when_edit: "无法获得页面文本以编辑",
      cant_parse_wikitext: "无法解析维基文本",
      loading_preview: "正在读取预览",
      submitting_edit: "正在提交编辑",
      edit_success: "编辑成功 用时$1ms",
      empty_page_confirm: "您向编辑函数传入了空内容参数 这将清空页面\r\n由于该行为危险 请将config参数的empty键值设定为true来确认",
      cross_page_edit: "编辑目标位于其他页面 正在获取基础信息",
      cross_page_edit_submit: "基础信息获取成功 正在提交编辑",
      cross_page_edit_error: "无法获得基础信息>.<",
      install_tip: "您是否允许Wikiplus采集非敏感数据用于改进Wikiplus及为当前Wiki:$1提供改进建议?",
      accept: "接受",
      decline: "拒绝",
      install_finish: "Wikiplus安装完毕",
      loading: "正在载入",
      cant_add_funcbtn: "无法增加功能按钮",
      wikiplus_settings: "Wikiplus设置",
      wikiplus_settings_desc: "请在下方按规范修改Wikiplus设置",
      wikiplus_settings_placeholder: "当前设置为空 请在此处按规范修改Wikiplus设置",
      wikiplus_settings_grammar_error: "设置存在语法错误 请检查后重试",
      wikiplus_settings_saved: "设置已保存",
      redirect_from: "将页面重定向至此",
      redirect_desc: "请输入要重定向至此的页面名",
      redirect_summary_desc: "在下方输入编辑摘要(可选)",
      empty_input: "输入不能为空",
      redirect_saved: "重定向完成",
      uninited: "Wikiplus未加载完毕 请刷新重试",
      cant_parse_i18ncache: "无法解析多语言定义文件缓存",
      cant_load_language: "无法获取多语言定义文件",
      history_edit_warning: " // 正试图编辑历史版本 这将会应用到本页面的最新版本 请慎重提交",
      create_page_tip: "<!-- 正在创建新页面 请删去此行注释后继续 -->",
      continue: "仍然继续",
      default_summary_suffix: "// Edit via Wikiplus"
    };
  }
});
//! src/Wikiplus/modules/utils/i18n.js
var I18n;
var i18n_default;
var init_i18n = __esm2({
  "src/Wikiplus/modules/utils/i18n.js": function src_Wikiplus_modules_utils_i18nJs() {
    "use strict";
    init_i18n_zh_cn();
    I18n = /* @__PURE__ */ function() {
      function I18n2() {
        _classCallCheck(this, I18n2);
        _defineProperty(this, "language", void 0);
        _defineProperty(this, "i18nData", {
          "zh-cn": i18n_zh_cn_default
        });
        var language;
        try {
          language = JSON.parse(localStorage["Wikiplus_Settings"])["language"] || navigator.language.toLowerCase();
        } catch (_unused) {
          language = (navigator.language || navigator.browserLanguage).replace(/han[st]-?/i, "").toLowerCase();
        }
        this.language = language;
        try {
          var i18nCache = JSON.parse(localStorage.getItem("Wikiplus_i18nCache"));
          for (var _i3 = 0, _Object$keys2 = Object.keys(i18nCache); _i3 < _Object$keys2.length; _i3++) {
            var key = _Object$keys2[_i3];
            this.i18nData[key] = i18nCache[key];
          }
        } catch (_unused2) {
          localStorage.setItem("Wikiplus_i18nCache", "{}");
        }
      }
      return _createClass(I18n2, [{
        key: "translate",
        value: function translate(key) {
          var placeholders = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
          var result = "";
          var language = this.language in this.i18nData ? this.language : "zh-cn";
          if (key in this.i18nData[language]) {
            result = this.i18nData[language][key];
          } else if (key in this.i18nData["zh-cn"]) {
            result = this.i18nData["zh-cn"][key];
          } else {
            result = key;
          }
          if (placeholders.length > 0) {
            var _iterator = _createForOfIteratorHelper(placeholders.entries()), _step;
            try {
              for (_iterator.s(); !(_step = _iterator.n()).done; ) {
                var _step$value = _slicedToArray(_step.value, 2), index = _step$value[0], placeholder = _step$value[1];
                result = result.replace("$".concat(index + 1), placeholder);
              }
            } catch (err) {
              _iterator.e(err);
            } finally {
              _iterator.f();
            }
          }
          return result;
        }
      }]);
    }();
    i18n_default = new I18n();
  }
});
//! src/Wikiplus/modules/utils/log.js
var WikiplusError;
var Log;
var log_default;
var init_log = __esm2({
  "src/Wikiplus/modules/utils/log.js": function src_Wikiplus_modules_utils_logJs() {
    "use strict";
    init_i18n();
    WikiplusError = /* @__PURE__ */ function(_Error) {
      function WikiplusError2(message, code) {
        var _this;
        _classCallCheck(this, WikiplusError2);
        _this = _callSuper(this, WikiplusError2, [message]);
        _this.code = code;
        return _this;
      }
      _inherits(WikiplusError2, _Error);
      return _createClass(WikiplusError2);
    }(/* @__PURE__ */ _wrapNativeSuper(Error));
    Log = {
      debug: function debug() {
        var message = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
        console.debug("[Wikiplus-DEBUG] ".concat(message));
      },
      info: function info() {
        var message = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "";
        console.info("[Wikiplus-INFO] ".concat(message));
      },
      error: function error(errorCode) {
        var payloads = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
        var template = i18n_default.translate(errorCode);
        if (payloads.length > 0) {
          var _iterator2 = _createForOfIteratorHelper(payloads.entries()), _step2;
          try {
            for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
              var _step2$value = _slicedToArray(_step2.value, 2), i = _step2$value[0], v = _step2$value[1];
              template = template.replace(new RegExp("\\".concat(i + 1), "ig"), v);
            }
          } catch (err) {
            _iterator2.e(err);
          } finally {
            _iterator2.f();
          }
        }
        console.error("[Wikiplus-ERROR] ".concat(template));
        throw new WikiplusError("".concat(template), errorCode);
      }
    };
    log_default = Log;
  }
});
//! src/Wikiplus/modules/services/wiki.js
var Wiki;
var wiki_default;
var init_wiki = __esm2({
  "src/Wikiplus/modules/services/wiki.js": function src_Wikiplus_modules_services_wikiJs() {
    "use strict";
    init_requests();
    init_log();
    init_i18n();
    Wiki = /* @__PURE__ */ function() {
      function Wiki2() {
        _classCallCheck(this, Wiki2);
        _defineProperty(this, "pageInfoCache", {});
      }
      return _createClass(Wiki2, [{
        key: "getEditToken",
        value: (
          /**
           * 获得 Edit Token
           * Get Edit Token
           *
           * @returns {Promise<string>}
           */
          function() {
            var _getEditToken = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee3() {
              var response;
              return _regeneratorRuntime().wrap(function _callee3$(_context3) {
                while (1) switch (_context3.prev = _context3.next) {
                  case 0:
                    _context3.next = 2;
                    return requests_default.get({
                      action: "query",
                      meta: "tokens",
                      format: "json"
                    });
                  case 2:
                    response = _context3.sent;
                    if (!(response.query && response.query.tokens && response.query.tokens.csrftoken && response.query.tokens.csrftoken !== "+\\")) {
                      _context3.next = 5;
                      break;
                    }
                    return _context3.abrupt("return", response.query.tokens.csrftoken);
                  case 5:
                    return _context3.abrupt("return", log_default.error("fail_to_get_edittoken"));
                  case 6:
                  case "end":
                    return _context3.stop();
                }
              }, _callee3);
            }));
            function getEditToken() {
              return _getEditToken.apply(this, arguments);
            }
            return getEditToken;
          }()
        )
      }, {
        key: "getPageInfo",
        value: function() {
          var _getPageInfo = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee4(_ref) {
            var title, revisionId, params, response, pageKey, contentmodel, pageInfo;
            return _regeneratorRuntime().wrap(function _callee4$(_context4) {
              while (1) switch (_context4.prev = _context4.next) {
                case 0:
                  title = _ref.title, revisionId = _ref.revisionId;
                  _context4.prev = 1;
                  params = {
                    action: "query",
                    prop: "revisions|info",
                    rvprop: "timestamp|ids",
                    format: "json"
                  };
                  if (!revisionId) {
                    _context4.next = 7;
                    break;
                  }
                  params.revids = revisionId;
                  _context4.next = 11;
                  break;
                case 7:
                  if (!title) {
                    _context4.next = 11;
                    break;
                  }
                  if (!this.pageInfoCache[title]) {
                    _context4.next = 10;
                    break;
                  }
                  return _context4.abrupt("return", {
                    timestamp: this.pageInfoCache[title].timestamp,
                    revisionId: this.pageInfoCache[title].revid,
                    contentmodel: this.pageInfoCache[title].contentmodel
                  });
                case 10:
                  params.titles = title;
                case 11:
                  _context4.next = 13;
                  return requests_default.get(params);
                case 13:
                  response = _context4.sent;
                  if (!(response.query && response.query.pages)) {
                    _context4.next = 23;
                    break;
                  }
                  pageKey = Object.keys(response.query.pages)[0];
                  contentmodel = response.query.pages[pageKey].contentmodel;
                  if (!(pageKey === "-1")) {
                    _context4.next = 20;
                    break;
                  }
                  this.pageInfoCache[title] = {
                    contentmodel
                  };
                  return _context4.abrupt("return", {
                    contentmodel
                  });
                case 20:
                  pageInfo = response.query.pages[pageKey].revisions[0];
                  if (title) {
                    this.pageInfoCache[title] = _objectSpread(_objectSpread({}, pageInfo), {}, {
                      contentmodel
                    });
                  }
                  return _context4.abrupt("return", {
                    timestamp: pageInfo.timestamp,
                    revisionId: pageInfo.revid,
                    contentmodel
                  });
                case 23:
                  _context4.next = 28;
                  break;
                case 25:
                  _context4.prev = 25;
                  _context4.t0 = _context4["catch"](1);
                  log_default.error("fail_to_get_edittoken");
                case 28:
                case "end":
                  return _context4.stop();
              }
            }, _callee4, this, [[1, 25]]);
          }));
          function getPageInfo(_x) {
            return _getPageInfo.apply(this, arguments);
          }
          return getPageInfo;
        }()
      }, {
        key: "getWikiText",
        value: function() {
          var _getWikiText = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee5(_ref2) {
            var section, revisionId, params, response, pageInfo;
            return _regeneratorRuntime().wrap(function _callee5$(_context5) {
              while (1) switch (_context5.prev = _context5.next) {
                case 0:
                  section = _ref2.section, revisionId = _ref2.revisionId;
                  _context5.prev = 1;
                  params = {
                    action: "query",
                    prop: "revisions",
                    rvprop: "content",
                    format: "json",
                    revids: revisionId
                  };
                  if (revisionId) {
                    params.revids = revisionId;
                  }
                  if (section) {
                    params.rvsection = section;
                  }
                  _context5.next = 7;
                  return requests_default.get(params);
                case 7:
                  response = _context5.sent;
                  if (!(response.query && response.query.pages)) {
                    _context5.next = 13;
                    break;
                  }
                  if (!(Object.keys(response.query.pages)[0] === "-1")) {
                    _context5.next = 11;
                    break;
                  }
                  return _context5.abrupt("return", "");
                case 11:
                  pageInfo = response.query.pages[Object.keys(response.query.pages)[0]].revisions[0];
                  return _context5.abrupt("return", pageInfo["*"]);
                case 13:
                  _context5.next = 18;
                  break;
                case 15:
                  _context5.prev = 15;
                  _context5.t0 = _context5["catch"](1);
                  log_default.error("fail_to_get_wikitext");
                case 18:
                case "end":
                  return _context5.stop();
              }
            }, _callee5, null, [[1, 15]]);
          }));
          function getWikiText(_x2) {
            return _getWikiText.apply(this, arguments);
          }
          return getWikiText;
        }()
      }, {
        key: "parseWikiText",
        value: function() {
          var _parseWikiText = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee6(wikitext) {
            var title, config, response, _args6 = arguments;
            return _regeneratorRuntime().wrap(function _callee6$(_context6) {
              while (1) switch (_context6.prev = _context6.next) {
                case 0:
                  title = _args6.length > 1 && _args6[1] !== void 0 ? _args6[1] : "";
                  config = _args6.length > 2 && _args6[2] !== void 0 ? _args6[2] : {};
                  _context6.prev = 2;
                  _context6.next = 5;
                  return requests_default.post({
                    format: "json",
                    action: "parse",
                    text: wikitext,
                    title,
                    pst: "true"
                  });
                case 5:
                  response = _context6.sent;
                  if (!(response.parse && response.parse.text)) {
                    _context6.next = 8;
                    break;
                  }
                  return _context6.abrupt("return", response.parse.text["*"]);
                case 8:
                  _context6.next = 13;
                  break;
                case 10:
                  _context6.prev = 10;
                  _context6.t0 = _context6["catch"](2);
                  log_default.error("cant_parse_wikitext");
                case 13:
                case "end":
                  return _context6.stop();
              }
            }, _callee6, null, [[2, 10]]);
          }));
          function parseWikiText(_x3) {
            return _parseWikiText.apply(this, arguments);
          }
          return parseWikiText;
        }()
      }, {
        key: "edit",
        value: function() {
          var _edit = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee7() {
            var _ref3, title, content, editToken, timestamp, _ref3$config, config, _ref3$additionalConfi, additionalConfig, response, _args7 = arguments;
            return _regeneratorRuntime().wrap(function _callee7$(_context7) {
              while (1) switch (_context7.prev = _context7.next) {
                case 0:
                  _ref3 = _args7.length > 0 && _args7[0] !== void 0 ? _args7[0] : {}, title = _ref3.title, content = _ref3.content, editToken = _ref3.editToken, timestamp = _ref3.timestamp, _ref3$config = _ref3.config, config = _ref3$config === void 0 ? {} : _ref3$config, _ref3$additionalConfi = _ref3.additionalConfig, additionalConfig = _ref3$additionalConfi === void 0 ? {} : _ref3$additionalConfi;
                  _context7.prev = 1;
                  _context7.next = 4;
                  return requests_default.post(_objectSpread(_objectSpread(_objectSpread({
                    action: "edit",
                    format: "json",
                    text: content,
                    title,
                    token: editToken
                  }, timestamp ? {
                    basetimestamp: timestamp
                  } : {}), config), additionalConfig));
                case 4:
                  response = _context7.sent;
                  _context7.next = 10;
                  break;
                case 7:
                  _context7.prev = 7;
                  _context7.t0 = _context7["catch"](1);
                  log_default.error("network_edit_error");
                case 10:
                  if (!response.edit) {
                    _context7.next = 20;
                    break;
                  }
                  if (!(response.edit.result === "Success")) {
                    _context7.next = 13;
                    break;
                  }
                  return _context7.abrupt("return", true);
                case 13:
                  if (!response.edit.code) {
                    _context7.next = 17;
                    break;
                  }
                  throw new Error("\n                        ".concat(i18n_default.translate("hit_abusefilter"), ":").concat(response.edit.info.replace("/Hit AbuseFilter: /ig", ""), '\n                        <br>\n                        <div style="font-size: smaller;">').concat(response.edit.warning, "</div>\n                    "));
                case 17:
                  log_default.error("unknown_edit_error");
                case 18:
                  _context7.next = 21;
                  break;
                case 20:
                  if (response.error && response.error.code) {
                    log_default.error(response.error.code);
                  } else if (response.code) {
                    log_default.error(response.code);
                  } else {
                    log_default.error("unknown_edit_error");
                  }
                case 21:
                case "end":
                  return _context7.stop();
              }
            }, _callee7, null, [[1, 7]]);
          }));
          function edit() {
            return _edit.apply(this, arguments);
          }
          return edit;
        }()
      }, {
        key: "getLatestRevisionIdForPage",
        value: function() {
          var _getLatestRevisionIdForPage = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee8(title) {
            var _yield$this$getPageIn, revisionId;
            return _regeneratorRuntime().wrap(function _callee8$(_context8) {
              while (1) switch (_context8.prev = _context8.next) {
                case 0:
                  _context8.next = 2;
                  return this.getPageInfo({
                    title
                  });
                case 2:
                  _yield$this$getPageIn = _context8.sent;
                  revisionId = _yield$this$getPageIn.revisionId;
                  return _context8.abrupt("return", revisionId);
                case 5:
                case "end":
                  return _context8.stop();
              }
            }, _callee8, this);
          }));
          function getLatestRevisionIdForPage(_x4) {
            return _getLatestRevisionIdForPage.apply(this, arguments);
          }
          return getLatestRevisionIdForPage;
        }()
      }]);
    }();
    wiki_default = new Wiki();
  }
});
//! src/Wikiplus/modules/core/page.js
var Page;
var page_default;
var init_page = __esm2({
  "src/Wikiplus/modules/core/page.js": function src_Wikiplus_modules_core_pageJs() {
    "use strict";
    init_wiki();
    init_log();
    Page = /* @__PURE__ */ function() {
      function Page2(_ref4) {
        var title = _ref4.title, revisionId = _ref4.revisionId;
        _classCallCheck(this, Page2);
        _defineProperty(this, "timestamp", void 0);
        _defineProperty(this, "editToken", void 0);
        _defineProperty(this, "title", void 0);
        _defineProperty(this, "revisionId", void 0);
        _defineProperty(this, "inited", false);
        _defineProperty(this, "isNewPage", false);
        _defineProperty(this, "contentmodel", "wikitext");
        _defineProperty(this, "sectionCache", {});
        this.title = title;
        this.revisionId = revisionId;
        this.isNewPage = !revisionId;
      }
      return _createClass(Page2, [{
        key: "init",
        value: function() {
          var _init = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee9() {
            var _ref5, _ref5$editToken, editToken, promiseArr, _args9 = arguments;
            return _regeneratorRuntime().wrap(function _callee9$(_context9) {
              while (1) switch (_context9.prev = _context9.next) {
                case 0:
                  _ref5 = _args9.length > 0 && _args9[0] !== void 0 ? _args9[0] : {}, _ref5$editToken = _ref5.editToken, editToken = _ref5$editToken === void 0 ? "" : _ref5$editToken;
                  promiseArr = [this.getTimestamp(), this.getContentModel()];
                  if (!editToken) {
                    promiseArr.push(this.getEditToken());
                  }
                  _context9.next = 5;
                  return Promise.all(promiseArr);
                case 5:
                  this.inited = true;
                  log_default.info("Page initialization for ".concat(this.title, "#").concat(this.revisionId, " finished."));
                case 7:
                case "end":
                  return _context9.stop();
              }
            }, _callee9, this);
          }));
          function init() {
            return _init.apply(this, arguments);
          }
          return init;
        }()
      }, {
        key: "getEditToken",
        value: function() {
          var _getEditToken2 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee10() {
            return _regeneratorRuntime().wrap(function _callee10$(_context10) {
              while (1) switch (_context10.prev = _context10.next) {
                case 0:
                  _context10.next = 2;
                  return mw.loader.using("mediawiki.user");
                case 2:
                  if (!(mw.user.tokens.get("csrfToken") && mw.user.tokens.get("csrfToken") !== "+\\")) {
                    _context10.next = 5;
                    break;
                  }
                  this.editToken = mw.user.tokens.get("csrfToken");
                  return _context10.abrupt("return");
                case 5:
                  _context10.next = 7;
                  return wiki_default.getEditToken();
                case 7:
                  this.editToken = _context10.sent;
                case 8:
                case "end":
                  return _context10.stop();
              }
            }, _callee10, this);
          }));
          function getEditToken() {
            return _getEditToken2.apply(this, arguments);
          }
          return getEditToken;
        }()
      }, {
        key: "getTimestamp",
        value: function() {
          var _getTimestamp = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee11() {
            var _yield$wiki_default$g, timestamp, revisionId;
            return _regeneratorRuntime().wrap(function _callee11$(_context11) {
              while (1) switch (_context11.prev = _context11.next) {
                case 0:
                  _context11.next = 2;
                  return wiki_default.getPageInfo({
                    revisionId: this.revisionId,
                    title: this.title
                  });
                case 2:
                  _yield$wiki_default$g = _context11.sent;
                  timestamp = _yield$wiki_default$g.timestamp;
                  revisionId = _yield$wiki_default$g.revisionId;
                  this.timestamp = timestamp;
                  if (revisionId) {
                    this.revisionId = revisionId;
                    this.isNewPage = false;
                  }
                case 7:
                case "end":
                  return _context11.stop();
              }
            }, _callee11, this);
          }));
          function getTimestamp() {
            return _getTimestamp.apply(this, arguments);
          }
          return getTimestamp;
        }()
      }, {
        key: "getContentModel",
        value: function() {
          var _getContentModel = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee12() {
            var _yield$wiki_default$g2, contentmodel;
            return _regeneratorRuntime().wrap(function _callee12$(_context12) {
              while (1) switch (_context12.prev = _context12.next) {
                case 0:
                  _context12.next = 2;
                  return wiki_default.getPageInfo({
                    revisionId: this.revisionId,
                    title: this.title
                  });
                case 2:
                  _yield$wiki_default$g2 = _context12.sent;
                  contentmodel = _yield$wiki_default$g2.contentmodel;
                  this.contentmodel = contentmodel || "wikitext";
                case 5:
                case "end":
                  return _context12.stop();
              }
            }, _callee12, this);
          }));
          function getContentModel() {
            return _getContentModel.apply(this, arguments);
          }
          return getContentModel;
        }()
      }, {
        key: "getWikiText",
        value: function() {
          var _getWikiText2 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee13() {
            var _ref6, _ref6$section, section, sec, wikiText, _args13 = arguments;
            return _regeneratorRuntime().wrap(function _callee13$(_context13) {
              while (1) switch (_context13.prev = _context13.next) {
                case 0:
                  _ref6 = _args13.length > 0 && _args13[0] !== void 0 ? _args13[0] : {}, _ref6$section = _ref6.section, section = _ref6$section === void 0 ? "" : _ref6$section;
                  sec = section === -1 ? "" : section;
                  if (!this.sectionCache[sec]) {
                    _context13.next = 4;
                    break;
                  }
                  return _context13.abrupt("return", this.sectionCache[sec]);
                case 4:
                  _context13.next = 6;
                  return wiki_default.getWikiText({
                    section: sec,
                    revisionId: this.revisionId
                  });
                case 6:
                  wikiText = _context13.sent;
                  log_default.info("Wikitext of ".concat(this.title, "#").concat(section, " fetched."));
                  this.sectionCache[sec] = wikiText;
                  return _context13.abrupt("return", wikiText);
                case 10:
                case "end":
                  return _context13.stop();
              }
            }, _callee13, this);
          }));
          function getWikiText() {
            return _getWikiText2.apply(this, arguments);
          }
          return getWikiText;
        }()
      }, {
        key: "parseWikiText",
        value: function() {
          var _parseWikiText2 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee14(wikitext) {
            return _regeneratorRuntime().wrap(function _callee14$(_context14) {
              while (1) switch (_context14.prev = _context14.next) {
                case 0:
                  return _context14.abrupt("return", wiki_default.parseWikiText(wikitext, this.title));
                case 1:
                case "end":
                  return _context14.stop();
              }
            }, _callee14, this);
          }));
          function parseWikiText(_x5) {
            return _parseWikiText2.apply(this, arguments);
          }
          return parseWikiText;
        }()
      }, {
        key: "edit",
        value: function() {
          var _edit2 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee15(payload) {
            return _regeneratorRuntime().wrap(function _callee15$(_context15) {
              while (1) switch (_context15.prev = _context15.next) {
                case 0:
                  if (this.editToken) {
                    _context15.next = 3;
                    break;
                  }
                  log_default.error("fail_to_get_edittoken");
                  return _context15.abrupt("return");
                case 3:
                  if (!(!this.timestamp && !this.isNewPage)) {
                    _context15.next = 6;
                    break;
                  }
                  log_default.error("fail_to_get_timestamp");
                  return _context15.abrupt("return");
                case 6:
                  return _context15.abrupt("return", wiki_default.edit(_objectSpread(_objectSpread(_objectSpread({
                    title: this.title,
                    editToken: this.editToken
                  }, this.timestamp ? {
                    timestamp: this.timestamp
                  } : {}), payload), {}, {
                    additionalConfig: _objectSpread({}, this.isNewPage ? {
                      createonly: this.isNewPage
                    } : {})
                  })));
                case 7:
                case "end":
                  return _context15.stop();
              }
            }, _callee15, this);
          }));
          function edit(_x6) {
            return _edit2.apply(this, arguments);
          }
          return edit;
        }()
      }]);
    }();
    page_default = Page;
  }
});
//! src/Wikiplus/modules/core/notification.js
var Notification;
var notification_default;
var init_notification = __esm2({
  "src/Wikiplus/modules/core/notification.js": function src_Wikiplus_modules_core_notificationJs() {
    "use strict";
    Notification = /* @__PURE__ */ function() {
      function Notification2() {
        _classCallCheck(this, Notification2);
        this.init();
      }
      return _createClass(Notification2, [{
        key: "init",
        value: function init() {
          $("body").append('<div id="MoeNotification"></div>');
        }
      }, {
        key: "display",
        value: function display() {
          var text = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "喵~";
          var type = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "success";
          var callback = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() {
          };
          $("#MoeNotification").append($("<div>").addClass("MoeNotification-notice").addClass("MoeNotification-notice-".concat(type)).append("<span>".concat(text, "</span>")));
          $("#MoeNotification").find(".MoeNotification-notice").last().fadeIn(300);
          this.bind();
          this.clear();
          callback($("#MoeNotification").find(".MoeNotification-notice").last());
        }
      }, {
        key: "bind",
        value: function bind() {
          var self2 = this;
          $(".MoeNotification-notice").on("mouseover", function() {
            self2.slideLeft($(this));
          });
        }
      }, {
        key: "success",
        value: function success(text, callback) {
          this.display(text, "success", callback);
        }
      }, {
        key: "warning",
        value: function warning(text, callback) {
          this.display(text, "warning", callback);
        }
      }, {
        key: "error",
        value: function error(text, callback) {
          this.display(text, "error", callback);
        }
      }, {
        key: "clear",
        value: function clear() {
          if ($(".MoeNotification-notice").length >= 10) {
            $("#MoeNotification").children().first().fadeOut(150, function() {
              $(this).remove();
            });
            setTimeout(this.clear, 300);
          }
        }
      }, {
        key: "empty",
        value: function empty(f) {
          $(".MoeNotification-notice").each(function(i) {
            if (typeof f === "function") {
              var ele = $(this);
              setTimeout(function() {
                f(ele);
              }, 200 * i);
            } else {
              $(this).delay(i * 200).fadeOut("fast", function() {
                $(this).remove();
              });
            }
          });
        }
      }, {
        key: "slideLeft",
        value: function slideLeft(ele, speed) {
          ele.css("position", "relative");
          ele.animate({
            left: "-200%"
          }, speed || 150, function() {
            $(this).fadeOut("fast", function() {
              $(this).remove();
            });
          });
        }
      }]);
    }();
    notification_default = new Notification();
  }
});
//! src/Wikiplus/modules/utils/sleep.js
var sleep;
var sleep_default;
var init_sleep = __esm2({
  "src/Wikiplus/modules/utils/sleep.js": function src_Wikiplus_modules_utils_sleepJs() {
    "use strict";
    sleep = function sleep2(time) {
      return new Promise(function(resolve) {
        return setTimeout(resolve, time);
      });
    };
    sleep_default = sleep;
  }
});
//! src/Wikiplus/modules/utils/helpers.js
function parseQuery(url) {
  var reg = /(([^?&=]+)(?:=([^?&=]*))*)/g;
  var params = {};
  var match;
  while (match = reg.exec(url)) {
    try {
      params[match[2]] = decodeURIComponent(match[3]);
    } catch (_unused7) {
      params[match[2]] = match[3];
    }
  }
  return params;
}
var init_helpers = __esm2({
  "src/Wikiplus/modules/utils/helpers.js": function src_Wikiplus_modules_utils_helpersJs() {
    "use strict";
  }
});
//! src/Wikiplus/modules/core/ui.js
var UI;
var ui_default;
var init_ui = __esm2({
  "src/Wikiplus/modules/core/ui.js": function src_Wikiplus_modules_core_uiJs() {
    "use strict";
    init_constants();
    init_notification();
    init_i18n();
    init_log();
    init_sleep();
    init_helpers();
    UI = /* @__PURE__ */ function() {
      function UI2() {
        _classCallCheck(this, UI2);
        _defineProperty(this, "quickEditPanelVisible", false);
        _defineProperty(this, "scrollTop", 0);
      }
      return _createClass(UI2, [{
        key: "createDialogBox",
        value: (
          /**
           * 创建居中对话框
           *
           * @param {string} title 窗口标题
           * @param {string | JQuery<HTMLElement>} content 内容
           * @param {*} width 宽度
           * @param {*} callback 回调函数
           */
          function createDialogBox() {
            var title = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "Wikiplus";
            var content = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "";
            var width = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 600;
            var callback = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() {
            };
            if ($(".Wikiplus-InterBox").length > 0) {
              $(".Wikiplus-InterBox").each(function() {
                $(this).remove();
              });
            }
            var clientWidth = window.innerWidth;
            var clientHeight = window.innerHeight;
            var dialogWidth = Math.min(clientWidth, width);
            var dialogBox = $("<div>").addClass("Wikiplus-InterBox").css({
              "margin-left": clientWidth / 2 - dialogWidth / 2,
              top: $(document).scrollTop() + clientHeight * 0.2,
              display: "none"
            }).append($("<div>").addClass("Wikiplus-InterBox-Header").html(title)).append($("<div>").addClass("Wikiplus-InterBox-Content").append(content)).append($("<span>").text("×").addClass("Wikiplus-InterBox-Close"));
            $("body").append(dialogBox);
            $(".Wikiplus-InterBox").width(dialogWidth);
            $(".Wikiplus-InterBox-Close").on("click", function() {
              $(this).parent().fadeOut("fast", function() {
                window.addEventListener("close", window.onbeforeunload = void 0);
                $(this).remove();
              });
            });
            var _bindDragging = function bindDragging(element) {
              element.mousedown(function(e) {
                var baseX = e.clientX;
                var baseY = e.clientY;
                var baseOffsetX = element.parent().offset().left;
                var baseOffsetY = element.parent().offset().top;
                $(document).on("mousemove", function(e2) {
                  element.parent().css({
                    "margin-left": baseOffsetX + e2.clientX - baseX,
                    top: baseOffsetY + e2.clientY - baseY
                  });
                });
                $(document).on("mouseup", function() {
                  element.unbind("mousedown");
                  $(document).off("mousemove");
                  $(document).off("mouseup");
                  _bindDragging(element);
                });
              });
            };
            _bindDragging($(".Wikiplus-InterBox-Header"));
            $(".Wikiplus-InterBox").fadeIn(500);
            callback();
            return dialogBox;
          }
        )
        /**
         * 在搜索框左侧「更多」菜单内添加按钮
         * Add a button in "More" menu (left of the search bar)
         *
         * @param {string} text 按钮名 Button text
         * @param {string} id 按钮id Button id
         * @return {JQuery<HTMLElement>} button
         */
      }, {
        key: "addFunctionButton",
        value: function addFunctionButton(text, id) {
          var button;
          switch (constants_default.skin) {
            case "minerva":
              button = $("<li>").attr("id", id).addClass("toggle-list-item").append($("<a>").addClass("mw-ui-icon mw-ui-icon-before toggle-list-item__anchor").append($("<span>").attr("href", "javascript:void(0);").addClass("toggle-list-item__label").text(text)));
              break;
            case "moeskin":
              button = $("<li>").addClass("Wikiplus-More-Function-Button").attr("id", id).append($("<a>").attr("href", "javascript:void(0);").text(text));
              break;
            default:
              button = $("<li>").addClass("mw-list-item").addClass("vector-tab-noicon").attr("id", id).append($("<a>").attr("href", "javascript:void(0);").text(text));
          }
          if (constants_default.skin === "minerva" && $("#p-tb").length > 0) {
            $("#p-tb").append(button);
            return $("#".concat(id));
          } else if (constants_default.skin === "moeskin") {
            $(".more-actions-list").first().append(button);
            return $("#".concat(id));
          } else if ($("#p-cactions").length > 0) {
            $("#p-cactions ul").append(button);
            return $("#".concat(id));
          }
          log_default.info(i18n_default.translate("cant_add_funcbtn"));
        }
        /**
         * 插入快速重定向按钮
         *
         * @param {*} onClick
         */
      }, {
        key: "insertSimpleRedirectButton",
        value: function insertSimpleRedirectButton() {
          var onClick = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {
          };
          var button = this.addFunctionButton(i18n_default.translate("redirect_from"), "Wikiplus-SR-Intro");
          if (button) {
            button.on("click", onClick);
          }
        }
        /**
         * 插入设置面板按钮
         *
         * @param {*} onClick
         */
      }, {
        key: "insertSettingsPanelButton",
        value: function insertSettingsPanelButton() {
          var onClick = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {
          };
          var button = this.addFunctionButton(i18n_default.translate("wikiplus_settings"), "Wikiplus-Settings-Intro");
          if (button) {
            button.on("click", onClick);
          }
        }
        /**
         * 插入顶部快速编辑按钮
         * Insert QuickEdit button besides page edit button.
         *
         * @param onClick
         */
      }, {
        key: "insertTopQuickEditEntry",
        value: function insertTopQuickEditEntry(onClick) {
          var topBtn = $("<li>").attr("id", "Wikiplus-Edit-TopBtn").attr("class", "mw-list-item");
          var topBtnLink = $("<a>").attr("href", "javascript:void(0)").text("".concat(i18n_default.translate("quickedit_topbtn")));
          topBtn.append(topBtnLink);
          switch (constants_default.skin) {
            case "minerva":
              topBtn.css({
                "align-items": "center",
                display: "flex"
              });
              topBtn.find("span").addClass("page-actions-menu__list-item");
              topBtn.find("a").addClass("mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-edit-base20 mw-ui-icon-with-label-desktop").css("vertical-align", "middle");
              break;
            case "vector-2022":
              topBtn.addClass("vector-tab-noicon");
              break;
            case "vector":
              topBtn.append($("<span>").append(topBtnLink));
              break;
            default:
          }
          $(topBtn).on("click", function() {
            onClick({
              sectionNumber: -1,
              targetPageName: constants_default.currentPageName
            });
          });
          if ($("#ca-edit").length > 0 && $("#Wikiplus-Edit-TopBtn").length === 0) {
            constants_default.skin === "minerva" ? $("#ca-edit").parent().after(topBtn) : $("#ca-edit").after(topBtn);
          }
        }
        /**
         * 插入段落快速编辑按钮
         * Insert QuickEdit buttons for each section.
         *
         * @param onClick
         */
      }, {
        key: "insertSectionQuickEditEntries",
        value: function insertSectionQuickEditEntries() {
          var onClick = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {
          };
          var sectionBtn = constants_default.skin === "minerva" ? $("<span>").append($("<a>").addClass("Wikiplus-Edit-SectionBtn mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-edit-base20 edit-page mw-ui-icon-flush-right").css("margin-left", "0.75em").attr("href", "javascript:void(0)").attr("title", i18n_default.translate("quickedit_sectionbtn"))) : $("<span>").append($("<span>").addClass("mw-editsection-divider").text(" | ")).append($("<a>").addClass("Wikiplus-Edit-SectionBtn").attr("href", "javascript:void(0)").text(i18n_default.translate("quickedit_sectionbtn")));
          $(".mw-editsection").each(function(i) {
            try {
              var editURL = $(this).find("a[href*='action=edit']").first().attr("href");
              var sectionNumber = editURL.match(/&[ve]*section\=([^&]+)/)[1].replace(/T-/gi, "");
              var sectionTargetName = decodeURIComponent(editURL.match(/title=(.+?)&/)[1]);
              var cloneNode = $(this).prev().clone();
              cloneNode.find(".mw-headline-number").remove();
              var sectionName = cloneNode.text().trim();
              var _sectionBtn = sectionBtn.clone();
              _sectionBtn.find(".Wikiplus-Edit-SectionBtn").on("click", function() {
                onClick({
                  sectionNumber,
                  sectionName,
                  targetPageName: sectionTargetName
                });
              });
              constants_default.skin === "minerva" ? $(this).append(_sectionBtn) : $(this).find(".mw-editsection-bracket").last().before(_sectionBtn);
            } catch (_unused8) {
              log_default.error("fail_to_init_quickedit");
            }
          });
        }
        /**
         * 插入任意链接编辑入口
         *
         * @param {*} onClick
         */
      }, {
        key: "insertLinkEditEntries",
        value: function insertLinkEditEntries() {
          var onClick = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {
          };
          $("#mw-content-text a.external").each(function(i) {
            var url = $(this).attr("href");
            var params = parseQuery(url);
            if (params.action === "edit" && params.title !== void 0 && params.section !== "new") {
              $(this).after($("<a>").attr({
                href: "javascript:void(0)",
                class: "Wikiplus-Edit-EveryWhereBtn"
              }).text("(".concat(i18n_default.translate("quickedit_sectionbtn"), ")")).on("click", function() {
                var _params$section;
                onClick({
                  targetPageName: params.title,
                  sectionNumber: (_params$section = params.section) !== null && _params$section !== void 0 ? _params$section : -1
                });
              }));
            }
          });
        }
      }, {
        key: "showQuickEditPanel",
        value: function showQuickEditPanel(_ref7) {
          var _ref7$title = _ref7.title, title = _ref7$title === void 0 ? "" : _ref7$title, _ref7$content = _ref7.content, content = _ref7$content === void 0 ? "" : _ref7$content, _ref7$summary = _ref7.summary, summary = _ref7$summary === void 0 ? "" : _ref7$summary, _ref7$onBack = _ref7.onBack, onBack = _ref7$onBack === void 0 ? function() {
          } : _ref7$onBack, _ref7$onParse = _ref7.onParse, onParse = _ref7$onParse === void 0 ? function() {
          } : _ref7$onParse, _ref7$onEdit = _ref7.onEdit, onEdit = _ref7$onEdit === void 0 ? function() {
          } : _ref7$onEdit, _ref7$escExit = _ref7.escExit, escExit = _ref7$escExit === void 0 ? false : _ref7$escExit;
          var self2 = this;
          this.scrollTop = $(document).scrollTop();
          if (this.quickEditPanelVisible) {
            this.hideQuickEditPanel();
          }
          this.quickEditPanelVisible = true;
          window.addEventListener("close", window.onbeforeunload = function() {
            return "".concat(i18n_default.translate("onclose_confirm"));
          });
          var isNewPage = $(".noarticletext").length > 0;
          var backBtn = $("<span>").attr("id", "Wikiplus-Quickedit-Back").addClass("Wikiplus-Btn").text("".concat(i18n_default.translate("back")));
          var jumpBtn = $("<span>").attr("id", "Wikiplus-Quickedit-Jump").addClass("Wikiplus-Btn").append($("<a>").attr("href", "#Wikiplus-Quickedit").text("".concat(i18n_default.translate("goto_editbox"))));
          var inputBox = $("<textarea>").attr("id", "Wikiplus-Quickedit");
          var previewBox = $("<div>").attr("id", "Wikiplus-Quickedit-Preview-Output");
          var summaryBox = $("<input>").attr("id", "Wikiplus-Quickedit-Summary-Input").attr("placeholder", "".concat(i18n_default.translate("summary_placehold")));
          var editSubmitBtn = $("<button>").attr("id", "Wikiplus-Quickedit-Submit").text("".concat(i18n_default.translate(isNewPage ? "publish_page" : "publish_change"), "(Ctrl+S)"));
          var previewSubmitBtn = $("<button>").attr("id", "Wikiplus-Quickedit-Preview-Submit").text("".concat(i18n_default.translate("preview")));
          var isMinorEdit = $("<div>").append($("<input>").attr({
            type: "checkbox",
            id: "Wikiplus-Quickedit-MinorEdit"
          })).append($("<label>").attr("for", "Wikiplus-Quickedit-MinorEdit").text("".concat(i18n_default.translate("mark_minoredit"), "(Ctrl+Shift+S)"))).css({
            margin: "5px 5px 5px -3px",
            display: "inline"
          });
          var editBody = $("<div>").append(backBtn, jumpBtn, previewBox, inputBox, summaryBox, $("<br>"), isMinorEdit, editSubmitBtn, previewSubmitBtn);
          this.createDialogBox(title, editBody, 1e3, function() {
            $("#Wikiplus-Quickedit").val(content);
            $("#Wikiplus-Quickedit-Summary-Input").val(summary);
          });
          $("#Wikiplus-Quickedit-Back").on("click", onBack);
          $("#Wikiplus-Quickedit-Preview-Submit").on("click", /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee16() {
            var preloadBanner, wikiText, result;
            return _regeneratorRuntime().wrap(function _callee16$(_context16) {
              while (1) switch (_context16.prev = _context16.next) {
                case 0:
                  preloadBanner = $("<div>").addClass("Wikiplus-Banner").text("".concat(i18n_default.translate("loading_preview")));
                  wikiText = $("#Wikiplus-Quickedit").val();
                  $(this).attr("disabled", "disabled");
                  $("#Wikiplus-Quickedit-Preview-Output").fadeOut(100, function() {
                    $("#Wikiplus-Quickedit-Preview-Output").html("").append(preloadBanner);
                    $("#Wikiplus-Quickedit-Preview-Output").fadeIn(100);
                  });
                  $("html, body").animate({
                    scrollTop: self2.scrollTop
                  }, 200);
                  _context16.next = 7;
                  return onParse(wikiText);
                case 7:
                  result = _context16.sent;
                  $("#Wikiplus-Quickedit-Preview-Output").fadeOut("100", function() {
                    $("#Wikiplus-Quickedit-Preview-Output").html('<hr><div class="mw-body-content">'.concat(result, "</div><hr>"));
                    $("#Wikiplus-Quickedit-Preview-Output").fadeIn("100");
                    $("#Wikiplus-Quickedit-Preview-Submit").prop("disabled", false);
                  });
                case 9:
                case "end":
                  return _context16.stop();
              }
            }, _callee16, this);
          })));
          $("#Wikiplus-Quickedit-Submit").on("click", /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee17() {
            var timer, editBanner, payload, useTime;
            return _regeneratorRuntime().wrap(function _callee17$(_context17) {
              while (1) switch (_context17.prev = _context17.next) {
                case 0:
                  timer = Date.now();
                  editBanner = $("<div>").addClass("Wikiplus-Banner").text("".concat(i18n_default.translate("submitting_edit")));
                  payload = {
                    summary: $("#Wikiplus-Quickedit-Summary-Input").val(),
                    content: $("#Wikiplus-Quickedit").val(),
                    isMinorEdit: $("#Wikiplus-Quickedit-MinorEdit").is(":checked")
                  };
                  $("#Wikiplus-Quickedit-Submit,#Wikiplus-Quickedit,#Wikiplus-Quickedit-Preview-Submit").attr("disabled", "disabled");
                  $("html, body").animate({
                    scrollTop: self2.scrollTop
                  }, 200);
                  $("#Wikiplus-Quickedit-Preview-Output").fadeOut(100, function() {
                    $("#Wikiplus-Quickedit-Preview-Output").html("").append(editBanner);
                    $("#Wikiplus-Quickedit-Preview-Output").fadeIn(100);
                  });
                  _context17.prev = 6;
                  _context17.next = 9;
                  return onEdit(payload);
                case 9:
                  useTime = Date.now() - timer;
                  $("#Wikiplus-Quickedit-Preview-Output").find(".Wikiplus-Banner").css("background", "rgba(6, 239, 92, 0.44)");
                  $("#Wikiplus-Quickedit-Preview-Output").find(".Wikiplus-Banner").text("".concat(i18n_default.translate("edit_success", [useTime.toString()])));
                  window.addEventListener("close", window.onbeforeunload = void 0);
                  setTimeout(function() {
                    location.reload();
                  }, 500);
                  _context17.next = 21;
                  break;
                case 16:
                  _context17.prev = 16;
                  _context17.t0 = _context17["catch"](6);
                  console.log(_context17.t0);
                  $(".Wikiplus-Banner").css("background", "rgba(218, 142, 167, 0.65)");
                  $(".Wikiplus-Banner").html(_context17.t0.message);
                case 21:
                  _context17.prev = 21;
                  $("#Wikiplus-Quickedit-Submit,#Wikiplus-Quickedit,#Wikiplus-Quickedit-Preview-Submit").prop("disabled", false);
                  return _context17.finish(21);
                case 24:
                case "end":
                  return _context17.stop();
              }
            }, _callee17, null, [[6, 16, 21, 24]]);
          })));
          $("#Wikiplus-Quickedit,#Wikiplus-Quickedit-Summary-Input,#Wikiplus-Quickedit-MinorEdit").on("keydown", function(e) {
            if (e.ctrlKey && e.which === 83) {
              if (e.shiftKey) {
                $("#Wikiplus-Quickedit-MinorEdit").trigger("click");
              }
              $("#Wikiplus-Quickedit-Submit").trigger("click");
              e.preventDefault();
              e.stopPropagation();
            }
          });
          if (escExit) {
            $(document).on("keydown", function(e) {
              if (e.which === 27) {
                $("#Wikiplus-Quickedit-Back").trigger("click");
              }
            });
          }
        }
      }, {
        key: "hideQuickEditPanel",
        value: function hideQuickEditPanel() {
          this.quickEditPanelVisible = false;
          $(".Wikiplus-InterBox").fadeOut("fast", function() {
            window.addEventListener("close", window.onbeforeunload = void 0);
            $(this).remove();
          });
        }
        /**
         * 显示快速重定向弹窗
         *
         * @param root0
         * @param root0.onEdit
         * @param root0.onSuccess
         */
      }, {
        key: "showSimpleRedirectPanel",
        value: function showSimpleRedirectPanel() {
          var _this2 = this;
          var _ref10 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref10$onEdit = _ref10.onEdit, onEdit = _ref10$onEdit === void 0 ? function() {
          } : _ref10$onEdit, _ref10$onSuccess = _ref10.onSuccess, onSuccess = _ref10$onSuccess === void 0 ? function() {
          } : _ref10$onSuccess;
          var input = $("<input>").addClass("Wikiplus-InterBox-Input").attr("id", "Wikiplus-SR-Title");
          var summaryInputTitle = $("<p>").text(i18n_default.translate("redirect_summary_desc"));
          var summaryInput = $("<input>").addClass("Wikiplus-InterBox-Input").attr("id", "Wikiplus-SR-Summary");
          var applyBtn = $("<div>").addClass("Wikiplus-InterBox-Btn").attr("id", "Wikiplus-SR-Apply").text(i18n_default.translate("submit"));
          var cancelBtn = $("<div>").addClass("Wikiplus-InterBox-Btn").attr("id", "Wikiplus-SR-Cancel").text(i18n_default.translate("cancel"));
          var continueBtn = $("<div>").addClass("Wikiplus-InterBox-Btn").attr("id", "Wikiplus-SR-Continue").text(i18n_default.translate("continue"));
          var content = $("<div>").append(input).append(summaryInputTitle).append(summaryInput).append($("<hr>")).append(applyBtn).append(cancelBtn);
          var dialog = this.createDialogBox(i18n_default.translate("redirect_desc"), content, 600);
          applyBtn.on("click", /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee19() {
            var title, summary;
            return _regeneratorRuntime().wrap(function _callee19$(_context19) {
              while (1) switch (_context19.prev = _context19.next) {
                case 0:
                  title = $("#Wikiplus-SR-Title").val();
                  summary = $("#Wikiplus-SR-Summary").val();
                  $(".Wikiplus-InterBox-Content").html('<div class="Wikiplus-Banner">'.concat(i18n_default.translate("submitting_edit"), "</div>"));
                  _context19.prev = 3;
                  _context19.next = 6;
                  return onEdit({
                    title,
                    summary,
                    forceOverwrite: false
                  });
                case 6:
                  $(".Wikiplus-Banner").text(i18n_default.translate("redirect_saved"));
                  _this2.hideSimpleRedirectPanel(dialog);
                  onSuccess({
                    title
                  });
                  _context19.next = 16;
                  break;
                case 11:
                  _context19.prev = 11;
                  _context19.t0 = _context19["catch"](3);
                  $(".Wikiplus-Banner").css("background", "rgba(218, 142, 167, 0.65)");
                  $(".Wikiplus-Banner").text(_context19.t0.message);
                  if (_context19.t0.code === "articleexists") {
                    $(".Wikiplus-InterBox-Content").append($("<hr>")).append(continueBtn).append(cancelBtn);
                    cancelBtn.on("click", function() {
                      _this2.hideSimpleRedirectPanel(dialog);
                    });
                    continueBtn.on("click", /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee18() {
                      return _regeneratorRuntime().wrap(function _callee18$(_context18) {
                        while (1) switch (_context18.prev = _context18.next) {
                          case 0:
                            $(".Wikiplus-InterBox-Content").html('<div class="Wikiplus-Banner">'.concat(i18n_default.translate("submitting_edit"), "</div>"));
                            _context18.prev = 1;
                            _context18.next = 4;
                            return onEdit({
                              title,
                              summary,
                              forceOverwrite: true
                            });
                          case 4:
                            $(".Wikiplus-Banner").text(i18n_default.translate("redirect_saved"));
                            _this2.hideSimpleRedirectPanel(dialog);
                            onSuccess({
                              title
                            });
                            _context18.next = 13;
                            break;
                          case 9:
                            _context18.prev = 9;
                            _context18.t0 = _context18["catch"](1);
                            $(".Wikiplus-Banner").css("background", "rgba(218, 142, 167, 0.65)");
                            $(".Wikiplus-Banner").text(_context18.t0.message);
                          case 13:
                          case "end":
                            return _context18.stop();
                        }
                      }, _callee18, null, [[1, 9]]);
                    })));
                  }
                case 16:
                case "end":
                  return _context19.stop();
              }
            }, _callee19, null, [[3, 11]]);
          })));
          cancelBtn.on("click", function() {
            _this2.hideSimpleRedirectPanel(dialog);
          });
        }
        /**
         * 隐藏快速重定向弹窗
         *
         * @param {*} dialog
         */
      }, {
        key: "hideSimpleRedirectPanel",
        value: function hideSimpleRedirectPanel() {
          var dialog = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : $("body");
          dialog.find(".Wikiplus-InterBox-Close").trigger("click");
        }
      }, {
        key: "showSettingsPanel",
        value: function showSettingsPanel() {
          var _this3 = this;
          var _ref13 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref13$onSubmit = _ref13.onSubmit, onSubmit = _ref13$onSubmit === void 0 ? function() {
          } : _ref13$onSubmit;
          var input = $("<textarea>").attr("id", "Wikiplus-Setting-Input").attr("rows", "10");
          var applyBtn = $("<div>").addClass("Wikiplus-InterBox-Btn").attr("id", "Wikiplus-Setting-Apply").text(i18n_default.translate("submit"));
          var cancelBtn = $("<div>").addClass("Wikiplus-InterBox-Btn").attr("id", "Wikiplus-Setting-Cancel").text(i18n_default.translate("cancel"));
          var content = $("<div>").append(input).append($("<hr>")).append(applyBtn).append(cancelBtn);
          var dialog = this.createDialogBox(i18n_default.translate("wikiplus_settings_desc"), content, 600, function() {
            if (localStorage.Wikiplus_Settings) {
              $("#Wikiplus-Setting-Input").val(localStorage.Wikiplus_Settings);
              try {
                var settings = JSON.parse(localStorage.Wikiplus_Settings);
                $("#Wikiplus-Setting-Input").val(JSON.stringify(settings, null, 2));
              } catch (_unused9) {
              }
            } else {
              $("#Wikiplus-Setting-Input").attr("placeholder", i18n_default.translate("wikiplus_settings_placeholder"));
            }
          });
          applyBtn.on("click", /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee20() {
            var savedBanner, settings;
            return _regeneratorRuntime().wrap(function _callee20$(_context20) {
              while (1) switch (_context20.prev = _context20.next) {
                case 0:
                  savedBanner = $("<div>").addClass("Wikiplus-Banner").text(i18n_default.translate("wikiplus_settings_saved"));
                  settings = $("#Wikiplus-Setting-Input").val();
                  _context20.prev = 2;
                  onSubmit({
                    settings
                  });
                  $(".Wikiplus-InterBox-Content").html("").append(savedBanner);
                  _context20.next = 7;
                  return sleep_default(1500);
                case 7:
                  _this3.hideSettingsPanel(dialog);
                  _context20.next = 13;
                  break;
                case 10:
                  _context20.prev = 10;
                  _context20.t0 = _context20["catch"](2);
                  notification_default.error(i18n_default.translate("wikiplus_settings_grammar_error"));
                case 13:
                case "end":
                  return _context20.stop();
              }
            }, _callee20, null, [[2, 10]]);
          })));
          cancelBtn.on("click", function() {
            _this3.hideSettingsPanel(dialog);
          });
        }
      }, {
        key: "hideSettingsPanel",
        value: function hideSettingsPanel() {
          var dialog = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : $("body");
          dialog.find(".Wikiplus-InterBox-Close").trigger("click");
        }
      }, {
        key: "bindPreloadEvents",
        value: function bindPreloadEvents(onPreload) {
          $("#toc").children("ul").find("a").each(function(i) {
            $(this).on("mouseover", function() {
              $(this).off("mouseover");
              onPreload({
                sectionNumber: i + 1
              });
            });
          });
        }
      }]);
    }();
    ui_default = new UI();
  }
});
//! src/Wikiplus/modules/utils/settings.js
var Settings;
var settings_default;
var init_settings = __esm2({
  "src/Wikiplus/modules/utils/settings.js": function src_Wikiplus_modules_utils_settingsJs() {
    "use strict";
    Settings = /* @__PURE__ */ function() {
      function Settings2() {
        _classCallCheck(this, Settings2);
      }
      return _createClass(Settings2, [{
        key: "getSetting",
        value: function getSetting(key) {
          var object = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
          var w = object;
          var settings;
          try {
            settings = JSON.parse(localStorage["Wikiplus_Settings"]);
          } catch (_unused11) {
            return;
          }
          try {
            var customSettingFunction = new Function("return ".concat(settings[key]));
            if (typeof customSettingFunction === "function") {
              try {
                if (customSettingFunction()(w) === true) {
                } else {
                  return customSettingFunction()(w) || settings[key];
                }
              } catch (_unused12) {
                return settings[key];
              }
            } else {
              return settings[key];
            }
          } catch (_unused13) {
            try {
              var result = settings[key];
              for (var _i4 = 0, _Object$keys3 = Object.keys(object); _i4 < _Object$keys3.length; _i4++) {
                var key2 = _Object$keys3[_i4];
                result = result.replace("${".concat(key2, "}"), object[key2]);
              }
              return result;
            } catch (_unused14) {
            }
          }
        }
      }]);
    }();
    settings_default = new Settings();
  }
});
//! src/Wikiplus/modules/wikiplus.less
var init_wikiplus = __esm2({
  "src/Wikiplus/modules/wikiplus.less": function src_Wikiplus_modules_wikiplusLess() {
  }
});
//! src/Wikiplus/modules/index.js
var modules_exports = {};
var init_modules = __esm2({
  "src/Wikiplus/modules/index.js": function src_Wikiplus_modules_indexJs() {
    "use strict";
    init_page();
    init_ui();
    init_notification();
    init_wiki();
    init_settings();
    init_log();
    init_constants();
    init_i18n();
    init_wikiplus();
    $(/* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee28() {
      var Pages, isCurrentPageEmpty, getPage, currentPageName, revisionId, currentPage, handleQuickEditButtonClicked, handleSimpleRedirectButtonClicked, handleSettingsButtonClicked, handlePreload;
      return _regeneratorRuntime().wrap(function _callee28$(_context28) {
        while (1) switch (_context28.prev = _context28.next) {
          case 0:
            Pages = {};
            isCurrentPageEmpty = $(".noarticletext").length > 0 && constants_default.articleId === 0;
            getPage = /* @__PURE__ */ function() {
              var _ref17 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee21(_ref16) {
                var revisionId2, title, newPage;
                return _regeneratorRuntime().wrap(function _callee21$(_context21) {
                  while (1) switch (_context21.prev = _context21.next) {
                    case 0:
                      revisionId2 = _ref16.revisionId, title = _ref16.title;
                      if (!Pages[revisionId2]) {
                        _context21.next = 3;
                        break;
                      }
                      return _context21.abrupt("return", Pages[revisionId2]);
                    case 3:
                      newPage = new page_default({
                        revisionId: revisionId2,
                        title
                      });
                      _context21.next = 6;
                      return newPage.init();
                    case 6:
                      Pages[revisionId2] = newPage;
                      return _context21.abrupt("return", Pages[revisionId2]);
                    case 8:
                    case "end":
                      return _context21.stop();
                  }
                }, _callee21);
              }));
              return function getPage2(_x7) {
                return _ref17.apply(this, arguments);
              };
            }();
            log_default.info("Wikiplus now loading. Version: ".concat(constants_default.version));
            if (window.mw) {
              _context28.next = 7;
              break;
            }
            console.log("Mediawiki JavaScript not loaded or not a Mediawiki website.");
            return _context28.abrupt("return");
          case 7:
            if (!(!constants_default.userGroups.includes("autoconfirmed") && !constants_default.userGroups.includes("confirmed"))) {
              _context28.next = 11;
              break;
            }
            notification_default.error(i18n_default.translate("not_autoconfirmed_user"));
            log_default.info(i18n_default.translate("not_autoconfirmed_user"));
            return _context28.abrupt("return");
          case 11:
            if (!(!constants_default.isArticle || constants_default.action !== "view")) {
              _context28.next = 14;
              break;
            }
            log_default.info("Not an editable page. Stop initialization.");
            return _context28.abrupt("return");
          case 14:
            window._WikiplusPages = Pages;
            currentPageName = constants_default.currentPageName;
            revisionId = constants_default.revisionId;
            _context28.next = 19;
            return getPage({
              revisionId,
              title: currentPageName
            });
          case 19:
            currentPage = _context28.sent;
            handleQuickEditButtonClicked = /* @__PURE__ */ function() {
              var _ref18 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee23() {
                var _ref19, sectionNumber, sectionName, targetPageName, isOtherPage, revisionId2, page, customSummary, summary, timer, sectionContent, isEditHistoryRevision, escToExit, customEditTags, defaultEditTags, editTags, shouldShowCreatePageTip, _args23 = arguments;
                return _regeneratorRuntime().wrap(function _callee23$(_context23) {
                  while (1) switch (_context23.prev = _context23.next) {
                    case 0:
                      _ref19 = _args23.length > 0 && _args23[0] !== void 0 ? _args23[0] : {}, sectionNumber = _ref19.sectionNumber, sectionName = _ref19.sectionName, targetPageName = _ref19.targetPageName;
                      isOtherPage = targetPageName !== currentPageName;
                      if (!(isOtherPage && constants_default.latestRevisionId !== constants_default.revisionId)) {
                        _context23.next = 5;
                        break;
                      }
                      log_default.error("cross_page_history_revision_edit_warning");
                      return _context23.abrupt("return");
                    case 5:
                      if (!isOtherPage) {
                        _context23.next = 11;
                        break;
                      }
                      _context23.next = 8;
                      return wiki_default.getLatestRevisionIdForPage(targetPageName);
                    case 8:
                      _context23.t0 = _context23.sent;
                      _context23.next = 12;
                      break;
                    case 11:
                      _context23.t0 = constants_default.revisionId;
                    case 12:
                      revisionId2 = _context23.t0;
                      _context23.next = 15;
                      return getPage({
                        revisionId: revisionId2,
                        title: targetPageName
                      });
                    case 15:
                      page = _context23.sent;
                      customSummary = settings_default.getSetting("defaultSummary", {
                        sectionName,
                        sectionNumber,
                        sectionTargetName: targetPageName
                      });
                      summary = customSummary || (sectionName ? "/* ".concat(sectionName, " */ ").concat(i18n_default.translate("default_summary_suffix")) : i18n_default.translate("default_summary_suffix"));
                      timer = setTimeout(function() {
                        notification_default.success(i18n_default.translate("loading"));
                      }, 200);
                      _context23.next = 21;
                      return page.getWikiText({
                        section: sectionNumber
                      });
                    case 21:
                      sectionContent = _context23.sent;
                      isEditHistoryRevision = !isOtherPage && constants_default.latestRevisionId !== constants_default.revisionId;
                      escToExit = settings_default.getSetting("esc_to_exit_quickedit") === true || // 兼容老设置key
                      settings_default.getSetting("esc_to_exit_quickedit") === "true" || settings_default.getSetting("escToExitQuickEdit") === true || settings_default.getSetting("escToExitQuickEdit") === "true";
                      customEditTags = settings_default.getSetting("custom_edit_tags");
                      defaultEditTags = [];
                      editTags = customEditTags !== null && customEditTags !== void 0 && customEditTags.length ? customEditTags : defaultEditTags;
                      clearTimeout(timer);
                      notification_default.empty();
                      if (isEditHistoryRevision) {
                        notification_default.warning(i18n_default.translate("history_edit_warning"));
                      }
                      shouldShowCreatePageTip = isOtherPage ? !revisionId2 : isCurrentPageEmpty;
                      ui_default.showQuickEditPanel({
                        title: "".concat(i18n_default.translate("quickedit_topbtn")).concat(isEditHistoryRevision ? i18n_default.translate("history_edit_warning") : ""),
                        content: shouldShowCreatePageTip ? i18n_default.translate("create_page_tip") : sectionContent,
                        summary,
                        onBack: ui_default.hideQuickEditPanel,
                        onParse: function onParse(wikiText) {
                          return page.parseWikiText(wikiText);
                        },
                        onEdit: function() {
                          var _onEdit = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee22(_ref20) {
                            var content, summary2, isMinorEdit, editPayload;
                            return _regeneratorRuntime().wrap(function _callee22$(_context22) {
                              while (1) switch (_context22.prev = _context22.next) {
                                case 0:
                                  content = _ref20.content, summary2 = _ref20.summary, isMinorEdit = _ref20.isMinorEdit;
                                  editPayload = {
                                    content,
                                    config: _objectSpread(_objectSpread({
                                      summary: summary2
                                    }, sectionNumber === -1 ? {} : {
                                      section: sectionNumber
                                    }), editTags.length ? {
                                      tags: editTags.join("|")
                                    } : {})
                                  };
                                  if (isMinorEdit) {
                                    editPayload.config.minor = "true";
                                  } else {
                                    editPayload.config.notminor = "true";
                                  }
                                  _context22.next = 5;
                                  return page.edit(editPayload);
                                case 5:
                                case "end":
                                  return _context22.stop();
                              }
                            }, _callee22);
                          }));
                          function onEdit(_x8) {
                            return _onEdit.apply(this, arguments);
                          }
                          return onEdit;
                        }(),
                        escExit: escToExit
                      });
                    case 32:
                    case "end":
                      return _context23.stop();
                  }
                }, _callee23);
              }));
              return function handleQuickEditButtonClicked2() {
                return _ref18.apply(this, arguments);
              };
            }();
            handleSimpleRedirectButtonClicked = /* @__PURE__ */ function() {
              var _ref21 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee25() {
                return _regeneratorRuntime().wrap(function _callee25$(_context25) {
                  while (1) switch (_context25.prev = _context25.next) {
                    case 0:
                      ui_default.showSimpleRedirectPanel({
                        onEdit: function() {
                          var _onEdit2 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee24(_ref22) {
                            var title, summary, _ref22$forceOverwrite, forceOverwrite, page, currentPageName2, contentmodel, content, payload;
                            return _regeneratorRuntime().wrap(function _callee24$(_context24) {
                              while (1) switch (_context24.prev = _context24.next) {
                                case 0:
                                  title = _ref22.title, summary = _ref22.summary, _ref22$forceOverwrite = _ref22.forceOverwrite, forceOverwrite = _ref22$forceOverwrite === void 0 ? false : _ref22$forceOverwrite;
                                  _context24.next = 3;
                                  return getPage({
                                    title
                                  });
                                case 3:
                                  page = _context24.sent;
                                  currentPageName2 = constants_default.currentPageName;
                                  contentmodel = page.contentmodel;
                                  if (summary == "") {
                                    summary = i18n_default.translate("redirect_from_summary", [title, currentPageName2]);
                                  }
                                  content = function() {
                                    var content2;
                                    switch (contentmodel) {
                                      case "javascript":
                                        content2 = '/* #REDIRECT */mw.loader.load("'.concat(location.protocol, "//").concat(location.host).concat(constants_default.scriptPath, "/index.php?title=").concat(mw.util.wikiUrlencode(currentPageName2), '&action=raw&ctype=text/javascript");');
                                        break;
                                      case "css":
                                        content2 = "/* #REDIRECT */@import url(".concat(location.protocol, "//").concat(location.host).concat(constants_default.scriptPath, "/index.php?title=").concat(mw.util.wikiUrlencode(currentPageName2), "&action=raw&ctype=text/css);");
                                        break;
                                      case "Scribunto":
                                        content2 = "return require [[".concat(currentPageName2, "]]");
                                        break;
                                      case "wikitext":
                                      default:
                                        content2 = "#REDIRECT [[".concat(currentPageName2, "]]");
                                        break;
                                    }
                                    return content2;
                                  }();
                                  payload = {
                                    content,
                                    config: {
                                      summary
                                    }
                                  };
                                  if (!forceOverwrite) {
                                    payload.config.createonly = "true";
                                  }
                                  _context24.next = 12;
                                  return page.edit(payload);
                                case 12:
                                case "end":
                                  return _context24.stop();
                              }
                            }, _callee24);
                          }));
                          function onEdit(_x9) {
                            return _onEdit2.apply(this, arguments);
                          }
                          return onEdit;
                        }(),
                        onSuccess: function onSuccess(_ref23) {
                          var title = _ref23.title;
                          location.href = constants_default.articlePath.replace(/\$1/gi, title);
                        }
                      });
                    case 1:
                    case "end":
                      return _context25.stop();
                  }
                }, _callee25);
              }));
              return function handleSimpleRedirectButtonClicked2() {
                return _ref21.apply(this, arguments);
              };
            }();
            handleSettingsButtonClicked = /* @__PURE__ */ function() {
              var _ref24 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee26() {
                return _regeneratorRuntime().wrap(function _callee26$(_context26) {
                  while (1) switch (_context26.prev = _context26.next) {
                    case 0:
                      ui_default.showSettingsPanel({
                        onSubmit: function onSubmit(_ref25) {
                          var settings = _ref25.settings;
                          JSON.parse(settings);
                          localStorage.setItem("Wikiplus_Settings", settings);
                        }
                      });
                    case 1:
                    case "end":
                      return _context26.stop();
                  }
                }, _callee26);
              }));
              return function handleSettingsButtonClicked2() {
                return _ref24.apply(this, arguments);
              };
            }();
            handlePreload = /* @__PURE__ */ function() {
              var _ref27 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee27(_ref26) {
                var sectionNumber;
                return _regeneratorRuntime().wrap(function _callee27$(_context27) {
                  while (1) switch (_context27.prev = _context27.next) {
                    case 0:
                      sectionNumber = _ref26.sectionNumber;
                      _context27.next = 3;
                      return currentPage.getWikiText({
                        section: sectionNumber
                      });
                    case 3:
                    case "end":
                      return _context27.stop();
                  }
                }, _callee27);
              }));
              return function handlePreload2(_x10) {
                return _ref27.apply(this, arguments);
              };
            }();
            ui_default.insertTopQuickEditEntry(handleQuickEditButtonClicked);
            ui_default.insertSectionQuickEditEntries(handleQuickEditButtonClicked);
            ui_default.insertLinkEditEntries(handleQuickEditButtonClicked);
            ui_default.insertSimpleRedirectButton(handleSimpleRedirectButtonClicked);
            ui_default.insertSettingsPanelButton(handleSettingsButtonClicked);
            ui_default.bindPreloadEvents(handlePreload);
          case 30:
          case "end":
            return _context28.stop();
        }
      }, _callee28);
    })));
  }
});
//! src/Wikiplus/resize.ts
var resize_exports = {};
var init_resize = __esm2({
  "src/Wikiplus/resize.ts": function src_Wikiplus_resizeTs() {
    "use strict";
    void _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee29() {
      var $body;
      return _regeneratorRuntime().wrap(function _callee29$(_context29) {
        while (1) switch (_context29.prev = _context29.next) {
          case 0:
            _context29.next = 2;
            return new Promise(function(resolve) {
              if (document.readyState !== "loading") {
                resolve();
              } else {
                document.addEventListener("DOMContentLoaded", function() {
                  return resolve();
                }, {
                  once: true
                });
              }
            });
          case 2:
            $body = $("body");
            $(window).on("resize", function() {
              var windowWidth = $(window).width();
              var $wikiplusInterbox = $body.find(".Wikiplus-InterBox");
              if ($wikiplusInterbox) {
                $wikiplusInterbox.css("max-width", "calc(".concat(windowWidth, "px - 2em)"));
              }
            });
          case 4:
          case "end":
            return _context29.stop();
        }
      }, _callee29);
    }))();
  }
});
//! src/Wikiplus/Wikiplus.ts
(function Wikiplus() {
  var _mw$config$get = mw.config.get(), wgAction = _mw$config$get.wgAction, wgIsArticle = _mw$config$get.wgIsArticle;
  if (wgAction !== "view" || !wgIsArticle) {
    return;
  }
  var loader = /* @__PURE__ */ function() {
    var _ref29 = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee30() {
      var _mw$user$options$get, isVeEnable;
      return _regeneratorRuntime().wrap(function _callee30$(_context30) {
        while (1) switch (_context30.prev = _context30.next) {
          case 0:
            _mw$user$options$get = mw.user.options.get(), isVeEnable = _mw$user$options$get["visualeditor-enable"];
            if (!isVeEnable) {
              _context30.next = 4;
              break;
            }
            _context30.next = 4;
            return mw.loader.using("ext.visualEditor.core");
          case 4:
            _context30.next = 6;
            return Promise.resolve().then(function() {
              return init_modules(), modules_exports;
            });
          case 6:
            _context30.next = 8;
            return Promise.resolve().then(function() {
              return init_resize(), resize_exports;
            });
          case 8:
          case "end":
            return _context30.stop();
        }
      }, _callee30);
    }));
    return function loader2() {
      return _ref29.apply(this, arguments);
    };
  }();
  void loader();
})();

})();

/* </nowiki> */

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RoaXMtbnVtYmVyLXZhbHVlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZXBsYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9Eb2N1bWVudEZyYWdtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmFwcGVuZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9mZXRjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL3JlcXVlc3RBbmltYXRpb25GcmFtZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvV2ViQW5pbWF0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRWxlbWVudC5wcm90b3R5cGUuYWZ0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0NoYXJhY3RlckRhdGEucHJvdG90eXBlLmFmdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FbGVtZW50LnByb3RvdHlwZS5iZWZvcmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0NoYXJhY3RlckRhdGEucHJvdG90eXBlLmJlZm9yZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1qc29uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbmQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmVudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLW5vZGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYWZlLWdldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3F1ZXVlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtaW9zLXBlYmJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLXdlYm9zLXdlYmtpdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuc3RpY2t5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1wdW55Y29kZS10by1hc2NpaS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwudG8tanNvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5zaXplLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2NvbnN0YW50cy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9yZXF1ZXN0cy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9pMThuLXpoLWNuLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2kxOG4uanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvdXRpbHMvbG9nLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3NlcnZpY2VzL3dpa2kuanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvY29yZS9wYWdlLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL2NvcmUvbm90aWZpY2F0aW9uLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL3NsZWVwLmpzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL3V0aWxzL2hlbHBlcnMuanMiLCAic3JjL1dpa2lwbHVzL21vZHVsZXMvY29yZS91aS5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy91dGlscy9zZXR0aW5ncy5qcyIsICJzcmMvV2lraXBsdXMvbW9kdWxlcy93aWtpcGx1cy5sZXNzIiwgInNyYy9XaWtpcGx1cy9tb2R1bGVzL2luZGV4LmpzIiwgInNyYy9XaWtpcGx1cy9yZXNpemUudHMiLCAic3JjL1dpa2lwbHVzL1dpa2lwbHVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmXG4gICFTeW1ib2wuc2hhbSAmJlxuICB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDEuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDEuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtYXNzaWdubWVudCAtLSBhdm9pZCBtZW1vcnkgbGVha1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsO1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKHRhcmdldCAmJiAhU1RBVElDKSB0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0ICYmICFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBbXSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsVGhpcy5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWxUaGlzLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWxUaGlzIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kLCBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbiIsICIvLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cbid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xuXG52YXIgTmF0aXZlU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIG9rXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhTeW1ib2xXcmFwcGVyLCBOYXRpdmVTeW1ib2wpO1xuICBTeW1ib2xXcmFwcGVyLnByb3RvdHlwZSA9IFN5bWJvbFByb3RvdHlwZTtcbiAgU3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgTkFUSVZFX1NZTUJPTCA9IFN0cmluZyhOYXRpdmVTeW1ib2woJ2Rlc2NyaXB0aW9uIGRldGVjdGlvbicpKSA9PT0gJ1N5bWJvbChkZXNjcmlwdGlvbiBkZXRlY3Rpb24pJztcbiAgdmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mKTtcbiAgdmFyIHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgdmFyIHJlZ2V4cCA9IC9eU3ltYm9sXFwoKC4qKVxcKVteKV0rJC87XG4gIHZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG4gIHZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHRoaXMpO1xuICAgICAgaWYgKGhhc093bihFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUsIHN5bWJvbCkpIHJldHVybiAnJztcbiAgICAgIHZhciBzdHJpbmcgPSBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyhzeW1ib2wpO1xuICAgICAgdmFyIGRlc2MgPSBOQVRJVkVfU1lNQk9MID8gc3RyaW5nU2xpY2Uoc3RyaW5nLCA3LCAtMSkgOiByZXBsYWNlKHN0cmluZywgcmVnZXhwLCAnJDEnKTtcbiAgICAgIHJldHVybiBkZXNjID09PSAnJyA/IHVuZGVmaW5lZCA6IGRlc2M7XG4gICAgfVxuICB9KTtcblxuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmRleG9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSW5kZXhPZiA9IHVuY3VycnlUaGlzKFtdLmluZGV4T2YpO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gbmF0aXZlSW5kZXhPZihbMV0sIDEsIC0wKSA8IDA7XG52YXIgRk9SQ0VEID0gTkVHQVRJVkVfWkVSTyB8fCAhYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHZhciBmcm9tSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgbmF0aXZlU2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZShPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgYW5PYmplY3QodGhpcyk7XG4gIGlmIChoaW50ID09PSAnc3RyaW5nJyB8fCBoaW50ID09PSAnZGVmYXVsdCcpIGhpbnQgPSAnc3RyaW5nJztcbiAgZWxzZSBpZiAoaGludCAhPT0gJ251bWJlcicpIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZSh0aGlzLCBoaW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkYXRlVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmlmICghaGFzT3duKERhdGVQcm90b3R5cGUsIFRPX1BSSU1JVElWRSkpIHtcbiAgZGVmaW5lQnVpbHRJbihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGRhdGVUb1ByaW1pdGl2ZSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBJVEVSQVRPUl9IRUxQRVIgPSAnSXRlcmF0b3JIZWxwZXInO1xudmFyIFdSQVBfRk9SX1ZBTElEX0lURVJBVE9SID0gJ1dyYXBGb3JWYWxpZEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG5cbnZhciBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlID0gZnVuY3Rpb24gKElTX0lURVJBVE9SKSB7XG4gIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoSVNfSVRFUkFUT1IgPyBXUkFQX0ZPUl9WQUxJRF9JVEVSQVRPUiA6IElURVJBVE9SX0hFTFBFUik7XG5cbiAgcmV0dXJuIGRlZmluZUJ1aWx0SW5zKGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSksIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgIC8vIGZvciBzaW1wbGlmaWNhdGlvbjpcbiAgICAgIC8vICAgZm9yIGAlV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG9yIHdpdGggYHN0YXRlLnJldHVybkhhbmRsZXJSZXN1bHRgIG91ciBgbmV4dEhhbmRsZXJgIHJldHVybnMgYEl0ZXJSZXN1bHRPYmplY3RgXG4gICAgICAvLyAgIGZvciBgJUl0ZXJhdG9ySGVscGVyUHJvdG90eXBlJS5uZXh0YCAtIGp1c3QgYSB2YWx1ZVxuICAgICAgaWYgKElTX0lURVJBVE9SKSByZXR1cm4gc3RhdGUubmV4dEhhbmRsZXIoKTtcbiAgICAgIGlmIChzdGF0ZS5kb25lKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHN0YXRlLm5leHRIYW5kbGVyKCk7XG4gICAgICAgIHJldHVybiBzdGF0ZS5yZXR1cm5IYW5kbGVyUmVzdWx0ID8gcmVzdWx0IDogY3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIHN0YXRlLmRvbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcbiAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHJldHVybk1ldGhvZCA/IGNhbGwocmV0dXJuTWV0aG9kLCBpdGVyYXRvcikgOiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuaW5uZXIpIHRyeSB7XG4gICAgICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUuaW5uZXIuaXRlcmF0b3IsICdub3JtYWwnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBXcmFwRm9yVmFsaWRJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHlQcm90b3R5cGUodHJ1ZSk7XG52YXIgSXRlcmF0b3JIZWxwZXJQcm90b3R5cGUgPSBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlKGZhbHNlKTtcblxuY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9ySGVscGVyUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCAnSXRlcmF0b3IgSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5leHRIYW5kbGVyLCBJU19JVEVSQVRPUiwgUkVUVVJOX0hBTkRMRVJfUkVTVUxUKSB7XG4gIHZhciBJdGVyYXRvclByb3h5ID0gZnVuY3Rpb24gSXRlcmF0b3IocmVjb3JkLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgc3RhdGUuaXRlcmF0b3IgPSByZWNvcmQuaXRlcmF0b3I7XG4gICAgICBzdGF0ZS5uZXh0ID0gcmVjb3JkLm5leHQ7XG4gICAgfSBlbHNlIHN0YXRlID0gcmVjb3JkO1xuICAgIHN0YXRlLnR5cGUgPSBJU19JVEVSQVRPUiA/IFdSQVBfRk9SX1ZBTElEX0lURVJBVE9SIDogSVRFUkFUT1JfSEVMUEVSO1xuICAgIHN0YXRlLnJldHVybkhhbmRsZXJSZXN1bHQgPSAhIVJFVFVSTl9IQU5ETEVSX1JFU1VMVDtcbiAgICBzdGF0ZS5uZXh0SGFuZGxlciA9IG5leHRIYW5kbGVyO1xuICAgIHN0YXRlLmNvdW50ZXIgPSAwO1xuICAgIHN0YXRlLmRvbmUgPSBmYWxzZTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHN0YXRlKTtcbiAgfTtcblxuICBJdGVyYXRvclByb3h5LnByb3RvdHlwZSA9IElTX0lURVJBVE9SID8gV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUgOiBJdGVyYXRvckhlbHBlclByb3RvdHlwZTtcblxuICByZXR1cm4gSXRlcmF0b3JQcm94eTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoKSB7XG4gIHZhciBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7XG4gIHZhciBwcmVkaWNhdGUgPSB0aGlzLnByZWRpY2F0ZTtcbiAgdmFyIG5leHQgPSB0aGlzLm5leHQ7XG4gIHZhciByZXN1bHQsIGRvbmUsIHZhbHVlO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHJlc3VsdCA9IGFuT2JqZWN0KGNhbGwobmV4dCwgaXRlcmF0b3IpKTtcbiAgICBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgIGlmIChjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBwcmVkaWNhdGUsIFt2YWx1ZSwgdGhpcy5jb3VudGVyKytdLCB0cnVlKSkgcmV0dXJuIHZhbHVlO1xuICB9XG59KTtcblxuLy8gYEl0ZXJhdG9yLnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pdGVyYXRvci5wcm90b3R5cGUuZmlsdGVyXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKHByZWRpY2F0ZSk7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KGdldEl0ZXJhdG9yRGlyZWN0KHRoaXMpLCB7XG4gICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZVxuICAgIH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yLnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUoZm4pO1xuICAgIHZhciByZWNvcmQgPSBnZXRJdGVyYXRvckRpcmVjdCh0aGlzKTtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgaXRlcmF0ZShyZWNvcmQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgZm4odmFsdWUsIGNvdW50ZXIrKyk7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Bvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNQb3NzaWJsZVByb3RvdHlwZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgcmVxdWlyZU9iamVjdENvZXJjaWJsZShPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmICghaXNPYmplY3QoTykpIHJldHVybiBPO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gbWFrZXMgc3ViY2xhc3Npbmcgd29yayBjb3JyZWN0IGZvciB3cmFwcGVkIGJ1aWx0LWluc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJHRoaXMsIGR1bW15LCBXcmFwcGVyKSB7XG4gIHZhciBOZXdUYXJnZXQsIE5ld1RhcmdldFByb3RvdHlwZTtcbiAgaWYgKFxuICAgIC8vIGl0IGNhbiB3b3JrIG9ubHkgd2l0aCBuYXRpdmUgYHNldFByb3RvdHlwZU9mYFxuICAgIHNldFByb3RvdHlwZU9mICYmXG4gICAgLy8gd2UgaGF2ZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QgcHJlLUVTNiB3YXkgZm9yIGdldHRpbmcgYG5ldy50YXJnZXRgLCBzbyB1c2UgdGhpc1xuICAgIGlzQ2FsbGFibGUoTmV3VGFyZ2V0ID0gZHVtbXkuY29uc3RydWN0b3IpICYmXG4gICAgTmV3VGFyZ2V0ICE9PSBXcmFwcGVyICYmXG4gICAgaXNPYmplY3QoTmV3VGFyZ2V0UHJvdG90eXBlID0gTmV3VGFyZ2V0LnByb3RvdHlwZSkgJiZcbiAgICBOZXdUYXJnZXRQcm90b3R5cGUgIT09IFdyYXBwZXIucHJvdG90eXBlXG4gICkgc2V0UHJvdG90eXBlT2YoJHRoaXMsIE5ld1RhcmdldFByb3RvdHlwZSk7XG4gIHJldHVybiAkdGhpcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFRoaXNbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBDb25zdHJ1Y3RvciA9IE5hdGl2ZUNvbnN0cnVjdG9yO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciB1bmN1cnJpZWROYXRpdmVNZXRob2QgPSB1bmN1cnJ5VGhpcyhOYXRpdmVQcm90b3R5cGVbS0VZXSk7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm90b3R5cGUsIEtFWSxcbiAgICAgIEtFWSA9PT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIHZhbHVlID09PSAwID8gMCA6IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IDogS0VZID09PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IHVuZGVmaW5lZCA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgdmFyIFJFUExBQ0UgPSBpc0ZvcmNlZChcbiAgICBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKSB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7XG4gICAgfSkpXG4gICk7XG5cbiAgaWYgKFJFUExBQ0UpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSBpZiAoaXNGb3JjZWQoQ09OU1RSVUNUT1JfTkFNRSwgdHJ1ZSkpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9IGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGl0ZXJhYmxlKTsgfSk7XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcblxuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChkdW1teSwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgTmF0aXZlUHJvdG90eXBlKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgTmF0aXZlQ29uc3RydWN0b3IoKSwgZHVtbXksIENvbnN0cnVjdG9yKTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE5hdGl2ZVByb3RvdHlwZTtcbiAgICAgIE5hdGl2ZVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cblxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuXG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBOYXRpdmVQcm90b3R5cGUuY2xlYXIpIGRlbGV0ZSBOYXRpdmVQcm90b3R5cGUuY2xlYXI7XG4gIH1cblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBDb25zdHJ1Y3RvciAhPT0gTmF0aXZlQ29uc3RydWN0b3IgfSwgZXhwb3J0ZWQpO1xuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICBsYXN0OiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gbnVsbDtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gbnVsbDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGB0aGlzTnVtYmVyVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10aGlzbnVtYmVydmFsdWVcbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoMS4wLnZhbHVlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsVGhpc1tOVU1CRVJdO1xudmFyIFB1cmVOdW1iZXJOYW1lc3BhY2UgPSBwYXRoW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG5cbi8vIGBUb051bWVyaWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWVyaWNcbnZhciB0b051bWVyaWMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByaW1WYWx1ZSA9IHRvUHJpbWl0aXZlKHZhbHVlLCAnbnVtYmVyJyk7XG4gIHJldHVybiB0eXBlb2YgcHJpbVZhbHVlID09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBudW1iZXInKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSB0cmltKGl0KTtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoaXQsIDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGNoYXJDb2RlQXQoaXQsIDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoY2hhckNvZGVBdChpdCwgMSkpIHtcbiAgICAgICAgLy8gZmFzdCBlcXVhbCBvZiAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICByYWRpeCA9IDI7XG4gICAgICAgICAgbWF4Q29kZSA9IDQ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBmYXN0IGVxdWFsIG9mIC9eMG9bMC03XSskL2lcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgcmFkaXggPSA4O1xuICAgICAgICAgIG1heENvZGUgPSA1NTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gc3RyaW5nU2xpY2UoaXQsIDIpO1xuICAgICAgbGVuZ3RoID0gZGlnaXRzLmxlbmd0aDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb2RlID0gY2hhckNvZGVBdChkaWdpdHMsIGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSk7XG5cbnZhciBjYWxsZWRXaXRoTmV3ID0gZnVuY3Rpb24gKGR1bW15KSB7XG4gIC8vIGluY2x1ZGVzIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICByZXR1cm4gaXNQcm90b3R5cGVPZihOdW1iZXJQcm90b3R5cGUsIGR1bW15KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IHRoaXNOdW1iZXJWYWx1ZShkdW1teSk7IH0pO1xufTtcblxuLy8gYE51bWJlcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLWNvbnN0cnVjdG9yXG52YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgcmV0dXJuIGNhbGxlZFdpdGhOZXcodGhpcykgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIHRoaXMsIE51bWJlcldyYXBwZXIpIDogbjtcbn07XG5cbk51bWJlcldyYXBwZXIucHJvdG90eXBlID0gTnVtYmVyUHJvdG90eXBlO1xuaWYgKEZPUkNFRCAmJiAhSVNfUFVSRSkgTnVtYmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTnVtYmVyV3JhcHBlcjtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgTnVtYmVyOiBOdW1iZXJXcmFwcGVyXG59KTtcblxuLy8gVXNlIGBpbnRlcm5hbC9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXNgIGhlbHBlciBpbiBgY29yZS1qc0A0YFxudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04sTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLHBhcnNlRmxvYXQscGFyc2VJbnQsJyArXG4gICAgLy8gRVNOZXh0XG4gICAgJ2Zyb21TdHJpbmcscmFuZ2UnXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG5cbmlmIChJU19QVVJFICYmIFB1cmVOdW1iZXJOYW1lc3BhY2UpIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMocGF0aFtOVU1CRVJdLCBQdXJlTnVtYmVyTmFtZXNwYWNlKTtcbmlmIChGT1JDRUQgfHwgSVNfUFVSRSkgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhwYXRoW05VTUJFUl0sIE5hdGl2ZU51bWJlcik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoQywgYXJnc0xlbmd0aCwgYXJncykge1xuICBpZiAoIWhhc093bihmYWN0b3JpZXMsIGFyZ3NMZW5ndGgpKSB7XG4gICAgdmFyIGxpc3QgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSAkRnVuY3Rpb24oJ0MsYScsICdyZXR1cm4gbmV3IEMoJyArIGpvaW4obGlzdCwgJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1thcmdzTGVuZ3RoXShDLCBhcmdzKTtcbn07XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gJEZ1bmN0aW9uLmJpbmQgOiBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBGID0gYUNhbGxhYmxlKHRoaXMpO1xuICB2YXIgUHJvdG90eXBlID0gRi5wcm90b3R5cGU7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBmdW5jdGlvbiBib3VuZCgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBjb25jYXQocGFydEFyZ3MsIGFycmF5U2xpY2UoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZEZ1bmN0aW9uID8gY29uc3RydWN0KEYsIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IEYuYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChQcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IFByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYFJlZmxlY3QuY29uc3RydWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5jb25zdHJ1Y3Rcbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgYXBwbHkocHVzaCwgJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYXBwbHkoYmluZCwgVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0UHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gYXBwbHkoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5oYXNJbmRpY2VzKSByZXN1bHQgKz0gJ2QnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC51bmljb2RlU2V0cykgcmVzdWx0ICs9ICd2JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT09IG51bGw7XG59KTtcblxuLy8gVUMgQnJvd3NlciBidWdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMDA4XG52YXIgTUlTU0VEX1NUSUNLWSA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISRSZWdFeHAoJ2EnLCAneScpLnN0aWNreTtcbn0pO1xuXG52YXIgQlJPS0VOX0NBUkVUID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSAkUmVnRXhwKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT09IG51bGw7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJST0tFTl9DQVJFVDogQlJPS0VOX0NBUkVULFxuICBNSVNTRURfU1RJQ0tZOiBNSVNTRURfU1RJQ0tZLFxuICBVTlNVUFBPUlRFRF9ZOiBVTlNVUFBPUlRFRF9ZXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcuJywgJ3MnKTtcbiAgcmV0dXJuICEocmUuZG90QWxsICYmIHJlLnRlc3QoJ1xcbicpICYmIHJlLmZsYWdzID09PSAncycpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgLyguPyk/L1xuICAgICAgY2FsbChuYXRpdmVSZXBsYWNlLCBtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsICJcbi8vIF9ET01Ub2tlbkxpc3Rcbi8qXG5Db3B5cmlnaHQgKGMpIDIwMTYsIEpvaG4gR2FyZG5lclxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qL1xudmFyIF9ET01Ub2tlbkxpc3QgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0dmFyIGRwU3VwcG9ydCA9IHRydWU7XG5cdHZhciBkZWZpbmVHZXR0ZXIgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBmbiwgY29uZmlndXJhYmxlKSB7XG5cdFx0aWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSA9PT0gZHBTdXBwb3J0ID8gdHJ1ZSA6ICEhY29uZmlndXJhYmxlLFxuXHRcdFx0XHRnZXQ6IGZuXG5cdFx0XHR9KTtcblxuXHRcdGVsc2Ugb2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18obmFtZSwgZm4pO1xuXHR9O1xuXG5cdC8qKiBFbnN1cmUgdGhlIGJyb3dzZXIgYWxsb3dzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBiZSB1c2VkIG9uIG5hdGl2ZSBKYXZhU2NyaXB0IG9iamVjdHMuICovXG5cdHRyeSB7XG5cdFx0ZGVmaW5lR2V0dGVyKHt9LCBcInN1cHBvcnRcIik7XG5cdH1cblx0Y2F0Y2ggKGUpIHtcblx0XHRkcFN1cHBvcnQgPSBmYWxzZTtcblx0fVxuXG5cblx0dmFyIF9ET01Ub2tlbkxpc3QgPSBmdW5jdGlvbiAoZWwsIHByb3ApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dmFyIHRva2VucyA9IFtdO1xuXHRcdHZhciB0b2tlbk1hcCA9IHt9O1xuXHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdHZhciBtYXhMZW5ndGggPSAwO1xuXHRcdHZhciBhZGRJbmRleEdldHRlciA9IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgaSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwcmVvcCgpO1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zW2ldO1xuXHRcdFx0fSwgZmFsc2UpO1xuXG5cdFx0fTtcblx0XHR2YXIgcmVpbmRleCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0LyoqIERlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBhcnJheS1saWtlIGFjY2VzcyB0byB0aGUgdG9rZW5MaXN0J3MgY29udGVudHMuICovXG5cdFx0XHRpZiAobGVuZ3RoID49IG1heExlbmd0aClcblx0XHRcdFx0Zm9yICg7IG1heExlbmd0aCA8IGxlbmd0aDsgKyttYXhMZW5ndGgpIHtcblx0XHRcdFx0XHRhZGRJbmRleEdldHRlcihtYXhMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNsYXNzIG1ldGhvZC4gSW50ZXJuYWwgdXNlIG9ubHkuICovXG5cdFx0dmFyIHByZW9wID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGVycm9yO1xuXHRcdFx0dmFyIGk7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciByU3BhY2UgPSAvXFxzKy87XG5cblx0XHRcdC8qKiBWYWxpZGF0ZSB0aGUgdG9rZW4vcyBwYXNzZWQgdG8gYW4gaW5zdGFuY2UgbWV0aG9kLCBpZiBhbnkuICovXG5cdFx0XHRpZiAoYXJncy5sZW5ndGgpXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRcdGlmIChyU3BhY2UudGVzdChhcmdzW2ldKSkge1xuXHRcdFx0XHRcdFx0ZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyBcIicgKyBhcmdzW2ldICsgJ1wiICcgKyBcImNvbnRhaW5zXCIgKyAnIGFuIGludmFsaWQgY2hhcmFjdGVyJyk7XG5cdFx0XHRcdFx0XHRlcnJvci5jb2RlID0gNTtcblx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSBcIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdC8qKiBTcGxpdCB0aGUgbmV3IHZhbHVlIGFwYXJ0IGJ5IHdoaXRlc3BhY2UqL1xuXHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdLmJhc2VWYWwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKS5zcGxpdChyU3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQXZvaWQgdHJlYXRpbmcgYmxhbmsgc3RyaW5ncyBhcyBzaW5nbGUtaXRlbSB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0aWYgKFwiXCIgPT09IHRva2Vuc1swXSkgdG9rZW5zID0gW107XG5cblx0XHRcdC8qKiBSZXBvcHVsYXRlIHRoZSBpbnRlcm5hbCB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0dG9rZW5NYXAgPSB7fTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdHRva2VuTWFwW3Rva2Vuc1tpXV0gPSB0cnVlO1xuXHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aDtcblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0LyoqIFBvcHVsYXRlIG91ciBpbnRlcm5hbCB0b2tlbiBsaXN0IGlmIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIHN1YmplY3QgZWxlbWVudCBpc24ndCBlbXB0eS4gKi9cblx0XHRwcmVvcCgpO1xuXG5cdFx0LyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgdW5kZXJseWluZyBzdHJpbmcuIFJlYWQtb25seS4gKi9cblx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgXCJsZW5ndGhcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiBsZW5ndGg7XG5cdFx0fSk7XG5cblx0XHQvKiogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdG9TdHJpbmcvdG9Mb2NhbGVTdHJpbmcgbWV0aG9kcyB0byByZXR1cm4gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0b2tlbnMgd2hlbiB0eXBlY2FzdC4gKi9cblx0XHR0aGF0LnRvTG9jYWxlU3RyaW5nID1cblx0XHRcdHRoYXQudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9O1xuXG5cdFx0dGhhdC5pdGVtID0gZnVuY3Rpb24gKGlkeCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiB0b2tlbnNbaWR4XTtcblx0XHR9O1xuXG5cdFx0dGhhdC5jb250YWlucyA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiAhIXRva2VuTWFwW3Rva2VuXTtcblx0XHR9O1xuXG5cdFx0dGhhdC5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0Zm9yICh2YXIgYXJncywgdG9rZW4sIGkgPSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcblx0XHRcdFx0dG9rZW4gPSBhcmdzW2ldO1xuXHRcdFx0XHRpZiAoIXRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHR0b2tlbk1hcFt0b2tlbl0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudCBpZiB0aGUgdG9rZW4gbGlzdCdzIGNoYW5nZWQuICovXG5cdFx0XHRpZiAobGVuZ3RoICE9PSB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGxlbmd0aCA9IHRva2Vucy5sZW5ndGggPj4+IDA7XG5cdFx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRlbFtwcm9wXS5iYXNlVmFsID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlaW5kZXgoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhhdC5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0LyoqIEJ1aWxkIGEgaGFzaCBvZiB0b2tlbiBuYW1lcyB0byBjb21wYXJlIGFnYWluc3Qgd2hlbiByZWNvbGxlY3Rpbmcgb3VyIHRva2VuIGxpc3QuICovXG5cdFx0XHRmb3IgKHZhciBhcmdzLCBpZ25vcmUgPSB7fSwgaSA9IDAsIHQgPSBbXTsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWdub3JlW2FyZ3NbaV1dID0gdHJ1ZTtcblx0XHRcdFx0ZGVsZXRlIHRva2VuTWFwW2FyZ3NbaV1dO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogUnVuIHRocm91Z2ggb3VyIHRva2VucyBsaXN0IGFuZCByZWFzc2lnbiBvbmx5IHRob3NlIHRoYXQgYXJlbid0IGRlZmluZWQgaW4gdGhlIGhhc2ggZGVjbGFyZWQgYWJvdmUuICovXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAoIWlnbm9yZVt0b2tlbnNbaV1dKSB0LnB1c2godG9rZW5zW2ldKTtcblxuXHRcdFx0dG9rZW5zID0gdDtcblx0XHRcdGxlbmd0aCA9IHQubGVuZ3RoID4+PiAwO1xuXG5cdFx0XHQvKiogVXBkYXRlIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIGF0dGFjaGVkIGVsZW1lbnQuICovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbFtwcm9wXSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH1cblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0dGhhdC50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBbdG9rZW5dKTtcblxuXHRcdFx0LyoqIFRva2VuIHN0YXRlJ3MgYmVpbmcgZm9yY2VkLiAqL1xuXHRcdFx0aWYgKHVuZGVmaW5lZCAhPT0gZm9yY2UpIHtcblx0XHRcdFx0aWYgKGZvcmNlKSB7XG5cdFx0XHRcdFx0dGhhdC5hZGQodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFRva2VuIGFscmVhZHkgZXhpc3RzIGluIHRva2VuTGlzdC4gUmVtb3ZlIGl0LCBhbmQgcmV0dXJuIEZBTFNFLiAqL1xuXHRcdFx0aWYgKHRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHR0aGF0LnJlbW92ZSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIE90aGVyd2lzZSwgYWRkIHRoZSB0b2tlbiBhbmQgcmV0dXJuIFRSVUUuICovXG5cdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0dGhhdC5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG5cblx0XHRyZXR1cm4gdGhhdDtcblx0fTtcblxuXHRyZXR1cm4gX0RPTVRva2VuTGlzdDtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfRE9NVG9rZW5MaXN0O1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZmdW5jdGlvbihlKXtyZXR1cm4hKFwiY2xhc3NMaXN0XCJpbiBlKXx8IWUuY2xhc3NMaXN0LnRvZ2dsZShcInhcIiwhMSkmJiFlLmNsYXNzTmFtZX0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIikpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3Rcbi8qIGdsb2JhbCBfRE9NVG9rZW5MaXN0ICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHR2YXIgbmF0aXZlSW1wbCA9IFwiRE9NVG9rZW5MaXN0XCIgaW4gZ2xvYmFsICYmIGdsb2JhbC5ET01Ub2tlbkxpc3Q7XG5cblx0aWYgKFxuXHRcdFx0IW5hdGl2ZUltcGwgfHxcblx0XHRcdChcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiZcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpICYmXG5cdFx0XHRcdCEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIikuY2xhc3NMaXN0IGluc3RhbmNlb2YgRE9NVG9rZW5MaXN0KVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdGdsb2JhbC5ET01Ub2tlbkxpc3QgPSBfRE9NVG9rZW5MaXN0O1xuXHR9XG5cblx0Ly8gQWRkIHNlY29uZCBhcmd1bWVudCB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnRvZ2dsZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QudG9nZ2xlKCd4JywgZmFsc2UpO1xuXHRcdGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoJ3gnKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUodG9rZW4gLyosIGZvcmNlKi8pIHtcblx0XHRcdHZhciBmb3JjZSA9IGFyZ3VtZW50c1sxXTtcblx0XHRcdGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBhZGQgPSAhdGhpcy5jb250YWlucyh0b2tlbik7XG5cdFx0XHRcdHRoaXNbYWRkID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYWRkO1xuXHRcdFx0fVxuXHRcdFx0Zm9yY2UgPSAhIWZvcmNlO1xuXHRcdFx0dGhpc1tmb3JjZSA/ICdhZGQnIDogJ3JlbW92ZSddKHRva2VuKTtcblx0XHRcdHJldHVybiBmb3JjZTtcblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5hZGQoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScsICdiJyk7XG5cdFx0aWYgKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLmFkZDtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5yZW1vdmUoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScpO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYicpO1xuXHRcdGUuY2xhc3NMaXN0LnJlbW92ZSgnYScsICdiJyk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygnYicpKSByZXR1cm47XG5cdFx0dmFyIG5hdGl2ZSA9IGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmU7XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bmF0aXZlLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpKTtcblxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlcGxhY2VcImluKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuY2xhc3NMaXN0fHx7fSlcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVwbGFjZVxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblx0Y2xhc3NMaXN0ICYmIChjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlcGxhY2UgPVxuXHRcdGZ1bmN0aW9uICh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHRcdHZhciB0b2tlblN0cmluZyA9ICcnICsgdG9rZW4sIG5ld1Rva2VuU3RyaW5nID0gJycgKyBuZXdUb2tlbjtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bmV3IERPTUV4Y2VwdGlvbigpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHJldHVybiBuZXcgRE9NRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpO1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHRpZiAoISh0b2tlblN0cmluZyAmJiBuZXdUb2tlblN0cmluZykpIGVycm9yID0gJ1N5bnRheEVycm9yJztcblx0XHRcdGlmICghZXJyb3IgJiYgKC9cXHMvLnRlc3QodG9rZW5TdHJpbmcpIHx8IC9cXHMvLnRlc3QobmV3VG9rZW5TdHJpbmcpKSkgZXJyb3IgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblx0XHRcdGlmIChlcnJvcikgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRE9NVG9rZW5MaXN0LnJlcGxhY2Ugd2FzIHByb3ZpZGVkIHRva2VucyBcXCcnICsgdG9rZW5TdHJpbmcgKyAnXFwnIGFuZCBcXCcnICsgbmV3VG9rZW5TdHJpbmcgKyAnXFwnJywgZXJyb3IpO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW5TdHJpbmcpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vIHRva2Vuc1RvYmVNb3ZlZCBhcmUgXCJ0b2tlblN0cmluZ1wiIGFuZCBhbGwgdG9rZW5zIGZvdW5kIGFmdGVyIGl0XG5cdFx0XHR2YXIgdG9rZW5zVG9iZU1vdmVkID0gW107XG5cdFx0XHR2YXIgbmV3VG9rZW5Gb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAobmV3VG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgbmV3VG9rZW5Gb3VuZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIGJyZWFrO1xuXHRcdFx0Zm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB0b2tlbnNUb2JlTW92ZWQucHVzaCh0aGlzLml0ZW0oaSkpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vuc1RvYmVNb3ZlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFRva2VuID0gdG9rZW5zVG9iZU1vdmVkW2ldO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IG5ld1Rva2VuU3RyaW5nICYmIHRoaXMucmVtb3ZlKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gdG9rZW5TdHJpbmcgJiYgdGhpcy5hZGQoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuID09PSB0b2tlblN0cmluZyAmJiAhbmV3VG9rZW5Gb3VuZCAmJiAodGhpcy5yZW1vdmUobmV3VG9rZW5TdHJpbmcpLCB0aGlzLmFkZChuZXdUb2tlblN0cmluZykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHQpO1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50LCEwfWNhdGNoKG4pe3JldHVybiExfX0oKVxuKSkge1xuLy8gRG9jdW1lbnRGcmFnbWVudFxuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiBEb2N1bWVudEZyYWdtZW50KCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdH07XG5cblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRnbG9iYWwuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZyYWdtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSlcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiXG4vLyBfbXV0YXRpb25cbnZhciBfbXV0YXRpb24gPSAoZnVuY3Rpb24gKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cblx0ZnVuY3Rpb24gaXNOb2RlKG9iamVjdCkge1xuXHRcdC8vIERPTSwgTGV2ZWwyXG5cdFx0aWYgKHR5cGVvZiBOb2RlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgTm9kZTtcblx0XHR9XG5cdFx0Ly8gT2xkZXIgYnJvd3NlcnMsIGNoZWNrIGlmIGl0IGxvb2tzIGxpa2UgYSBOb2RlIGluc3RhbmNlKVxuXHRcdHJldHVybiBvYmplY3QgJiZcblx0XHRcdHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdG9iamVjdC5ub2RlTmFtZSAmJlxuXHRcdFx0b2JqZWN0Lm5vZGVUeXBlID49IDEgJiZcblx0XHRcdG9iamVjdC5ub2RlVHlwZSA8PSAxMjtcblx0fVxuXG5cdC8vIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNtdXRhdGlvbi1tZXRob2QtbWFjcm9cblx0cmV0dXJuIGZ1bmN0aW9uIG11dGF0aW9uKG5vZGVzKSB7XG5cdFx0aWYgKG5vZGVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIGlzTm9kZShub2Rlc1swXSkgPyBub2Rlc1swXSA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGVzWzBdICsgJycpO1xuXHRcdH1cblxuXHRcdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmcmFnbWVudC5hcHBlbmRDaGlsZChpc05vZGUobm9kZXNbaV0pID8gbm9kZXNbaV0gOiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1tpXSArICcnKSk7XG5cblx0XHR9XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9O1xufSgpKTtcbmV4cG9ydCBkZWZhdWx0IF9tdXRhdGlvbjtcbiIsICJpbXBvcnQgX211dGF0aW9uIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19tdXRhdGlvblwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJEb2N1bWVudEZyYWdtZW50XCJpbiBzZWxmJiZcImFwcGVuZFwiaW4gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGVcbikpIHtcbi8vIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmFwcGVuZFxuLyogZ2xvYmFsIF9tdXRhdGlvbiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0dmFyIGZyYWdtZW50UHJvdG8gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXHRmcmFnbWVudFByb3RvLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0XHR0aGlzLmFwcGVuZENoaWxkKF9tdXRhdGlvbihhcmd1bWVudHMpKTtcblx0fTtcblxuXHRnbG9iYWwuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKCkge1xuXHRcdHRoaXMuYXBwZW5kQ2hpbGQoX211dGF0aW9uKGFyZ3VtZW50cykpO1xuXHR9O1xufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX211dGF0aW9uIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19tdXRhdGlvblwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJFbGVtZW50XCJpbiBzZWxmJiZcImFwcGVuZFwiaW4gRWxlbWVudC5wcm90b3R5cGVcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZFxuLyogZ2xvYmFsIF9tdXRhdGlvbiAqL1xuRG9jdW1lbnQucHJvdG90eXBlLmFwcGVuZCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0dGhpcy5hcHBlbmRDaGlsZChfbXV0YXRpb24oYXJndW1lbnRzKSk7XG59O1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJmZXRjaFwiaW4gc2VsZiYmXCJSZXF1ZXN0XCJpbiBzZWxmJiZmdW5jdGlvbigpe3RyeXtyZXR1cm5cInNpZ25hbFwiaW4gbmV3IFJlcXVlc3QoXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBmZXRjaFxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLldIQVRXR0ZldGNoID0ge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGdsb2JhbCA9XG4gICAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAgICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKTtcblxuICB2YXIgc3VwcG9ydCA9IHtcbiAgICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6XG4gICAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3IEJsb2IoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG4gIH1cblxuICBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICAgIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICAgIF07XG5cbiAgICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICB9XG4gICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXTtcbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICAvKlxuICAgICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAgICovXG4gICAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZDtcbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keTtcbiAgICAgIGlmICghYm9keSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKTtcbiAgICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcyk7XG4gICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKTtcbiAgICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcyk7XG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbiAgdmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ107XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxuICB9XG5cbiAgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5O1xuXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgICB9XG4gICAgICB0aGlzLnVybCA9IGlucHV0LnVybDtcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFscztcbiAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2Q7XG4gICAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlO1xuICAgICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWw7XG4gICAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdDtcbiAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nO1xuICAgIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpO1xuICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbDtcbiAgICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsO1xuICAgIHRoaXMucmVmZXJyZXIgPSBudWxsO1xuXG4gICAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICAgIH1cbiAgICB0aGlzLl9pbml0Qm9keShib2R5KTtcblxuICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovO1xuICAgICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy87XG4gICAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbiAgfTtcblxuICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgYm9keVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KCcmJylcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gZm9ybVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gICAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gICAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJyk7XG4gICAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gICAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgICAgLnNwbGl0KCdcXHInKVxuICAgICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKTtcbiAgICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSk7XG5cbiAgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gICAgfVxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0JztcbiAgICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1cztcbiAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwO1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dDtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJyc7XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpO1xuICB9XG5cbiAgQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSk7XG5cbiAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICB1cmw6IHRoaXMudXJsXG4gICAgfSlcbiAgfTtcblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pO1xuICAgIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InO1xuICAgIHJldHVybiByZXNwb25zZVxuICB9O1xuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XTtcblxuICBSZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxuICB9O1xuXG4gIGV4cG9ydHMuRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH07XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGV4cG9ydHMuRE9NRXhjZXB0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBleHBvcnRzLkRPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH07XG5cbiAgICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpO1xuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG5cbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdCk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoLnBvbHlmaWxsID0gdHJ1ZTtcblxuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaDtcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzO1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlO1xuXG4gIGV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG4gIGV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgZXhwb3J0cy5mZXRjaCA9IGZldGNoO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX211dGF0aW9uIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19tdXRhdGlvblwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJFbGVtZW50XCJpbiBzZWxmJiZcInJlbW92ZVwiaW4gRWxlbWVudC5wcm90b3R5cGVcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZVxuRG9jdW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcblx0aWYgKHRoaXMucGFyZW50Tm9kZSkge1xuXHRcdHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcblx0fVxufTtcblxuLy8gTm90IGFsbCBVQXMgc3VwcG9ydCB0aGUgVGV4dCBjb25zdHJ1Y3Rvci4gIFBvbHlmaWxsIG9uIHRoZSBUZXh0IGNvbnN0cnVjdG9yIG9ubHkgd2hlcmUgaXQgZXhpc3RzXG4vLyBUT0RPOiBBZGQgYSBwb2x5ZmlsbCBmb3IgdGhlIFRleHQgY29uc3RydWN0b3IsIGFuZCBtYWtlIGl0IGEgZGVwZW5kZW5jeSBvZiB0aGlzIHBvbHlmaWxsLlxuaWYgKFwiVGV4dFwiIGluIHNlbGYpIHtcblx0VGV4dC5wcm90b3R5cGUucmVtb3ZlID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlO1xufVxuXG4oZnVuY3Rpb24gKCkge1xuXHR2YXIgb3JpZ2luYWxSZW1vdmUgPSBIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlO1xuXG5cdEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoaW5kZXgpIHtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWxSZW1vdmUuY2FsbCh0aGlzLCBpbmRleCk7XG5cdH07XG59KSgpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwicmVtb3ZlXCJpbiBDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZVxuKSkge1xuLy8gQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUucmVtb3ZlXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5yZW1vdmUgPSBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBzZWxmXG4pKSB7XG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbihmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdHZhciByYWZQcmVmaXg7XG5cblx0Ly8gZG8gbm90IGluamVjdCBSQUYgaW4gb3JkZXIgdG8gYXZvaWQgYnJva2VuIHBlcmZvcm1hbmNlXG5cdHZhciBub3dPZmZzZXQgPSBEYXRlLm5vdygpO1xuXG5cdC8vIHVzZSBwZXJmb3JtYW5jZSBhcGkgaWYgZXhpc3QsIG90aGVyd2lzZSB1c2UgRGF0ZS5ub3cuXG5cdC8vIERhdGUubm93IHBvbHlmaWxsIHJlcXVpcmVkLlxuXHR2YXIgcG5vdyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoZ2xvYmFsLnBlcmZvcm1hbmNlICYmIHR5cGVvZiBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdygpO1xuXHRcdH1cblx0XHQvLyBmYWxsYmFja1xuXHRcdHJldHVybiBEYXRlLm5vdygpIC0gbm93T2Zmc2V0O1xuXHR9O1xuXG5cdGlmICgnbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lJyBpbiBnbG9iYWwpIHtcblx0XHRyYWZQcmVmaXggPSAnbW96JztcblxuXHR9IGVsc2UgaWYgKCd3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnIGluIGdsb2JhbCkge1xuXHRcdHJhZlByZWZpeCA9ICd3ZWJraXQnO1xuXG5cdH1cblxuXHRpZiAocmFmUHJlZml4KSB7XG5cdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0cmV0dXJuIGdsb2JhbFtyYWZQcmVmaXggKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjYWxsYmFjayhwbm93KCkpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRnbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxbcmFmUHJlZml4ICsgJ0NhbmNlbEFuaW1hdGlvbkZyYW1lJ107XG5cdH0gZWxzZSB7XG5cblx0XHR2YXIgbGFzdFRpbWUgPSBEYXRlLm5vdygpO1xuXG5cdFx0Z2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXJcblx0XHRcdGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKSxcblx0XHRcdGRlbGF5ID0gMTYgKyBsYXN0VGltZSAtIGN1cnJlbnRUaW1lO1xuXG5cdFx0XHRpZiAoZGVsYXkgPCAwKSB7XG5cdFx0XHRcdGRlbGF5ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0bGFzdFRpbWUgPSBjdXJyZW50VGltZTtcblxuXHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRsYXN0VGltZSA9IERhdGUubm93KCk7XG5cblx0XHRcdFx0Y2FsbGJhY2socG5vdygpKTtcblx0XHRcdH0sIGRlbGF5KTtcblx0XHR9O1xuXG5cdFx0Z2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGlkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoaWQpO1xuXHRcdH07XG5cdH1cbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJmdW5jdGlvblwiPT10eXBlb2YgZG9jdW1lbnQuaGVhZC5hbmltYXRlJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIikuYW5pbWF0ZSh7b3BhY2l0eTpbMCwxXX0se2RpcmVjdGlvbjpcImFsdGVybmF0ZVwiLGR1cmF0aW9uOjEsaXRlcmF0aW9uczoxfSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBXZWJBbmltYXRpb25zXG4vLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiFmdW5jdGlvbigpe3ZhciBhPXt9LGI9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gYTt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2NdPWFbY107cmV0dXJuIGJ9ZnVuY3Rpb24gZCgpe3RoaXMuX2RlbGF5PTAsdGhpcy5fZW5kRGVsYXk9MCx0aGlzLl9maWxsPVwibm9uZVwiLHRoaXMuX2l0ZXJhdGlvblN0YXJ0PTAsdGhpcy5faXRlcmF0aW9ucz0xLHRoaXMuX2R1cmF0aW9uPTAsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5fZGlyZWN0aW9uPVwibm9ybWFsXCIsdGhpcy5fZWFzaW5nPVwibGluZWFyXCIsdGhpcy5fZWFzaW5nRnVuY3Rpb249eH1mdW5jdGlvbiBlKCl7cmV0dXJuIGEuaXNEZXByZWNhdGVkKFwiSW52YWxpZCB0aW1pbmcgaW5wdXRzXCIsXCIyMDE2LTAzLTAyXCIsXCJUeXBlRXJyb3IgZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBpbnN0ZWFkLlwiLCEwKX1mdW5jdGlvbiBmKGIsYyxlKXt2YXIgZj1uZXcgZDtyZXR1cm4gYyYmKGYuZmlsbD1cImJvdGhcIixmLmR1cmF0aW9uPVwiYXV0b1wiKSxcIm51bWJlclwiIT10eXBlb2YgYnx8aXNOYU4oYik/dm9pZCAwIT09YiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYikuZm9yRWFjaChmdW5jdGlvbihjKXtpZihcImF1dG9cIiE9YltjXSl7aWYoKFwibnVtYmVyXCI9PXR5cGVvZiBmW2NdfHxcImR1cmF0aW9uXCI9PWMpJiYoXCJudW1iZXJcIiE9dHlwZW9mIGJbY118fGlzTmFOKGJbY10pKSlyZXR1cm47aWYoXCJmaWxsXCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKFwiZGlyZWN0aW9uXCI9PWMmJi0xPT13LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKFwicGxheWJhY2tSYXRlXCI9PWMmJjEhPT1iW2NdJiZhLmlzRGVwcmVjYXRlZChcIkFuaW1hdGlvbkVmZmVjdFRpbWluZy5wbGF5YmFja1JhdGVcIixcIjIwMTQtMTEtMjhcIixcIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuXCIpKXJldHVybjtmW2NdPWJbY119fSk6Zi5kdXJhdGlvbj1iLGZ9ZnVuY3Rpb24gZyhhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSksQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1cIlwiLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249YTt2YXIgYj1DLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uO2lmKFwiXCI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGVhc2luZ1wiKTtyZXR1cm4gYn1mdW5jdGlvbiBsKGEpe2lmKFwibGluZWFyXCI9PWEpcmV0dXJuIHg7dmFyIGI9RS5leGVjKGEpO2lmKGIpcmV0dXJuIGkuYXBwbHkodGhpcyxiLnNsaWNlKDEpLm1hcChOdW1iZXIpKTt2YXIgYz1GLmV4ZWMoYSk7aWYoYylyZXR1cm4gaihOdW1iZXIoY1sxXSksQSk7dmFyIGQ9Ry5leGVjKGEpO3JldHVybiBkP2ooTnVtYmVyKGRbMV0pLHtzdGFydDp5LG1pZGRsZTp6LGVuZDpBfVtkWzJdXSk6QlthXXx8eH1mdW5jdGlvbiBtKGEpe3JldHVybiBNYXRoLmFicyhuKGEpL2EucGxheWJhY2tSYXRlKX1mdW5jdGlvbiBuKGEpe3JldHVybiAwPT09YS5kdXJhdGlvbnx8MD09PWEuaXRlcmF0aW9ucz8wOmEuZHVyYXRpb24qYS5pdGVyYXRpb25zfWZ1bmN0aW9uIG8oYSxiLGMpe2lmKG51bGw9PWIpcmV0dXJuIEg7dmFyIGQ9Yy5kZWxheSthK2MuZW5kRGVsYXk7cmV0dXJuIGI8TWF0aC5taW4oYy5kZWxheSxkKT9JOmI+PU1hdGgubWluKGMuZGVsYXkrYSxkKT9KOkt9ZnVuY3Rpb24gcChhLGIsYyxkLGUpe3N3aXRjaChkKXtjYXNlIEk6cmV0dXJuXCJiYWNrd2FyZHNcIj09Ynx8XCJib3RoXCI9PWI/MDpudWxsO2Nhc2UgSzpyZXR1cm4gYy1lO2Nhc2UgSjpyZXR1cm5cImZvcndhcmRzXCI9PWJ8fFwiYm90aFwiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKFwibm9ybWFsXCIhPT1hJiZcInJldmVyc2VcIiE9PWEpe3ZhciBlPWI7XCJhbHRlcm5hdGUtcmV2ZXJzZVwiPT09YSYmKGUrPTEpLGQ9XCJub3JtYWxcIixlIT09MS8wJiZlJTIhPTAmJihkPVwicmV2ZXJzZVwiKX1yZXR1cm5cIm5vcm1hbFwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9XCJiYWNrd2FyZHN8Zm9yd2FyZHN8Ym90aHxub25lXCIuc3BsaXQoXCJ8XCIpLHc9XCJyZXZlcnNlfGFsdGVybmF0ZXxhbHRlcm5hdGUtcmV2ZXJzZVwiLnNwbGl0KFwifFwiKSx4PWZ1bmN0aW9uKGEpe3JldHVybiBhfTtkLnByb3RvdHlwZT17X3NldE1lbWJlcjpmdW5jdGlvbihiLGMpe3RoaXNbXCJfXCIrYl09Yyx0aGlzLl9lZmZlY3QmJih0aGlzLl9lZmZlY3QuX3RpbWluZ0lucHV0W2JdPWMsdGhpcy5fZWZmZWN0Ll90aW1pbmc9YS5ub3JtYWxpemVUaW1pbmdJbnB1dCh0aGlzLl9lZmZlY3QuX3RpbWluZ0lucHV0KSx0aGlzLl9lZmZlY3QuYWN0aXZlRHVyYXRpb249YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbih0aGlzLl9lZmZlY3QuX3RpbWluZyksdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24mJnRoaXMuX2VmZmVjdC5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpKX0sZ2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9LHNldCBkZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoXCJkZWxheVwiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoXCJlbmREZWxheVwiLGEpfSxnZXQgZW5kRGVsYXkoKXtyZXR1cm4gdGhpcy5fZW5kRGVsYXl9LHNldCBmaWxsKGEpe3RoaXMuX3NldE1lbWJlcihcImZpbGxcIixhKX0sZ2V0IGZpbGwoKXtyZXR1cm4gdGhpcy5fZmlsbH0sc2V0IGl0ZXJhdGlvblN0YXJ0KGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25TdGFydCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgcmVjZWl2ZWQ6IFwiK2EpO3RoaXMuX3NldE1lbWJlcihcIml0ZXJhdGlvblN0YXJ0XCIsYSl9LGdldCBpdGVyYXRpb25TdGFydCgpe3JldHVybiB0aGlzLl9pdGVyYXRpb25TdGFydH0sc2V0IGR1cmF0aW9uKGEpe2lmKFwiYXV0b1wiIT1hJiYoaXNOYU4oYSl8fGE8MCkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZHVyYXRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUgb3IgYXV0bywgcmVjZWl2ZWQ6IFwiK2EpO3RoaXMuX3NldE1lbWJlcihcImR1cmF0aW9uXCIsYSl9LGdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLl9kdXJhdGlvbn0sc2V0IGRpcmVjdGlvbihhKXt0aGlzLl9zZXRNZW1iZXIoXCJkaXJlY3Rpb25cIixhKX0sZ2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259LHNldCBlYXNpbmcoYSl7dGhpcy5fZWFzaW5nRnVuY3Rpb249bChrKGEpKSx0aGlzLl9zZXRNZW1iZXIoXCJlYXNpbmdcIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zIG11c3QgYmUgbm9uLW5lZ2F0aXZlLCByZWNlaXZlZDogXCIrYSk7dGhpcy5fc2V0TWVtYmVyKFwiaXRlcmF0aW9uc1wiLGEpfSxnZXQgaXRlcmF0aW9ucygpe3JldHVybiB0aGlzLl9pdGVyYXRpb25zfX07dmFyIHk9MSx6PS41LEE9MCxCPXtlYXNlOmkoLjI1LC4xLC4yNSwxKSxcImVhc2UtaW5cIjppKC40MiwwLDEsMSksXCJlYXNlLW91dFwiOmkoMCwwLC41OCwxKSxcImVhc2UtaW4tb3V0XCI6aSguNDIsMCwuNTgsMSksXCJzdGVwLXN0YXJ0XCI6aigxLHkpLFwic3RlcC1taWRkbGVcIjpqKDEseiksXCJzdGVwLWVuZFwiOmooMSxBKX0sQz1udWxsLEQ9XCJcXFxccyooLT9cXFxcZCtcXFxcLj9cXFxcZCp8LT9cXFxcLlxcXFxkKylcXFxccypcIixFPW5ldyBSZWdFeHAoXCJjdWJpYy1iZXppZXJcXFxcKFwiK0QrXCIsXCIrRCtcIixcIitEK1wiLFwiK0QrXCJcXFxcKVwiKSxGPS9zdGVwc1xcKFxccyooXFxkKylcXHMqXFwpLyxHPS9zdGVwc1xcKFxccyooXFxkKylcXHMqLFxccyooc3RhcnR8bWlkZGxlfGVuZClcXHMqXFwpLyxIPTAsST0xLEo9MixLPTM7YS5jbG9uZVRpbWluZ0lucHV0PWMsYS5tYWtlVGltaW5nPWYsYS5udW1lcmljVGltaW5nVG9PYmplY3Q9ZyxhLm5vcm1hbGl6ZVRpbWluZ0lucHV0PWgsYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbj1tLGEuY2FsY3VsYXRlSXRlcmF0aW9uUHJvZ3Jlc3M9dSxhLmNhbGN1bGF0ZVBoYXNlPW8sYS5ub3JtYWxpemVFYXNpbmc9ayxhLnBhcnNlRWFzaW5nRnVuY3Rpb249bH0oYSksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7cmV0dXJuIGEgaW4gaz9rW2FdW2JdfHxiOmJ9ZnVuY3Rpb24gZChhKXtyZXR1cm5cImRpc3BsYXlcIj09PWF8fDA9PT1hLmxhc3RJbmRleE9mKFwiYW5pbWF0aW9uXCIsMCl8fDA9PT1hLmxhc3RJbmRleE9mKFwidHJhbnNpdGlvblwiLDApfWZ1bmN0aW9uIGUoYSxiLGUpe2lmKCFkKGEpKXt2YXIgZj1oW2FdO2lmKGYpe2kuc3R5bGVbYV09Yjtmb3IodmFyIGcgaW4gZil7dmFyIGo9ZltnXSxrPWkuc3R5bGVbal07ZVtqXT1jKGosayl9fWVsc2UgZVthXT1jKGEsYil9fWZ1bmN0aW9uIGYoYSl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpaWYoIShjIGluW1wiZWFzaW5nXCIsXCJvZmZzZXRcIixcImNvbXBvc2l0ZVwiXSkpe3ZhciBkPWFbY107QXJyYXkuaXNBcnJheShkKXx8KGQ9W2RdKTtmb3IodmFyIGUsZj1kLmxlbmd0aCxnPTA7ZzxmO2crKyllPXt9LGUub2Zmc2V0PVwib2Zmc2V0XCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLFwiZWFzaW5nXCJpbiBhJiYoZS5lYXNpbmc9YS5lYXNpbmcpLFwiY29tcG9zaXRlXCJpbiBhJiYoZS5jb21wb3NpdGU9YS5jb21wb3NpdGUpLGVbY109ZFtnXSxiLnB1c2goZSl9cmV0dXJuIGIuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm9mZnNldC1iLm9mZnNldH0pLGJ9ZnVuY3Rpb24gZyhiKXtmdW5jdGlvbiBjKCl7dmFyIGE9ZC5sZW5ndGg7bnVsbD09ZFthLTFdLm9mZnNldCYmKGRbYS0xXS5vZmZzZXQ9MSksYT4xJiZudWxsPT1kWzBdLm9mZnNldCYmKGRbMF0ub2Zmc2V0PTApO2Zvcih2YXIgYj0wLGM9ZFswXS5vZmZzZXQsZT0xO2U8YTtlKyspe3ZhciBmPWRbZV0ub2Zmc2V0O2lmKG51bGwhPWYpe2Zvcih2YXIgZz0xO2c8ZS1iO2crKylkW2IrZ10ub2Zmc2V0PWMrKGYtYykqZy8oZS1iKTtiPWUsYz1mfX19aWYobnVsbD09YilyZXR1cm5bXTt3aW5kb3cuU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJkFycmF5LnByb3RvdHlwZS5mcm9tJiZiW1N5bWJvbC5pdGVyYXRvcl0mJihiPUFycmF5LmZyb20oYikpLEFycmF5LmlzQXJyYXkoYil8fChiPWYoYikpO2Zvcih2YXIgZD1iLm1hcChmdW5jdGlvbihiKXt2YXIgYz17fTtmb3IodmFyIGQgaW4gYil7dmFyIGY9YltkXTtpZihcIm9mZnNldFwiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleWZyYW1lIG9mZnNldHMgbXVzdCBiZSBudW1iZXJzLlwiKTtpZihmPDB8fGY+MSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5cIil9fWVsc2UgaWYoXCJjb21wb3NpdGVcIj09ZCl7aWYoXCJhZGRcIj09Znx8XCJhY2N1bXVsYXRlXCI9PWYpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZTpcIk5vdFN1cHBvcnRlZEVycm9yXCIsbWVzc2FnZTpcImFkZCBjb21wb3NpdGluZyBpcyBub3Qgc3VwcG9ydGVkXCJ9O2lmKFwicmVwbGFjZVwiIT1mKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNvbXBvc2l0ZSBtb2RlIFwiK2YrXCIuXCIpfWVsc2UgZj1cImVhc2luZ1wiPT1kP2Eubm9ybWFsaXplRWFzaW5nKGYpOlwiXCIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz1cImxpbmVhclwiKSxjfSksZz0hMCxoPS0xLzAsaT0wO2k8ZC5sZW5ndGg7aSsrKXt2YXIgaj1kW2ldLm9mZnNldDtpZihudWxsIT1qKXtpZihqPGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuXCIpO2g9an1lbHNlIGc9ITF9cmV0dXJuIGQ9ZC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0Pj0wJiZhLm9mZnNldDw9MX0pLGd8fGMoKSxkfXZhciBoPXtiYWNrZ3JvdW5kOltcImJhY2tncm91bmRJbWFnZVwiLFwiYmFja2dyb3VuZFBvc2l0aW9uXCIsXCJiYWNrZ3JvdW5kU2l6ZVwiLFwiYmFja2dyb3VuZFJlcGVhdFwiLFwiYmFja2dyb3VuZEF0dGFjaG1lbnRcIixcImJhY2tncm91bmRPcmlnaW5cIixcImJhY2tncm91bmRDbGlwXCIsXCJiYWNrZ3JvdW5kQ29sb3JcIl0sYm9yZGVyOltcImJvcmRlclRvcENvbG9yXCIsXCJib3JkZXJUb3BTdHlsZVwiLFwiYm9yZGVyVG9wV2lkdGhcIixcImJvcmRlclJpZ2h0Q29sb3JcIixcImJvcmRlclJpZ2h0U3R5bGVcIixcImJvcmRlclJpZ2h0V2lkdGhcIixcImJvcmRlckJvdHRvbUNvbG9yXCIsXCJib3JkZXJCb3R0b21TdHlsZVwiLFwiYm9yZGVyQm90dG9tV2lkdGhcIixcImJvcmRlckxlZnRDb2xvclwiLFwiYm9yZGVyTGVmdFN0eWxlXCIsXCJib3JkZXJMZWZ0V2lkdGhcIl0sYm9yZGVyQm90dG9tOltcImJvcmRlckJvdHRvbVdpZHRoXCIsXCJib3JkZXJCb3R0b21TdHlsZVwiLFwiYm9yZGVyQm90dG9tQ29sb3JcIl0sYm9yZGVyQ29sb3I6W1wiYm9yZGVyVG9wQ29sb3JcIixcImJvcmRlclJpZ2h0Q29sb3JcIixcImJvcmRlckJvdHRvbUNvbG9yXCIsXCJib3JkZXJMZWZ0Q29sb3JcIl0sYm9yZGVyTGVmdDpbXCJib3JkZXJMZWZ0V2lkdGhcIixcImJvcmRlckxlZnRTdHlsZVwiLFwiYm9yZGVyTGVmdENvbG9yXCJdLGJvcmRlclJhZGl1czpbXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXCJib3JkZXJUb3BSaWdodFJhZGl1c1wiLFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIl0sYm9yZGVyUmlnaHQ6W1wiYm9yZGVyUmlnaHRXaWR0aFwiLFwiYm9yZGVyUmlnaHRTdHlsZVwiLFwiYm9yZGVyUmlnaHRDb2xvclwiXSxib3JkZXJUb3A6W1wiYm9yZGVyVG9wV2lkdGhcIixcImJvcmRlclRvcFN0eWxlXCIsXCJib3JkZXJUb3BDb2xvclwiXSxib3JkZXJXaWR0aDpbXCJib3JkZXJUb3BXaWR0aFwiLFwiYm9yZGVyUmlnaHRXaWR0aFwiLFwiYm9yZGVyQm90dG9tV2lkdGhcIixcImJvcmRlckxlZnRXaWR0aFwiXSxmbGV4OltcImZsZXhHcm93XCIsXCJmbGV4U2hyaW5rXCIsXCJmbGV4QmFzaXNcIl0sZm9udDpbXCJmb250RmFtaWx5XCIsXCJmb250U2l6ZVwiLFwiZm9udFN0eWxlXCIsXCJmb250VmFyaWFudFwiLFwiZm9udFdlaWdodFwiLFwibGluZUhlaWdodFwiXSxtYXJnaW46W1wibWFyZ2luVG9wXCIsXCJtYXJnaW5SaWdodFwiLFwibWFyZ2luQm90dG9tXCIsXCJtYXJnaW5MZWZ0XCJdLG91dGxpbmU6W1wib3V0bGluZUNvbG9yXCIsXCJvdXRsaW5lU3R5bGVcIixcIm91dGxpbmVXaWR0aFwiXSxwYWRkaW5nOltcInBhZGRpbmdUb3BcIixcInBhZGRpbmdSaWdodFwiLFwicGFkZGluZ0JvdHRvbVwiLFwicGFkZGluZ0xlZnRcIl19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiZGl2XCIpLGo9e3RoaW46XCIxcHhcIixtZWRpdW06XCIzcHhcIix0aGljazpcIjVweFwifSxrPXtib3JkZXJCb3R0b21XaWR0aDpqLGJvcmRlckxlZnRXaWR0aDpqLGJvcmRlclJpZ2h0V2lkdGg6aixib3JkZXJUb3BXaWR0aDpqLGZvbnRTaXplOntcInh4LXNtYWxsXCI6XCI2MCVcIixcIngtc21hbGxcIjpcIjc1JVwiLHNtYWxsOlwiODklXCIsbWVkaXVtOlwiMTAwJVwiLGxhcmdlOlwiMTIwJVwiLFwieC1sYXJnZVwiOlwiMTUwJVwiLFwieHgtbGFyZ2VcIjpcIjIwMCVcIn0sZm9udFdlaWdodDp7bm9ybWFsOlwiNDAwXCIsYm9sZDpcIjcwMFwifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOlwiMHB4IDBweCAwcHggdHJhbnNwYXJlbnRcIn0sYm94U2hhZG93Ontub25lOlwiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50XCJ9fTthLmNvbnZlcnRUb0FycmF5Rm9ybT1mLGEubm9ybWFsaXplS2V5ZnJhbWVzPWd9KGEpLGZ1bmN0aW9uKGEpe3ZhciBiPXt9O2EuaXNEZXByZWNhdGVkPWZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmPWU/XCJhcmVcIjpcImlzXCIsZz1uZXcgRGF0ZSxoPW5ldyBEYXRlKGMpO3JldHVybiBoLnNldE1vbnRoKGguZ2V0TW9udGgoKSszKSwhKGc8aCYmKGEgaW4gYnx8Y29uc29sZS53YXJuKFwiV2ViIEFuaW1hdGlvbnM6IFwiK2ErXCIgXCIrZitcIiBkZXByZWNhdGVkIGFuZCB3aWxsIHN0b3Agd29ya2luZyBvbiBcIitoLnRvRGF0ZVN0cmluZygpK1wiLiBcIitkKSxiW2FdPSEwLDEpKX0sYS5kZXByZWNhdGVkPWZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmPWU/XCJhcmVcIjpcImlzXCI7aWYoYS5pc0RlcHJlY2F0ZWQoYixjLGQsZSkpdGhyb3cgbmV3IEVycm9yKGIrXCIgXCIrZitcIiBubyBsb25nZXIgc3VwcG9ydGVkLiBcIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsXCJwbGF5fGN1cnJlbnRUaW1lfHBhdXNlfHJldmVyc2V8cGxheWJhY2tSYXRlfGNhbmNlbHxmaW5pc2h8c3RhcnRUaW1lfHBsYXlTdGF0ZVwiLnNwbGl0KFwifFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWNbYV0mJihkPSEwKX0pKSwhZClyZXR1cm59IWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspZm9yKHZhciBkIGluIGFbY10paWYoXCJvZmZzZXRcIiE9ZCYmXCJlYXNpbmdcIiE9ZCYmXCJjb21wb3NpdGVcIiE9ZCl7dmFyIGU9e29mZnNldDphW2NdLm9mZnNldCxlYXNpbmc6YVtjXS5lYXNpbmcsdmFsdWU6YVtjXVtkXX07YltkXT1iW2RdfHxbXSxiW2RdLnB1c2goZSl9Zm9yKHZhciBmIGluIGIpe3ZhciBnPWJbZl07aWYoMCE9Z1swXS5vZmZzZXR8fDEhPWdbZy5sZW5ndGgtMV0ub2Zmc2V0KXRocm93e3R5cGU6RE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLG5hbWU6XCJOb3RTdXBwb3J0ZWRFcnJvclwiLG1lc3NhZ2U6XCJQYXJ0aWFsIGtleWZyYW1lcyBhcmUgbm90IHN1cHBvcnRlZFwifX1yZXR1cm4gYn1mdW5jdGlvbiBlKGMpe3ZhciBkPVtdO2Zvcih2YXIgZSBpbiBjKWZvcih2YXIgZj1jW2VdLGc9MDtnPGYubGVuZ3RoLTE7ZysrKXt2YXIgaD1nLGk9ZysxLGo9ZltoXS5vZmZzZXQsaz1mW2ldLm9mZnNldCxsPWosbT1rOzA9PWcmJihsPS0xLzAsMD09ayYmKGk9aCkpLGc9PWYubGVuZ3RoLTImJihtPTEvMCwxPT1qJiYoaD1pKSksZC5wdXNoKHthcHBseUZyb206bCxhcHBseVRvOm0sc3RhcnRPZmZzZXQ6ZltoXS5vZmZzZXQsZW5kT2Zmc2V0OmZbaV0ub2Zmc2V0LGVhc2luZ0Z1bmN0aW9uOmEucGFyc2VFYXNpbmdGdW5jdGlvbihmW2hdLmVhc2luZykscHJvcGVydHk6ZSxpbnRlcnBvbGF0aW9uOmIucHJvcGVydHlJbnRlcnBvbGF0aW9uKGUsZltoXS52YWx1ZSxmW2ldLnZhbHVlKX0pfXJldHVybiBkLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydE9mZnNldC1iLnN0YXJ0T2Zmc2V0fSksZH1iLmNvbnZlcnRFZmZlY3RJbnB1dD1mdW5jdGlvbihjKXt2YXIgZj1hLm5vcm1hbGl6ZUtleWZyYW1lcyhjKSxnPWQoZiksaD1lKGcpO3JldHVybiBmdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpaC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGM+PWEuYXBwbHlGcm9tJiZjPGEuYXBwbHlUb30pLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9Yy1kLnN0YXJ0T2Zmc2V0LGY9ZC5lbmRPZmZzZXQtZC5zdGFydE9mZnNldCxnPTA9PWY/MDpkLmVhc2luZ0Z1bmN0aW9uKGUvZik7Yi5hcHBseShhLGQucHJvcGVydHksZC5pbnRlcnBvbGF0aW9uKGcpKX0pO2Vsc2UgZm9yKHZhciBkIGluIGcpXCJvZmZzZXRcIiE9ZCYmXCJlYXNpbmdcIiE9ZCYmXCJjb21wb3NpdGVcIiE9ZCYmYi5jbGVhcihhLGQpfX19KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEucmVwbGFjZSgvLSguKS9nLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX0pfWZ1bmN0aW9uIGUoYSxiLGMpe2hbY109aFtjXXx8W10saFtjXS5wdXNoKFthLGJdKX1mdW5jdGlvbiBmKGEsYixjKXtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7ZShhLGIsZChjW2ZdKSl9fWZ1bmN0aW9uIGcoYyxlLGYpe3ZhciBnPWM7Ly0vLnRlc3QoYykmJiFhLmlzRGVwcmVjYXRlZChcIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXNcIixcIjIwMTYtMDMtMjJcIixcIlVzZSBjYW1lbENhc2UgaW5zdGVhZC5cIiwhMCkmJihnPWQoYykpLFwiaW5pdGlhbFwiIT1lJiZcImluaXRpYWxcIiE9Znx8KFwiaW5pdGlhbFwiPT1lJiYoZT1pW2ddKSxcImluaXRpYWxcIj09ZiYmKGY9aVtnXSkpO2Zvcih2YXIgaj1lPT1mP1tdOmhbZ10saz0wO2omJms8ai5sZW5ndGg7aysrKXt2YXIgbD1qW2tdWzBdKGUpLG09altrXVswXShmKTtpZih2b2lkIDAhPT1sJiZ2b2lkIDAhPT1tKXt2YXIgbj1qW2tdWzFdKGwsbSk7aWYobil7dmFyIG89Yi5JbnRlcnBvbGF0aW9uLmFwcGx5KG51bGwsbik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiAwPT1hP2U6MT09YT9mOm8oYSl9fX19cmV0dXJuIGIuSW50ZXJwb2xhdGlvbighMSwhMCxmdW5jdGlvbihhKXtyZXR1cm4gYT9mOmV9KX12YXIgaD17fTtiLmFkZFByb3BlcnRpZXNIYW5kbGVyPWY7dmFyIGk9e2JhY2tncm91bmRDb2xvcjpcInRyYW5zcGFyZW50XCIsYmFja2dyb3VuZFBvc2l0aW9uOlwiMCUgMCVcIixib3JkZXJCb3R0b21Db2xvcjpcImN1cnJlbnRDb2xvclwiLGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6XCIwcHhcIixib3JkZXJCb3R0b21SaWdodFJhZGl1czpcIjBweFwiLGJvcmRlckJvdHRvbVdpZHRoOlwiM3B4XCIsYm9yZGVyTGVmdENvbG9yOlwiY3VycmVudENvbG9yXCIsYm9yZGVyTGVmdFdpZHRoOlwiM3B4XCIsYm9yZGVyUmlnaHRDb2xvcjpcImN1cnJlbnRDb2xvclwiLGJvcmRlclJpZ2h0V2lkdGg6XCIzcHhcIixib3JkZXJTcGFjaW5nOlwiMnB4XCIsYm9yZGVyVG9wQ29sb3I6XCJjdXJyZW50Q29sb3JcIixib3JkZXJUb3BMZWZ0UmFkaXVzOlwiMHB4XCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6XCIwcHhcIixib3JkZXJUb3BXaWR0aDpcIjNweFwiLGJvdHRvbTpcImF1dG9cIixjbGlwOlwicmVjdCgwcHgsIDBweCwgMHB4LCAwcHgpXCIsY29sb3I6XCJibGFja1wiLGZvbnRTaXplOlwiMTAwJVwiLGZvbnRXZWlnaHQ6XCI0MDBcIixoZWlnaHQ6XCJhdXRvXCIsbGVmdDpcImF1dG9cIixsZXR0ZXJTcGFjaW5nOlwibm9ybWFsXCIsbGluZUhlaWdodDpcIjEyMCVcIixtYXJnaW5Cb3R0b206XCIwcHhcIixtYXJnaW5MZWZ0OlwiMHB4XCIsbWFyZ2luUmlnaHQ6XCIwcHhcIixtYXJnaW5Ub3A6XCIwcHhcIixtYXhIZWlnaHQ6XCJub25lXCIsbWF4V2lkdGg6XCJub25lXCIsbWluSGVpZ2h0OlwiMHB4XCIsbWluV2lkdGg6XCIwcHhcIixvcGFjaXR5OlwiMS4wXCIsb3V0bGluZUNvbG9yOlwiaW52ZXJ0XCIsb3V0bGluZU9mZnNldDpcIjBweFwiLG91dGxpbmVXaWR0aDpcIjNweFwiLHBhZGRpbmdCb3R0b206XCIwcHhcIixwYWRkaW5nTGVmdDpcIjBweFwiLHBhZGRpbmdSaWdodDpcIjBweFwiLHBhZGRpbmdUb3A6XCIwcHhcIixyaWdodDpcImF1dG9cIixzdHJva2VEYXNoYXJyYXk6XCJub25lXCIsc3Ryb2tlRGFzaG9mZnNldDpcIjBweFwiLHRleHRJbmRlbnQ6XCIwcHhcIix0ZXh0U2hhZG93OlwiMHB4IDBweCAwcHggdHJhbnNwYXJlbnRcIix0b3A6XCJhdXRvXCIsdHJhbnNmb3JtOlwiXCIsdmVydGljYWxBbGlnbjpcIjBweFwiLHZpc2liaWxpdHk6XCJ2aXNpYmxlXCIsd2lkdGg6XCJhdXRvXCIsd29yZFNwYWNpbmc6XCJub3JtYWxcIix6SW5kZXg6XCJhdXRvXCJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4hKCFiLm5hbWVzcGFjZVVSSXx8LTE9PWIubmFtZXNwYWNlVVJJLmluZGV4T2YoXCIvc3ZnXCIpKSYmKGcgaW4gYXx8KGFbZ109L1RyaWRlbnR8TVNJRXxJRU1vYmlsZXxFZGdlfEFuZHJvaWQgNC9pLnRlc3QoYS5uYXZpZ2F0b3IudXNlckFnZW50KSksYVtnXSl9ZnVuY3Rpb24gZChhLGIsYyl7Yy5lbnVtZXJhYmxlPSEwLGMuY29uZmlndXJhYmxlPSEwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9ZnVuY3Rpb24gZShhKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fc3Vycm9nYXRlU3R5bGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiZGl2XCIpLnN0eWxlLHRoaXMuX3N0eWxlPWEuc3R5bGUsdGhpcy5fbGVuZ3RoPTAsdGhpcy5faXNBbmltYXRlZFByb3BlcnR5PXt9LHRoaXMuX3VwZGF0ZVN2Z1RyYW5zZm9ybUF0dHI9Yyh3aW5kb3csYSksdGhpcy5fc2F2ZWRUcmFuc2Zvcm1BdHRyPW51bGw7Zm9yKHZhciBiPTA7Yjx0aGlzLl9zdHlsZS5sZW5ndGg7YisrKXt2YXIgZD10aGlzLl9zdHlsZVtiXTt0aGlzLl9zdXJyb2dhdGVTdHlsZVtkXT10aGlzLl9zdHlsZVtkXX10aGlzLl91cGRhdGVJbmRpY2VzKCl9ZnVuY3Rpb24gZihhKXtpZighYS5fd2ViQW5pbWF0aW9uc1BhdGNoZWRTdHlsZSl7dmFyIGI9bmV3IGUoYSk7dHJ5e2QoYSxcInN0eWxlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBifX0pfWNhdGNoKGIpe2Euc3R5bGUuX3NldD1mdW5jdGlvbihiLGMpe2Euc3R5bGVbYl09Y30sYS5zdHlsZS5fY2xlYXI9ZnVuY3Rpb24oYil7YS5zdHlsZVtiXT1cIlwifX1hLl93ZWJBbmltYXRpb25zUGF0Y2hlZFN0eWxlPWEuc3R5bGV9fXZhciBnPVwiX3dlYkFuaW1hdGlvbnNVcGRhdGVTdmdUcmFuc2Zvcm1BdHRyXCIsaD17Y3NzVGV4dDoxLGxlbmd0aDoxLHBhcmVudFJ1bGU6MX0saT17Z2V0UHJvcGVydHlDU1NWYWx1ZToxLGdldFByb3BlcnR5UHJpb3JpdHk6MSxnZXRQcm9wZXJ0eVZhbHVlOjEsaXRlbToxLHJlbW92ZVByb3BlcnR5OjEsc2V0UHJvcGVydHk6MX0saj17cmVtb3ZlUHJvcGVydHk6MSxzZXRQcm9wZXJ0eToxfTtlLnByb3RvdHlwZT17Z2V0IGNzc1RleHQoKXtyZXR1cm4gdGhpcy5fc3Vycm9nYXRlU3R5bGUuY3NzVGV4dH0sc2V0IGNzc1RleHQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmxlbmd0aDtjKyspYlt0aGlzLl9zdXJyb2dhdGVTdHlsZVtjXV09ITA7dGhpcy5fc3Vycm9nYXRlU3R5bGUuY3NzVGV4dD1hLHRoaXMuX3VwZGF0ZUluZGljZXMoKTtmb3IodmFyIGM9MDtjPHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmxlbmd0aDtjKyspYlt0aGlzLl9zdXJyb2dhdGVTdHlsZVtjXV09ITA7Zm9yKHZhciBkIGluIGIpdGhpcy5faXNBbmltYXRlZFByb3BlcnR5W2RdfHx0aGlzLl9zdHlsZS5zZXRQcm9wZXJ0eShkLHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmdldFByb3BlcnR5VmFsdWUoZCkpfSxnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX3N1cnJvZ2F0ZVN0eWxlLmxlbmd0aH0sZ2V0IHBhcmVudFJ1bGUoKXtyZXR1cm4gdGhpcy5fc3R5bGUucGFyZW50UnVsZX0sX3VwZGF0ZUluZGljZXM6ZnVuY3Rpb24oKXtmb3IoO3RoaXMuX2xlbmd0aDx0aGlzLl9zdXJyb2dhdGVTdHlsZS5sZW5ndGg7KU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHRoaXMuX2xlbmd0aCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXJyb2dhdGVTdHlsZVthXX19KHRoaXMuX2xlbmd0aCl9KSx0aGlzLl9sZW5ndGgrKztmb3IoO3RoaXMuX2xlbmd0aD50aGlzLl9zdXJyb2dhdGVTdHlsZS5sZW5ndGg7KXRoaXMuX2xlbmd0aC0tLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHRoaXMuX2xlbmd0aCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwfSl9LF9zZXQ6ZnVuY3Rpb24oYixjKXt0aGlzLl9zdHlsZVtiXT1jLHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVtiXT0hMCx0aGlzLl91cGRhdGVTdmdUcmFuc2Zvcm1BdHRyJiZcInRyYW5zZm9ybVwiPT1hLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWUoYikmJihudWxsPT10aGlzLl9zYXZlZFRyYW5zZm9ybUF0dHImJih0aGlzLl9zYXZlZFRyYW5zZm9ybUF0dHI9dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIikpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsYS50cmFuc2Zvcm1Ub1N2Z01hdHJpeChjKSkpfSxfY2xlYXI6ZnVuY3Rpb24oYil7dGhpcy5fc3R5bGVbYl09dGhpcy5fc3Vycm9nYXRlU3R5bGVbYl0sdGhpcy5fdXBkYXRlU3ZnVHJhbnNmb3JtQXR0ciYmXCJ0cmFuc2Zvcm1cIj09YS51bnByZWZpeGVkUHJvcGVydHlOYW1lKGIpJiYodGhpcy5fc2F2ZWRUcmFuc2Zvcm1BdHRyP3RoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsdGhpcy5fc2F2ZWRUcmFuc2Zvcm1BdHRyKTp0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKSx0aGlzLl9zYXZlZFRyYW5zZm9ybUF0dHI9bnVsbCksZGVsZXRlIHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVtiXX19O2Zvcih2YXIgayBpbiBpKWUucHJvdG90eXBlW2tdPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5fc3Vycm9nYXRlU3R5bGVbYV0uYXBwbHkodGhpcy5fc3Vycm9nYXRlU3R5bGUsYXJndW1lbnRzKTtyZXR1cm4gYiYmKHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVthcmd1bWVudHNbMF1dfHx0aGlzLl9zdHlsZVthXS5hcHBseSh0aGlzLl9zdHlsZSxhcmd1bWVudHMpLHRoaXMuX3VwZGF0ZUluZGljZXMoKSksY319KGssayBpbiBqKTtmb3IodmFyIGwgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKWwgaW4gaHx8bCBpbiBpfHxmdW5jdGlvbihhKXtkKGUucHJvdG90eXBlLGEse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXJyb2dhdGVTdHlsZVthXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3N1cnJvZ2F0ZVN0eWxlW2FdPWIsdGhpcy5fdXBkYXRlSW5kaWNlcygpLHRoaXMuX2lzQW5pbWF0ZWRQcm9wZXJ0eVthXXx8KHRoaXMuX3N0eWxlW2FdPWIpfX0pfShsKTthLmFwcGx5PWZ1bmN0aW9uKGIsYyxkKXtmKGIpLGIuc3R5bGUuX3NldChhLnByb3BlcnR5TmFtZShjKSxkKX0sYS5jbGVhcj1mdW5jdGlvbihiLGMpe2IuX3dlYkFuaW1hdGlvbnNQYXRjaGVkU3R5bGUmJmIuc3R5bGUuX2NsZWFyKGEucHJvcGVydHlOYW1lKGMpKX19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9XCJcIjtyZXR1cm4gYyYmYy5pZCYmKGQ9Yy5pZCksYS50aW1lbGluZS5fcGxheShhLktleWZyYW1lRWZmZWN0KHRoaXMsYixjLGQpKX19KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsZCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEmJlwibnVtYmVyXCI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZihcImJvb2xlYW5cIj09dHlwZW9mIGEmJlwiYm9vbGVhblwiPT10eXBlb2YgYilyZXR1cm4gZDwuNT9hOmI7aWYoYS5sZW5ndGg9PWIubGVuZ3RoKXtmb3IodmFyIGU9W10sZj0wO2Y8YS5sZW5ndGg7ZisrKWUucHVzaChjKGFbZl0sYltmXSxkKSk7cmV0dXJuIGV9dGhyb3dcIk1pc21hdGNoZWQgaW50ZXJwb2xhdGlvbiBhcmd1bWVudHMgXCIrYStcIjpcIitifWEuSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkKGMoYSxiLGUpKX19fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLGMpLGIpfWZ1bmN0aW9uIGQoYixkLGUpe3ZhciBmPWEuZG90KGIsZCk7Zj1jKGYsLTEsMSk7dmFyIGc9W107aWYoMT09PWYpZz1iO2Vsc2UgZm9yKHZhciBoPU1hdGguYWNvcyhmKSxpPTEqTWF0aC5zaW4oZSpoKS9NYXRoLnNxcnQoMS1mKmYpLGo9MDtqPDQ7aisrKWcucHVzaChiW2pdKihNYXRoLmNvcyhlKmgpLWYqaSkrZFtqXSppKTtyZXR1cm4gZ312YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9W1swLDAsMCwwXSxbMCwwLDAsMF0sWzAsMCwwLDBdLFswLDAsMCwwXV0sZD0wO2Q8NDtkKyspZm9yKHZhciBlPTA7ZTw0O2UrKylmb3IodmFyIGY9MDtmPDQ7ZisrKWNbZF1bZV0rPWJbZF1bZl0qYVtmXVtlXTtyZXR1cm4gY31mdW5jdGlvbiBiKGEpe3JldHVybiAwPT1hWzBdWzJdJiYwPT1hWzBdWzNdJiYwPT1hWzFdWzJdJiYwPT1hWzFdWzNdJiYwPT1hWzJdWzBdJiYwPT1hWzJdWzFdJiYxPT1hWzJdWzJdJiYwPT1hWzJdWzNdJiYwPT1hWzNdWzJdJiYxPT1hWzNdWzNdfWZ1bmN0aW9uIGMoYyxkLGUsZixnKXtmb3IodmFyIGg9W1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxLDBdLFswLDAsMCwxXV0saT0wO2k8NDtpKyspaFtpXVszXT1nW2ldO2Zvcih2YXIgaT0wO2k8MztpKyspZm9yKHZhciBqPTA7ajwzO2orKyloWzNdW2ldKz1jW2pdKmhbal1baV07dmFyIGs9ZlswXSxsPWZbMV0sbT1mWzJdLG49ZlszXSxvPVtbMSwwLDAsMF0sWzAsMSwwLDBdLFswLDAsMSwwXSxbMCwwLDAsMV1dO29bMF1bMF09MS0yKihsKmwrbSptKSxvWzBdWzFdPTIqKGsqbC1tKm4pLG9bMF1bMl09MiooayptK2wqbiksb1sxXVswXT0yKihrKmwrbSpuKSxvWzFdWzFdPTEtMiooayprK20qbSksb1sxXVsyXT0yKihsKm0taypuKSxvWzJdWzBdPTIqKGsqbS1sKm4pLG9bMl1bMV09MioobCptK2sqbiksb1syXVsyXT0xLTIqKGsqaytsKmwpLGg9YShoLG8pO3ZhciBwPVtbMSwwLDAsMF0sWzAsMSwwLDBdLFswLDAsMSwwXSxbMCwwLDAsMV1dO2VbMl0mJihwWzJdWzFdPWVbMl0saD1hKGgscCkpLGVbMV0mJihwWzJdWzFdPTAscFsyXVswXT1lWzBdLGg9YShoLHApKSxlWzBdJiYocFsyXVswXT0wLHBbMV1bMF09ZVswXSxoPWEoaCxwKSk7Zm9yKHZhciBpPTA7aTwzO2krKylmb3IodmFyIGo9MDtqPDM7aisrKWhbaV1bal0qPWRbaV07cmV0dXJuIGIoaCk/W2hbMF1bMF0saFswXVsxXSxoWzFdWzBdLGhbMV1bMV0saFszXVswXSxoWzNdWzFdXTpoWzBdLmNvbmNhdChoWzFdLGhbMl0saFszXSl9cmV0dXJuIGN9KCk7YS5jb21wb3NlTWF0cml4PWUsYS5xdWF0PWR9KGIpLGZ1bmN0aW9uKGEsYixjKXthLnNlcXVlbmNlTnVtYmVyPTA7dmFyIGQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPVwiZmluaXNoXCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPVwiXCIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLl9zZXF1ZW5jZU51bWJlcj1hLnNlcXVlbmNlTnVtYmVyKyssdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5faW5UaW1lbGluZT0hMCx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5vbmZpbmlzaD1udWxsLHRoaXMuX2ZpbmlzaEhhbmRsZXJzPVtdLHRoaXMuX2VmZmVjdD1iLHRoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKDApLHRoaXMuX2lkbGU9ITAsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExfSxiLkFuaW1hdGlvbi5wcm90b3R5cGU9e19lbnN1cmVBbGl2ZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlPDAmJjA9PT10aGlzLmN1cnJlbnRUaW1lP3RoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKC0xKTp0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSh0aGlzLmN1cnJlbnRUaW1lKSx0aGlzLl9pblRpbWVsaW5lfHwhdGhpcy5faW5FZmZlY3QmJnRoaXMuX2ZpbmlzaGVkRmxhZ3x8KHRoaXMuX2luVGltZWxpbmU9ITAsYi50aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpKX0sX3RpY2tDdXJyZW50VGltZTpmdW5jdGlvbihhLGIpe2EhPXRoaXMuX2N1cnJlbnRUaW1lJiYodGhpcy5fY3VycmVudFRpbWU9YSx0aGlzLl9pc0ZpbmlzaGVkJiYhYiYmKHRoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3BsYXliYWNrUmF0ZT4wP3RoaXMuX3RvdGFsRHVyYXRpb246MCksdGhpcy5fZW5zdXJlQWxpdmUoKSl9LGdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLl9pZGxlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/bnVsbDp0aGlzLl9jdXJyZW50VGltZX0sc2V0IGN1cnJlbnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fChiLnJlc3RhcnQoKSx0aGlzLl9wYXVzZWR8fG51bGw9PXRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT10aGlzLl90aW1lbGluZS5jdXJyZW50VGltZS1hL3RoaXMuX3BsYXliYWNrUmF0ZSksdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLHRoaXMuX2N1cnJlbnRUaW1lIT1hJiYodGhpcy5faWRsZSYmKHRoaXMuX2lkbGU9ITEsdGhpcy5fcGF1c2VkPSEwKSx0aGlzLl90aWNrQ3VycmVudFRpbWUoYSwhMCksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpKX0sZ2V0IHN0YXJ0VGltZSgpe3JldHVybiB0aGlzLl9zdGFydFRpbWV9LHNldCBzdGFydFRpbWUoYSl7YT0rYSxpc05hTihhKXx8dGhpcy5fcGF1c2VkfHx0aGlzLl9pZGxlfHwodGhpcy5fc3RhcnRUaW1lPWEsdGhpcy5fdGlja0N1cnJlbnRUaW1lKCh0aGlzLl90aW1lbGluZS5jdXJyZW50VGltZS10aGlzLl9zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlfSxzZXQgcGxheWJhY2tSYXRlKGEpe2lmKGEhPXRoaXMuX3BsYXliYWNrUmF0ZSl7dmFyIGM9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9wbGF5YmFja1JhdGU9YSx0aGlzLl9zdGFydFRpbWU9bnVsbCxcInBhdXNlZFwiIT10aGlzLnBsYXlTdGF0ZSYmXCJpZGxlXCIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlP1wiaWRsZVwiOm51bGw9PXRoaXMuX3N0YXJ0VGltZSYmIXRoaXMuX3BhdXNlZCYmMCE9dGhpcy5wbGF5YmFja1JhdGV8fHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz9cInBlbmRpbmdcIjp0aGlzLl9wYXVzZWQ/XCJwYXVzZWRcIjp0aGlzLl9pc0ZpbmlzaGVkP1wiZmluaXNoZWRcIjpcInJ1bm5pbmdcIn0sX3Jld2luZDpmdW5jdGlvbigpe2lmKHRoaXMuX3BsYXliYWNrUmF0ZT49MCl0aGlzLl9jdXJyZW50VGltZT0wO2Vsc2V7aWYoISh0aGlzLl90b3RhbER1cmF0aW9uPDEvMCkpdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcIlVuYWJsZSB0byByZXdpbmQgbmVnYXRpdmUgcGxheWJhY2sgcmF0ZSBhbmltYXRpb24gd2l0aCBpbmZpbml0ZSBkdXJhdGlvblwiLFwiSW52YWxpZFN0YXRlRXJyb3JcIik7dGhpcy5fY3VycmVudFRpbWU9dGhpcy5fdG90YWxEdXJhdGlvbn19LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQ9ITEsKHRoaXMuX2lzRmluaXNoZWR8fHRoaXMuX2lkbGUpJiYodGhpcy5fcmV3aW5kKCksdGhpcy5fc3RhcnRUaW1lPW51bGwpLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMSx0aGlzLl9pZGxlPSExLHRoaXMuX2Vuc3VyZUFsaXZlKCksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcyl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5faXNGaW5pc2hlZHx8dGhpcy5fcGF1c2VkfHx0aGlzLl9pZGxlP3RoaXMuX2lkbGUmJih0aGlzLl9yZXdpbmQoKSx0aGlzLl9pZGxlPSExKTp0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSEwfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9pZGxlfHwodGhpcy5jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjAsdGhpcy5fc3RhcnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb24tdGhpcy5jdXJyZW50VGltZSx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl9pbkVmZmVjdCYmKHRoaXMuX2luRWZmZWN0PSExLHRoaXMuX2lkbGU9ITAsdGhpcy5fcGF1c2VkPSExLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMCx0aGlzLl9jdXJyZW50VGltZT0wLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX2VmZmVjdC5fdXBkYXRlKG51bGwpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlKj0tMSx0aGlzLnBsYXkoKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGImJlwiZmluaXNoXCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZihcImZpbmlzaFwiPT1hKXt2YXIgYz10aGlzLl9maW5pc2hIYW5kbGVycy5pbmRleE9mKGIpO2M+PTAmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnNwbGljZShjLDEpfX0sX2ZpcmVFdmVudHM6ZnVuY3Rpb24oYSl7aWYodGhpcy5faXNGaW5pc2hlZCl7aWYoIXRoaXMuX2ZpbmlzaGVkRmxhZyl7dmFyIGI9bmV3IGQodGhpcyx0aGlzLl9jdXJyZW50VGltZSxhKSxjPXRoaXMuX2ZpbmlzaEhhbmRsZXJzLmNvbmNhdCh0aGlzLm9uZmluaXNoP1t0aGlzLm9uZmluaXNoXTpbXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoYi50YXJnZXQsYil9KX0sMCksdGhpcy5fZmluaXNoZWRGbGFnPSEwfX1lbHNlIHRoaXMuX2ZpbmlzaGVkRmxhZz0hMX0sX3RpY2s6ZnVuY3Rpb24oYSxiKXt0aGlzLl9pZGxlfHx0aGlzLl9wYXVzZWR8fChudWxsPT10aGlzLl9zdGFydFRpbWU/YiYmKHRoaXMuc3RhcnRUaW1lPWEtdGhpcy5fY3VycmVudFRpbWUvdGhpcy5wbGF5YmFja1JhdGUpOnRoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3RpY2tDdXJyZW50VGltZSgoYS10aGlzLl9zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlKSksYiYmKHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9maXJlRXZlbnRzKGEpKX0sZ2V0IF9uZWVkc1RpY2soKXtyZXR1cm4gdGhpcy5wbGF5U3RhdGUgaW57cGVuZGluZzoxLHJ1bm5pbmc6MX18fCF0aGlzLl9maW5pc2hlZEZsYWd9LF90YXJnZXRBbmltYXRpb25zOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fZWZmZWN0Ll90YXJnZXQ7cmV0dXJuIGEuX2FjdGl2ZUFuaW1hdGlvbnN8fChhLl9hY3RpdmVBbmltYXRpb25zPVtdKSxhLl9hY3RpdmVBbmltYXRpb25zfSxfbWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKTstMT09PWEuaW5kZXhPZih0aGlzKSYmYS5wdXNoKHRoaXMpfSxfdW5tYXJrVGFyZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fdGFyZ2V0QW5pbWF0aW9ucygpLGI9YS5pbmRleE9mKHRoaXMpOy0xIT09YiYmYS5zcGxpY2UoYiwxKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPWo7aj1bXSxhPHEuY3VycmVudFRpbWUmJihhPXEuY3VycmVudFRpbWUpLHEuX2FuaW1hdGlvbnMuc29ydChlKSxxLl9hbmltYXRpb25zPWgoYSwhMCxxLl9hbmltYXRpb25zKVswXSxiLmZvckVhY2goZnVuY3Rpb24oYil7YlsxXShhKX0pLGcoKSxsPXZvaWQgMH1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuX3NlcXVlbmNlTnVtYmVyLWIuX3NlcXVlbmNlTnVtYmVyfWZ1bmN0aW9uIGYoKXt0aGlzLl9hbmltYXRpb25zPVtdLHRoaXMuY3VycmVudFRpbWU9d2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2Uubm93KCk6MH1mdW5jdGlvbiBnKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoKX0pLG8ubGVuZ3RoPTB9ZnVuY3Rpb24gaChhLGMsZCl7cD0hMCxuPSExLGIudGltZWxpbmUuY3VycmVudFRpbWU9YSxtPSExO3ZhciBlPVtdLGY9W10sZz1bXSxoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oYil7Yi5fdGljayhhLGMpLGIuX2luRWZmZWN0PyhmLnB1c2goYi5fZWZmZWN0KSxiLl9tYXJrVGFyZ2V0KCkpOihlLnB1c2goYi5fZWZmZWN0KSxiLl91bm1hcmtUYXJnZXQoKSksYi5fbmVlZHNUaWNrJiYobT0hMCk7dmFyIGQ9Yi5faW5FZmZlY3R8fGIuX25lZWRzVGljaztiLl9pblRpbWVsaW5lPWQsZD9nLnB1c2goYik6aC5wdXNoKGIpfSksby5wdXNoLmFwcGx5KG8sZSksby5wdXNoLmFwcGx5KG8sZiksbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7fSkscD0hMSxbZyxoXX12YXIgaT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGo9W10saz0wO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7dmFyIGI9aysrO3JldHVybiAwPT1qLmxlbmd0aCYmaShkKSxqLnB1c2goW2IsYV0pLGJ9LHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZT1mdW5jdGlvbihhKXtqLmZvckVhY2goZnVuY3Rpb24oYil7YlswXT09YSYmKGJbMV09ZnVuY3Rpb24oKXt9KX0pfSxmLnByb3RvdHlwZT17X3BsYXk6ZnVuY3Rpb24oYyl7Yy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy50aW1pbmcpO3ZhciBkPW5ldyBiLkFuaW1hdGlvbihjKTtyZXR1cm4gZC5faWRsZT0hMSxkLl90aW1lbGluZT10aGlzLHRoaXMuX2FuaW1hdGlvbnMucHVzaChkKSxiLnJlc3RhcnQoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbihkKSxkfX07dmFyIGw9dm9pZCAwLG09ITEsbj0hMTtiLnJlc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbXx8KG09ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7fSksbj0hMCksbn0sYi5hcHBseURpcnRpZWRBbmltYXRpb249ZnVuY3Rpb24oYSl7aWYoIXApe2EuX21hcmtUYXJnZXQoKTt2YXIgYz1hLl90YXJnZXRBbmltYXRpb25zKCk7Yy5zb3J0KGUpLGgoYi50aW1lbGluZS5jdXJyZW50VGltZSwhMSxjLnNsaWNlKCkpWzFdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9cS5fYW5pbWF0aW9ucy5pbmRleE9mKGEpOy0xIT09YiYmcS5fYW5pbWF0aW9ucy5zcGxpY2UoYiwxKX0pLGcoKX19O3ZhciBvPVtdLHA9ITEscT1uZXcgZjtiLnRpbWVsaW5lPXF9KGEsYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKWMrPWFbZF0qYltkXTtyZXR1cm4gY31mdW5jdGlvbiBkKGEsYil7cmV0dXJuW2FbMF0qYlswXSthWzRdKmJbMV0rYVs4XSpiWzJdK2FbMTJdKmJbM10sYVsxXSpiWzBdK2FbNV0qYlsxXSthWzldKmJbMl0rYVsxM10qYlszXSxhWzJdKmJbMF0rYVs2XSpiWzFdK2FbMTBdKmJbMl0rYVsxNF0qYlszXSxhWzNdKmJbMF0rYVs3XSpiWzFdK2FbMTFdKmJbMl0rYVsxNV0qYlszXSxhWzBdKmJbNF0rYVs0XSpiWzVdK2FbOF0qYls2XSthWzEyXSpiWzddLGFbMV0qYls0XSthWzVdKmJbNV0rYVs5XSpiWzZdK2FbMTNdKmJbN10sYVsyXSpiWzRdK2FbNl0qYls1XSthWzEwXSpiWzZdK2FbMTRdKmJbN10sYVszXSpiWzRdK2FbN10qYls1XSthWzExXSpiWzZdK2FbMTVdKmJbN10sYVswXSpiWzhdK2FbNF0qYls5XSthWzhdKmJbMTBdK2FbMTJdKmJbMTFdLGFbMV0qYls4XSthWzVdKmJbOV0rYVs5XSpiWzEwXSthWzEzXSpiWzExXSxhWzJdKmJbOF0rYVs2XSpiWzldK2FbMTBdKmJbMTBdK2FbMTRdKmJbMTFdLGFbM10qYls4XSthWzddKmJbOV0rYVsxMV0qYlsxMF0rYVsxNV0qYlsxMV0sYVswXSpiWzEyXSthWzRdKmJbMTNdK2FbOF0qYlsxNF0rYVsxMl0qYlsxNV0sYVsxXSpiWzEyXSthWzVdKmJbMTNdK2FbOV0qYlsxNF0rYVsxM10qYlsxNV0sYVsyXSpiWzEyXSthWzZdKmJbMTNdK2FbMTBdKmJbMTRdK2FbMTRdKmJbMTVdLGFbM10qYlsxMl0rYVs3XSpiWzEzXSthWzExXSpiWzE0XSthWzE1XSpiWzE1XV19ZnVuY3Rpb24gZShhKXt2YXIgYj1hLnJhZHx8MDtyZXR1cm4oKGEuZGVnfHwwKS8zNjArKGEuZ3JhZHx8MCkvNDAwKyhhLnR1cm58fDApKSooMipNYXRoLlBJKStifWZ1bmN0aW9uIGYoYSl7c3dpdGNoKGEudCl7Y2FzZVwicm90YXRleFwiOnZhciBiPWUoYS5kWzBdKTtyZXR1cm5bMSwwLDAsMCwwLE1hdGguY29zKGIpLE1hdGguc2luKGIpLDAsMCwtTWF0aC5zaW4oYiksTWF0aC5jb3MoYiksMCwwLDAsMCwxXTtjYXNlXCJyb3RhdGV5XCI6dmFyIGI9ZShhLmRbMF0pO3JldHVybltNYXRoLmNvcyhiKSwwLC1NYXRoLnNpbihiKSwwLDAsMSwwLDAsTWF0aC5zaW4oYiksMCxNYXRoLmNvcyhiKSwwLDAsMCwwLDFdO2Nhc2VcInJvdGF0ZVwiOmNhc2VcInJvdGF0ZXpcIjp2YXIgYj1lKGEuZFswXSk7cmV0dXJuW01hdGguY29zKGIpLE1hdGguc2luKGIpLDAsMCwtTWF0aC5zaW4oYiksTWF0aC5jb3MoYiksMCwwLDAsMCwxLDAsMCwwLDAsMV07Y2FzZVwicm90YXRlM2RcIjp2YXIgYz1hLmRbMF0sZD1hLmRbMV0sZj1hLmRbMl0sYj1lKGEuZFszXSksZz1jKmMrZCpkK2YqZjtpZigwPT09ZyljPTEsZD0wLGY9MDtlbHNlIGlmKDEhPT1nKXt2YXIgaD1NYXRoLnNxcnQoZyk7Yy89aCxkLz1oLGYvPWh9dmFyIGk9TWF0aC5zaW4oYi8yKSxqPWkqTWF0aC5jb3MoYi8yKSxrPWkqaTtyZXR1cm5bMS0yKihkKmQrZipmKSprLDIqKGMqZCprK2YqaiksMiooYypmKmstZCpqKSwwLDIqKGMqZCprLWYqaiksMS0yKihjKmMrZipmKSprLDIqKGQqZiprK2MqaiksMCwyKihjKmYqaytkKmopLDIqKGQqZiprLWMqaiksMS0yKihjKmMrZCpkKSprLDAsMCwwLDAsMV07Y2FzZVwic2NhbGVcIjpyZXR1cm5bYS5kWzBdLDAsMCwwLDAsYS5kWzFdLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxleFwiOnJldHVyblthLmRbMF0sMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxleVwiOnJldHVyblsxLDAsMCwwLDAsYS5kWzBdLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxlelwiOnJldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLGEuZFswXSwwLDAsMCwwLDFdO2Nhc2VcInNjYWxlM2RcIjpyZXR1cm5bYS5kWzBdLDAsMCwwLDAsYS5kWzFdLDAsMCwwLDAsYS5kWzJdLDAsMCwwLDAsMV07Y2FzZVwic2tld1wiOnZhciBsPWUoYS5kWzBdKSxtPWUoYS5kWzFdKTtyZXR1cm5bMSxNYXRoLnRhbihtKSwwLDAsTWF0aC50YW4obCksMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtjYXNlXCJza2V3eFwiOnZhciBiPWUoYS5kWzBdKTtyZXR1cm5bMSwwLDAsMCxNYXRoLnRhbihiKSwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Nhc2VcInNrZXd5XCI6dmFyIGI9ZShhLmRbMF0pO3JldHVyblsxLE1hdGgudGFuKGIpLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07Y2FzZVwidHJhbnNsYXRlXCI6dmFyIGM9YS5kWzBdLnB4fHwwLGQ9YS5kWzFdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCxjLGQsMCwxXTtjYXNlXCJ0cmFuc2xhdGV4XCI6dmFyIGM9YS5kWzBdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCxjLDAsMCwxXTtjYXNlXCJ0cmFuc2xhdGV5XCI6dmFyIGQ9YS5kWzBdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLGQsMCwxXTtjYXNlXCJ0cmFuc2xhdGV6XCI6dmFyIGY9YS5kWzBdLnB4fHwwO3JldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsZiwxXTtjYXNlXCJ0cmFuc2xhdGUzZFwiOnZhciBjPWEuZFswXS5weHx8MCxkPWEuZFsxXS5weHx8MCxmPWEuZFsyXS5weHx8MDtyZXR1cm5bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsYyxkLGYsMV07Y2FzZVwicGVyc3BlY3RpdmVcIjpyZXR1cm5bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLGEuZFswXS5weD8tMS9hLmRbMF0ucHg6MCwwLDAsMCwxXTtjYXNlXCJtYXRyaXhcIjpyZXR1cm5bYS5kWzBdLGEuZFsxXSwwLDAsYS5kWzJdLGEuZFszXSwwLDAsMCwwLDEsMCxhLmRbNF0sYS5kWzVdLDAsMV07Y2FzZVwibWF0cml4M2RcIjpyZXR1cm4gYS5kfX1mdW5jdGlvbiBnKGEpe3JldHVybiAwPT09YS5sZW5ndGg/WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdOmEubWFwKGYpLnJlZHVjZShkKX1mdW5jdGlvbiBoKGEpe3JldHVybltpKGcoYSkpXX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGFbMF1bMF0qYVsxXVsxXSphWzJdWzJdK2FbMV1bMF0qYVsyXVsxXSphWzBdWzJdK2FbMl1bMF0qYVswXVsxXSphWzFdWzJdLWFbMF1bMl0qYVsxXVsxXSphWzJdWzBdLWFbMV1bMl0qYVsyXVsxXSphWzBdWzBdLWFbMl1bMl0qYVswXVsxXSphWzFdWzBdfWZ1bmN0aW9uIGIoYil7Zm9yKHZhciBjPTEvYShiKSxkPWJbMF1bMF0sZT1iWzBdWzFdLGY9YlswXVsyXSxnPWJbMV1bMF0saD1iWzFdWzFdLGk9YlsxXVsyXSxqPWJbMl1bMF0saz1iWzJdWzFdLGw9YlsyXVsyXSxtPVtbKGgqbC1pKmspKmMsKGYqay1lKmwpKmMsKGUqaS1mKmgpKmMsMF0sWyhpKmotZypsKSpjLChkKmwtZipqKSpjLChmKmctZCppKSpjLDBdLFsoZyprLWgqaikqYywoaiplLWQqaykqYywoZCpoLWUqZykqYywwXV0sbj1bXSxvPTA7bzwzO28rKyl7Zm9yKHZhciBwPTAscT0wO3E8MztxKyspcCs9YlszXVtxXSptW3FdW29dO24ucHVzaChwKX1yZXR1cm4gbi5wdXNoKDEpLG0ucHVzaChuKSxtfWZ1bmN0aW9uIGQoYSl7cmV0dXJuW1thWzBdWzBdLGFbMV1bMF0sYVsyXVswXSxhWzNdWzBdXSxbYVswXVsxXSxhWzFdWzFdLGFbMl1bMV0sYVszXVsxXV0sW2FbMF1bMl0sYVsxXVsyXSxhWzJdWzJdLGFbM11bMl1dLFthWzBdWzNdLGFbMV1bM10sYVsyXVszXSxhWzNdWzNdXV19ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDw0O2QrKyl7Zm9yKHZhciBlPTAsZj0wO2Y8NDtmKyspZSs9YVtmXSpiW2ZdW2RdO2MucHVzaChlKX1yZXR1cm4gY31mdW5jdGlvbiBmKGEpe3ZhciBiPWcoYSk7cmV0dXJuW2FbMF0vYixhWzFdL2IsYVsyXS9iXX1mdW5jdGlvbiBnKGEpe3JldHVybiBNYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSthWzJdKmFbMl0pfWZ1bmN0aW9uIGgoYSxiLGMsZCl7cmV0dXJuW2MqYVswXStkKmJbMF0sYyphWzFdK2QqYlsxXSxjKmFbMl0rZCpiWzJdXX1mdW5jdGlvbiBpKGEsYil7cmV0dXJuW2FbMV0qYlsyXS1hWzJdKmJbMV0sYVsyXSpiWzBdLWFbMF0qYlsyXSxhWzBdKmJbMV0tYVsxXSpiWzBdXX1mdW5jdGlvbiBqKGope3ZhciBrPVtqLnNsaWNlKDAsNCksai5zbGljZSg0LDgpLGouc2xpY2UoOCwxMiksai5zbGljZSgxMiwxNildO2lmKDEhPT1rWzNdWzNdKXJldHVybiBudWxsO2Zvcih2YXIgbD1bXSxtPTA7bTw0O20rKylsLnB1c2goa1ttXS5zbGljZSgpKTtmb3IodmFyIG09MDttPDM7bSsrKWxbbV1bM109MDtpZigwPT09YShsKSlyZXR1cm4gbnVsbDt2YXIgbixvPVtdO2tbMF1bM118fGtbMV1bM118fGtbMl1bM10/KG8ucHVzaChrWzBdWzNdKSxvLnB1c2goa1sxXVszXSksby5wdXNoKGtbMl1bM10pLG8ucHVzaChrWzNdWzNdKSxuPWUobyxkKGIobCkpKSk6bj1bMCwwLDAsMV07dmFyIHA9a1szXS5zbGljZSgwLDMpLHE9W107cS5wdXNoKGtbMF0uc2xpY2UoMCwzKSk7dmFyIHI9W107ci5wdXNoKGcocVswXSkpLHFbMF09ZihxWzBdKTt2YXIgcz1bXTtxLnB1c2goa1sxXS5zbGljZSgwLDMpKSxzLnB1c2goYyhxWzBdLHFbMV0pKSxxWzFdPWgocVsxXSxxWzBdLDEsLXNbMF0pLHIucHVzaChnKHFbMV0pKSxxWzFdPWYocVsxXSksc1swXS89clsxXSxxLnB1c2goa1syXS5zbGljZSgwLDMpKSxzLnB1c2goYyhxWzBdLHFbMl0pKSxxWzJdPWgocVsyXSxxWzBdLDEsLXNbMV0pLHMucHVzaChjKHFbMV0scVsyXSkpLHFbMl09aChxWzJdLHFbMV0sMSwtc1syXSksci5wdXNoKGcocVsyXSkpLHFbMl09ZihxWzJdKSxzWzFdLz1yWzJdLHNbMl0vPXJbMl07dmFyIHQ9aShxWzFdLHFbMl0pO2lmKGMocVswXSx0KTwwKWZvcih2YXIgbT0wO208MzttKyspclttXSo9LTEscVttXVswXSo9LTEscVttXVsxXSo9LTEscVttXVsyXSo9LTE7dmFyIHUsdix3PXFbMF1bMF0rcVsxXVsxXStxWzJdWzJdKzE7cmV0dXJuIHc+MWUtND8odT0uNS9NYXRoLnNxcnQodyksdj1bKHFbMl1bMV0tcVsxXVsyXSkqdSwocVswXVsyXS1xWzJdWzBdKSp1LChxWzFdWzBdLXFbMF1bMV0pKnUsLjI1L3VdKTpxWzBdWzBdPnFbMV1bMV0mJnFbMF1bMF0+cVsyXVsyXT8odT0yKk1hdGguc3FydCgxK3FbMF1bMF0tcVsxXVsxXS1xWzJdWzJdKSx2PVsuMjUqdSwocVswXVsxXStxWzFdWzBdKS91LChxWzBdWzJdK3FbMl1bMF0pL3UsKHFbMl1bMV0tcVsxXVsyXSkvdV0pOnFbMV1bMV0+cVsyXVsyXT8odT0yKk1hdGguc3FydCgxK3FbMV1bMV0tcVswXVswXS1xWzJdWzJdKSx2PVsocVswXVsxXStxWzFdWzBdKS91LC4yNSp1LChxWzFdWzJdK3FbMl1bMV0pL3UsKHFbMF1bMl0tcVsyXVswXSkvdV0pOih1PTIqTWF0aC5zcXJ0KDErcVsyXVsyXS1xWzBdWzBdLXFbMV1bMV0pLHY9WyhxWzBdWzJdK3FbMl1bMF0pL3UsKHFbMV1bMl0rcVsyXVsxXSkvdSwuMjUqdSwocVsxXVswXS1xWzBdWzFdKS91XSksW3AscixzLHYsbl19cmV0dXJuIGp9KCk7YS5kb3Q9YyxhLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uPWgsYS50cmFuc2Zvcm1MaXN0VG9NYXRyaXg9Z30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3ZhciBjPWEuZXhlYyhiKTtpZihjKXJldHVybiBjPWEuaWdub3JlQ2FzZT9jWzBdLnRvTG93ZXJDYXNlKCk6Y1swXSxbYyxiLnN1YnN0cihjLmxlbmd0aCldfWZ1bmN0aW9uIGMoYSxiKXtiPWIucmVwbGFjZSgvXlxccyovLFwiXCIpO3ZhciBjPWEoYik7aWYoYylyZXR1cm5bY1swXSxjWzFdLnJlcGxhY2UoL15cXHMqLyxcIlwiKV19ZnVuY3Rpb24gZChhLGQsZSl7YT1jLmJpbmQobnVsbCxhKTtmb3IodmFyIGY9W107Oyl7dmFyIGc9YShlKTtpZighZylyZXR1cm5bZixlXTtpZihmLnB1c2goZ1swXSksZT1nWzFdLCEoZz1iKGQsZSkpfHxcIlwiPT1nWzFdKXJldHVybltmLGVdO2U9Z1sxXX19ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz0wLGQ9MDtkPGIubGVuZ3RoJiYoIS9cXHN8LC8udGVzdChiW2RdKXx8MCE9Yyk7ZCsrKWlmKFwiKFwiPT1iW2RdKWMrKztlbHNlIGlmKFwiKVwiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fFwiXCI9PWZbMF0pcmV0dXJuO3ZvaWQgMCE9PWZbMF0mJmQucHVzaChmWzBdKSxjPWZbMV19aWYoXCJcIj09YylyZXR1cm4gZH1mdW5jdGlvbiBqKGEsYixjLGQsZSl7Zm9yKHZhciBnPVtdLGg9W10saT1bXSxqPWYoZC5sZW5ndGgsZS5sZW5ndGgpLGs9MDtrPGo7aysrKXt2YXIgbD1iKGRbayVkLmxlbmd0aF0sZVtrJWUubGVuZ3RoXSk7aWYoIWwpcmV0dXJuO2cucHVzaChsWzBdKSxoLnB1c2gobFsxXSksaS5wdXNoKGxbMl0pfXJldHVybltnLGgsZnVuY3Rpb24oYil7dmFyIGQ9Yi5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gaVtiXShhKX0pLmpvaW4oYyk7cmV0dXJuIGE/YShkKTpkfV19ZnVuY3Rpb24gayhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9W10sZj1bXSxnPTAsaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWZbY10oYVtjXSk7cmV0dXJuIGJ9XX1hLmNvbnN1bWVUb2tlbj1iLGEuY29uc3VtZVRyaW1tZWQ9YyxhLmNvbnN1bWVSZXBlYXRlZD1kLGEuY29uc3VtZVBhcmVudGhlc2lzZWQ9ZSxhLmlnbm9yZT1nLGEub3B0aW9uYWw9aCxhLmNvbnN1bWVMaXN0PWksYS5tZXJnZU5lc3RlZFJlcGVhdGVkPWouYmluZChudWxsLG51bGwpLGEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQ9aixhLm1lcmdlTGlzdD1rfShiKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe2Z1bmN0aW9uIGMoYil7dmFyIGM9YS5jb25zdW1lVG9rZW4oL15pbnNldC9pLGIpO3JldHVybiBjPyhkLmluc2V0PSEwLGMpOihjPWEuY29uc3VtZUxlbmd0aE9yUGVyY2VudChiKSk/KGQubGVuZ3Rocy5wdXNoKGNbMF0pLGMpOihjPWEuY29uc3VtZUNvbG9yKGIpLGM/KGQuY29sb3I9Y1swXSxjKTp2b2lkIDApfXZhciBkPXtpbnNldDohMSxsZW5ndGhzOltdLGNvbG9yOm51bGx9LGU9YS5jb25zdW1lUmVwZWF0ZWQoYywvXi8sYik7aWYoZSYmZVswXS5sZW5ndGgpcmV0dXJuW2QsZVsxXV19ZnVuY3Rpb24gYyhjKXt2YXIgZD1hLmNvbnN1bWVSZXBlYXRlZChiLC9eLC8sYyk7aWYoZCYmXCJcIj09ZFsxXSlyZXR1cm4gZFswXX1mdW5jdGlvbiBkKGIsYyl7Zm9yKDtiLmxlbmd0aHMubGVuZ3RoPE1hdGgubWF4KGIubGVuZ3Rocy5sZW5ndGgsYy5sZW5ndGhzLmxlbmd0aCk7KWIubGVuZ3Rocy5wdXNoKHtweDowfSk7Zm9yKDtjLmxlbmd0aHMubGVuZ3RoPE1hdGgubWF4KGIubGVuZ3Rocy5sZW5ndGgsYy5sZW5ndGhzLmxlbmd0aCk7KWMubGVuZ3Rocy5wdXNoKHtweDowfSk7aWYoYi5pbnNldD09Yy5pbnNldCYmISFiLmNvbG9yPT0hIWMuY29sb3Ipe2Zvcih2YXIgZCxlPVtdLGY9W1tdLDBdLGc9W1tdLDBdLGg9MDtoPGIubGVuZ3Rocy5sZW5ndGg7aCsrKXt2YXIgaT1hLm1lcmdlRGltZW5zaW9ucyhiLmxlbmd0aHNbaF0sYy5sZW5ndGhzW2hdLDI9PWgpO2ZbMF0ucHVzaChpWzBdKSxnWzBdLnB1c2goaVsxXSksZS5wdXNoKGlbMl0pfWlmKGIuY29sb3ImJmMuY29sb3Ipe3ZhciBqPWEubWVyZ2VDb2xvcnMoYi5jb2xvcixjLmNvbG9yKTtmWzFdPWpbMF0sZ1sxXT1qWzFdLGQ9alsyXX1yZXR1cm5bZixnLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1iLmluc2V0P1wiaW5zZXQgXCI6XCIgXCIsZj0wO2Y8ZS5sZW5ndGg7ZisrKWMrPWVbZl0oYVswXVtmXSkrXCIgXCI7cmV0dXJuIGQmJihjKz1kKGFbMV0pKSxjfV19fWZ1bmN0aW9uIGUoYixjLGQsZSl7ZnVuY3Rpb24gZihhKXtyZXR1cm57aW5zZXQ6YSxjb2xvcjpbMCwwLDAsMF0sbGVuZ3Roczpbe3B4OjB9LHtweDowfSx7cHg6MH0se3B4OjB9XX19Zm9yKHZhciBnPVtdLGg9W10saT0wO2k8ZC5sZW5ndGh8fGk8ZS5sZW5ndGg7aSsrKXt2YXIgaj1kW2ldfHxmKGVbaV0uaW5zZXQpLGs9ZVtpXXx8ZihkW2ldLmluc2V0KTtnLnB1c2goaiksaC5wdXNoKGspfXJldHVybiBhLm1lcmdlTmVzdGVkUmVwZWF0ZWQoYixjLGcsaCl9dmFyIGY9ZS5iaW5kKG51bGwsZCxcIiwgXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFtcImJveC1zaGFkb3dcIixcInRleHQtc2hhZG93XCJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBhLnRvRml4ZWQoMykucmVwbGFjZSgvMCskLyxcIlwiKS5yZXBsYWNlKC9cXC4kLyxcIlwiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXFxzKlstK10/KFxcZCpcXC4pP1xcZCtcXHMqJC8udGVzdChhKSlyZXR1cm4gTnVtYmVyKGEpfWZ1bmN0aW9uIGYoYSxiKXtyZXR1cm5bYSxiLGNdfWZ1bmN0aW9uIGcoYSxiKXtpZigwIT1hKXJldHVybiBpKDAsMS8wKShhLGIpfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm5bYSxiLGZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnJvdW5kKGQoMSwxLzAsYSkpfV19ZnVuY3Rpb24gaShhLGIpe3JldHVybiBmdW5jdGlvbihlLGYpe3JldHVybltlLGYsZnVuY3Rpb24oZSl7cmV0dXJuIGMoZChhLGIsZSkpfV19fWZ1bmN0aW9uIGooYSl7dmFyIGI9YS50cmltKCkuc3BsaXQoL1xccypbXFxzLF1cXHMqLyk7aWYoMCE9PWIubGVuZ3RoKXtmb3IodmFyIGM9W10sZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZj1lKGJbZF0pO2lmKHZvaWQgMD09PWYpcmV0dXJuO2MucHVzaChmKX1yZXR1cm4gY319ZnVuY3Rpb24gayhhLGIpe2lmKGEubGVuZ3RoPT1iLmxlbmd0aClyZXR1cm5bYSxiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChjKS5qb2luKFwiIFwiKX1dfWZ1bmN0aW9uIGwoYSxiKXtyZXR1cm5bYSxiLE1hdGgucm91bmRdfWEuY2xhbXA9ZCxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGosayxbXCJzdHJva2UtZGFzaGFycmF5XCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksW1wiYm9yZGVyLWltYWdlLXdpZHRoXCIsXCJsaW5lLWhlaWdodFwiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGkoMCwxKSxbXCJvcGFjaXR5XCIsXCJzaGFwZS1pbWFnZS10aHJlc2hvbGRcIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxnLFtcImZsZXgtZ3Jvd1wiLFwiZmxleC1zaHJpbmtcIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFtcIm9ycGhhbnNcIixcIndpZG93c1wiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGwsW1wiei1pbmRleFwiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKFwidmlzaWJsZVwiPT1hfHxcInZpc2libGVcIj09YilyZXR1cm5bMCwxLGZ1bmN0aW9uKGMpe3JldHVybiBjPD0wP2E6Yz49MT9iOlwidmlzaWJsZVwifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbXCJ2aXNpYmlsaXR5XCJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2E9YS50cmltKCksZi5maWxsU3R5bGU9XCIjMDAwXCIsZi5maWxsU3R5bGU9YTt2YXIgYj1mLmZpbGxTdHlsZTtpZihmLmZpbGxTdHlsZT1cIiNmZmZcIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLFwicmdiYShcIitiLmpvaW4oXCIsXCIpK1wiKVwifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiY2FudmFzXCIpO2Uud2lkdGg9ZS5oZWlnaHQ9MTt2YXIgZj1lLmdldENvbnRleHQoXCIyZFwiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXCJib3JkZXItYm90dG9tLWNvbG9yXCIsXCJib3JkZXItbGVmdC1jb2xvclwiLFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCIsXCJib3JkZXItdG9wLWNvbG9yXCIsXCJjb2xvclwiLFwiZmlsbFwiLFwiZmxvb2QtY29sb3JcIixcImxpZ2h0aW5nLWNvbG9yXCIsXCJvdXRsaW5lLWNvbG9yXCIsXCJzdG9wLWNvbG9yXCIsXCJzdHJva2VcIixcInRleHQtZGVjb3JhdGlvbi1jb2xvclwiXSksYS5jb25zdW1lQ29sb3I9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsYyksYS5tZXJnZUNvbG9ycz1kfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7ZnVuY3Rpb24gYigpe3ZhciBiPWguZXhlYyhhKTtnPWI/YlswXTp2b2lkIDB9ZnVuY3Rpb24gYygpe3ZhciBhPU51bWJlcihnKTtyZXR1cm4gYigpLGF9ZnVuY3Rpb24gZCgpe2lmKFwiKFwiIT09ZylyZXR1cm4gYygpO2IoKTt2YXIgYT1mKCk7cmV0dXJuXCIpXCIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpO1wiKlwiPT09Z3x8XCIvXCI9PT1nOyl7dmFyIGM9ZztiKCk7dmFyIGU9ZCgpO1wiKlwiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7XCIrXCI9PT1nfHxcIi1cIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZD1lKCk7XCIrXCI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1xcK1xcLVxcd1xcLl0rfFtcXChcXClcXCpcXC9dKS9nO3JldHVybiBiKCksZigpfWZ1bmN0aW9uIGQoYSxiKXtpZihcIjBcIj09KGI9Yi50cmltKCkudG9Mb3dlckNhc2UoKSkmJlwicHhcIi5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1xcKC9nLFwiKFwiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsXCJVXCIrYX0pO2Zvcih2YXIgZT1cIlUoXCIrYS5zb3VyY2UrXCIpXCIsZj1iLnJlcGxhY2UoL1stK10/KFxcZCpcXC4pP1xcZCsoW0VlXVstK10/XFxkKyk/L2csXCJOXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIk5cIitlLFwiZ1wiKSxcIkRcIikucmVwbGFjZSgvXFxzWystXVxccy9nLFwiT1wiKS5yZXBsYWNlKC9cXHMvZyxcIlwiKSxnPVsvTlxcKihEKS9nLC8oTnxEKVsqXFwvXU4vZywvKE58RClPXFwxL2csL1xcKChOfEQpXFwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sXCIkMVwiKSxoPTApOmgrKztpZihcIkRcIj09Zil7Zm9yKHZhciBpIGluIGQpe3ZhciBqPWMoYi5yZXBsYWNlKG5ldyBSZWdFeHAoXCJVXCIraSxcImdcIiksXCJcIikucmVwbGFjZShuZXcgUmVnRXhwKGUsXCJnXCIpLFwiKjBcIikpO2lmKCFpc0Zpbml0ZShqKSlyZXR1cm47ZFtpXT1qfXJldHVybiBkfX19ZnVuY3Rpb24gZShhLGIpe3JldHVybiBmKGEsYiwhMCl9ZnVuY3Rpb24gZihiLGMsZCl7dmFyIGUsZj1bXTtmb3IoZSBpbiBiKWYucHVzaChlKTtmb3IoZSBpbiBjKWYuaW5kZXhPZihlKTwwJiZmLnB1c2goZSk7cmV0dXJuIGI9Zi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV18fDB9KSxjPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfHwwfSksW2IsYyxmdW5jdGlvbihiKXt2YXIgYz1iLm1hcChmdW5jdGlvbihjLGUpe3JldHVybiAxPT1iLmxlbmd0aCYmZCYmKGM9TWF0aC5tYXgoYywwKSksYS5udW1iZXJUb1N0cmluZyhjKStmW2VdfSkuam9pbihcIiArIFwiKTtyZXR1cm4gYi5sZW5ndGg+MT9cImNhbGMoXCIrYytcIilcIjpjfV19dmFyIGc9XCJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjXCIsaD1kLmJpbmQobnVsbCxuZXcgUmVnRXhwKGcsXCJnXCIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZytcInwlXCIsXCJnXCIpKSxqPWQuYmluZChudWxsLC9kZWd8cmFkfGdyYWR8dHVybi9nKTthLnBhcnNlTGVuZ3RoPWgsYS5wYXJzZUxlbmd0aE9yUGVyY2VudD1pLGEuY29uc3VtZUxlbmd0aE9yUGVyY2VudD1hLmNvbnN1bWVQYXJlbnRoZXNpc2VkLmJpbmQobnVsbCxpKSxhLnBhcnNlQW5nbGU9aixhLm1lcmdlRGltZW5zaW9ucz1mO3ZhciBrPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGgpLGw9YS5jb25zdW1lUmVwZWF0ZWQuYmluZCh2b2lkIDAsaywvXi8pLG09YS5jb25zdW1lUmVwZWF0ZWQuYmluZCh2b2lkIDAsbCwvXiwvKTthLmNvbnN1bWVTaXplUGFpckxpc3Q9bTt2YXIgbj1mdW5jdGlvbihhKXt2YXIgYj1tKGEpO2lmKGImJlwiXCI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsXCIgXCIpLHA9YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLG8sXCIsXCIpO2EubWVyZ2VOb25OZWdhdGl2ZVNpemVQYWlyPW8sYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihuLHAsW1wiYmFja2dyb3VuZC1zaXplXCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbXCJib3JkZXItYm90dG9tLXdpZHRoXCIsXCJib3JkZXItaW1hZ2Utd2lkdGhcIixcImJvcmRlci1sZWZ0LXdpZHRoXCIsXCJib3JkZXItcmlnaHQtd2lkdGhcIixcImJvcmRlci10b3Atd2lkdGhcIixcImZsZXgtYmFzaXNcIixcImZvbnQtc2l6ZVwiLFwiaGVpZ2h0XCIsXCJsaW5lLWhlaWdodFwiLFwibWF4LWhlaWdodFwiLFwibWF4LXdpZHRoXCIsXCJvdXRsaW5lLXdpZHRoXCIsXCJ3aWR0aFwiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihpLGYsW1wiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c1wiLFwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXNcIixcImJvcmRlci10b3AtbGVmdC1yYWRpdXNcIixcImJvcmRlci10b3AtcmlnaHQtcmFkaXVzXCIsXCJib3R0b21cIixcImxlZnRcIixcImxldHRlci1zcGFjaW5nXCIsXCJtYXJnaW4tYm90dG9tXCIsXCJtYXJnaW4tbGVmdFwiLFwibWFyZ2luLXJpZ2h0XCIsXCJtYXJnaW4tdG9wXCIsXCJtaW4taGVpZ2h0XCIsXCJtaW4td2lkdGhcIixcIm91dGxpbmUtb2Zmc2V0XCIsXCJwYWRkaW5nLWJvdHRvbVwiLFwicGFkZGluZy1sZWZ0XCIsXCJwYWRkaW5nLXJpZ2h0XCIsXCJwYWRkaW5nLXRvcFwiLFwicGVyc3BlY3RpdmVcIixcInJpZ2h0XCIsXCJzaGFwZS1tYXJnaW5cIixcInN0cm9rZS1kYXNob2Zmc2V0XCIsXCJ0ZXh0LWluZGVudFwiLFwidG9wXCIsXCJ2ZXJ0aWNhbC1hbGlnblwiLFwid29yZC1zcGFjaW5nXCJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlxcKC8pKSxhLmNvbnN1bWVSZXBlYXRlZC5iaW5kKG51bGwsYywvXiwvKSxhLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15cXCkvKSldLGIpO2lmKGQmJjQ9PWRbMF0ubGVuZ3RoKXJldHVybiBkWzBdfWZ1bmN0aW9uIGUoYixjKXtyZXR1cm5cImF1dG9cIj09Ynx8XCJhdXRvXCI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKFwiYXV0b1wiPT1lKXJldHVyblwiYXV0b1wiO3ZhciBmPWEubWVyZ2VEaW1lbnNpb25zKGUsZSk7cmV0dXJuIGZbMl0oZlswXSl9XTphLm1lcmdlRGltZW5zaW9ucyhiLGMpfWZ1bmN0aW9uIGYoYSl7cmV0dXJuXCJyZWN0KFwiK2ErXCIpXCJ9dmFyIGc9YS5tZXJnZVdyYXBwZWROZXN0ZWRSZXBlYXRlZC5iaW5kKG51bGwsZixlLFwiLCBcIik7YS5wYXJzZUJveD1kLGEubWVyZ2VCb3hlcz1nLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZCxnLFtcImNsaXBcIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoXCJub25lXCI9PShiPWIudG9Mb3dlckNhc2UoKS50cmltKCkpKXJldHVybltdO2Zvcih2YXIgYyxkPS9cXHMqKFxcdyspXFwoKFteKV0qKVxcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KFwiLFwiKSxqPWhbMF07aWYoai5sZW5ndGg8aS5sZW5ndGgpcmV0dXJuO2Zvcih2YXIgaz1bXSxvPTA7bzxqLmxlbmd0aDtvKyspe3ZhciBwLHE9aVtvXSxyPWpbb107aWYodm9pZCAwPT09KHA9cT97QTpmdW5jdGlvbihiKXtyZXR1cm5cIjBcIj09Yi50cmltKCk/bTphLnBhcnNlQW5nbGUoYil9LE46YS5wYXJzZU51bWJlcixUOmEucGFyc2VMZW5ndGhPclBlcmNlbnQsTDphLnBhcnNlTGVuZ3RofVtyLnRvVXBwZXJDYXNlKCldKHEpOnthOm0sbjprWzBdLHQ6bH1bcl0pKXJldHVybjtrLnB1c2gocCl9aWYoZS5wdXNoKHt0OmcsZDprfSksZC5sYXN0SW5kZXg9PWIubGVuZ3RoKXJldHVybiBlfX1mdW5jdGlvbiBmKGEpe3JldHVybiBhLnRvRml4ZWQoNikucmVwbGFjZShcIi4wMDAwMDBcIixcIlwiKX1mdW5jdGlvbiBnKGIsYyl7aWYoYi5kZWNvbXBvc2l0aW9uUGFpciE9PWMpe2IuZGVjb21wb3NpdGlvblBhaXI9Yzt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uKGIpfWlmKGMuZGVjb21wb3NpdGlvblBhaXIhPT1iKXtjLmRlY29tcG9zaXRpb25QYWlyPWI7dmFyIGU9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihjKX1yZXR1cm4gbnVsbD09ZFswXXx8bnVsbD09ZVswXT9bWyExXSxbITBdLGZ1bmN0aW9uKGEpe3JldHVybiBhP2NbMF0uZDpiWzBdLmR9XTooZFswXS5wdXNoKDApLGVbMF0ucHVzaCgxKSxbZCxlLGZ1bmN0aW9uKGIpe3ZhciBjPWEucXVhdChkWzBdWzNdLGVbMF1bM10sYls1XSk7cmV0dXJuIGEuY29tcG9zZU1hdHJpeChiWzBdLGJbMV0sYlsyXSxjLGJbNF0pLm1hcChmKS5qb2luKFwiLFwiKX1dKX1mdW5jdGlvbiBoKGEpe3JldHVybiBhLnJlcGxhY2UoL1t4eV0vLFwiXCIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLyxcIjNkXCIpfWZ1bmN0aW9uIGooYixjKXt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uJiYhMCxlPSExO2lmKCFiLmxlbmd0aHx8IWMubGVuZ3RoKXtiLmxlbmd0aHx8KGU9ITAsYj1jLGM9W10pO2Zvcih2YXIgZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaj1iW2ZdLnQsaz1iW2ZdLmQsbD1cInNjYWxlXCI9PWouc3Vic3RyKDAsNSk/MTowO2MucHVzaCh7dDpqLGQ6ay5tYXAoZnVuY3Rpb24oYSl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm5cInBlcnNwZWN0aXZlXCI9PWEmJlwicGVyc3BlY3RpdmVcIj09Ynx8KFwibWF0cml4XCI9PWF8fFwibWF0cml4M2RcIj09YSkmJihcIm1hdHJpeFwiPT1ifHxcIm1hdHJpeDNkXCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bW1wibWF0cml4XCIsW3JbMl1dXV19ZWxzZSBmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGoscz1iW2ZdLnQsdD1jW2ZdLnQsdT1iW2ZdLmQsdj1jW2ZdLmQsdz1uW3NdLHg9blt0XTtpZihtKHMsdCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKFtiW2ZdXSxbY1tmXV0pO28ucHVzaChyWzBdKSxwLnB1c2goclsxXSkscS5wdXNoKFtcIm1hdHJpeFwiLFtyWzJdXV0pfWVsc2V7aWYocz09dClqPXM7ZWxzZSBpZih3WzJdJiZ4WzJdJiZoKHMpPT1oKHQpKWo9aChzKSx1PXdbMl0odSksdj14WzJdKHYpO2Vsc2V7aWYoIXdbMV18fCF4WzFdfHxpKHMpIT1pKHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhiLGMpO289W3JbMF1dLHA9W3JbMV1dLHE9W1tcIm1hdHJpeFwiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz1cIm51bWJlclwiPT10eXBlb2YgdVtCXT9hLm1lcmdlTnVtYmVyczphLm1lcmdlRGltZW5zaW9ucyxyPUModVtCXSx2W0JdKTt5W0JdPXJbMF0seltCXT1yWzFdLEEucHVzaChyWzJdKX1vLnB1c2goeSkscC5wdXNoKHopLHEucHVzaChbaixBXSl9fWlmKGUpe3ZhciBEPW87bz1wLHA9RH1yZXR1cm5bbyxwLGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWEubWFwKGZ1bmN0aW9uKGEsYyl7cmV0dXJuIHFbYl1bMV1bY10oYSl9KS5qb2luKFwiLFwiKTtyZXR1cm5cIm1hdHJpeFwiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdChcIixcIikubGVuZ3RoJiYocVtiXVswXT1cIm1hdHJpeDNkXCIpLHFbYl1bMF0rXCIoXCIrYytcIilcIn0pLmpvaW4oXCIgXCIpfV19dmFyIGs9bnVsbCxsPXtweDowfSxtPXtkZWc6MH0sbj17bWF0cml4OltcIk5OTk5OTlwiLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbXCJOTk5OTk5OTk5OTk5OTk5OXCIsZF0scm90YXRlOltcIkFcIl0scm90YXRleDpbXCJBXCJdLHJvdGF0ZXk6W1wiQVwiXSxyb3RhdGV6OltcIkFcIl0scm90YXRlM2Q6W1wiTk5OQVwiXSxwZXJzcGVjdGl2ZTpbXCJMXCJdLHNjYWxlOltcIk5uXCIsYyhbayxrLDFdKSxkXSxzY2FsZXg6W1wiTlwiLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbXCJOXCIsYyhbMSxrLDFdKSxjKFsxLGtdKV0sc2NhbGV6OltcIk5cIixjKFsxLDEsa10pXSxzY2FsZTNkOltcIk5OTlwiLGRdLHNrZXc6W1wiQWFcIixudWxsLGRdLHNrZXd4OltcIkFcIixudWxsLGMoW2ssbV0pXSxza2V3eTpbXCJBXCIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOltcIlR0XCIsYyhbayxrLGxdKSxkXSx0cmFuc2xhdGV4OltcIlRcIixjKFtrLGwsbF0pLGMoW2ssbF0pXSx0cmFuc2xhdGV5OltcIlRcIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OltcIkxcIixjKFtsLGwsa10pXSx0cmFuc2xhdGUzZDpbXCJUVExcIixkXX07YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGosW1widHJhbnNmb3JtXCJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVyblwibWF0cml4KFwiK2YoY1swXSkrXCIgXCIrZihjWzFdKStcIiBcIitmKGNbNF0pK1wiIFwiK2YoY1s1XSkrXCIgXCIrZihjWzEyXSkrXCIgXCIrZihjWzEzXSkrXCIpXCJ9fShiKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPU51bWJlcihhKTtpZighKGlzTmFOKGIpfHxiPDEwMHx8Yj45MDB8fGIlMTAwIT0wKSlyZXR1cm4gYn1mdW5jdGlvbiBjKGIpe3JldHVybiBiPTEwMCpNYXRoLnJvdW5kKGIvMTAwKSxiPWEuY2xhbXAoMTAwLDkwMCxiKSw0MDA9PT1iP1wibm9ybWFsXCI6NzAwPT09Yj9cImJvbGRcIjpTdHJpbmcoYil9ZnVuY3Rpb24gZChhLGIpe3JldHVyblthLGIsY119YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihiLGQsW1wiZm9udC13ZWlnaHRcIl0pfShiKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbY109LWFbY107cmV0dXJuIGJ9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gYS5jb25zdW1lVG9rZW4oL14obGVmdHxjZW50ZXJ8cmlnaHR8dG9wfGJvdHRvbSlcXGIvaSxiKXx8YS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50KGIpfWZ1bmN0aW9uIGQoYixkKXt2YXIgZT1hLmNvbnN1bWVSZXBlYXRlZChjLC9eLyxkKTtpZihlJiZcIlwiPT1lWzFdKXt2YXIgZj1lWzBdO2lmKGZbMF09ZlswXXx8XCJjZW50ZXJcIixmWzFdPWZbMV18fFwiY2VudGVyXCIsMz09YiYmKGZbMl09ZlsyXXx8e3B4OjB9KSxmLmxlbmd0aD09Yil7aWYoL3RvcHxib3R0b20vLnRlc3QoZlswXSl8fC9sZWZ0fHJpZ2h0Ly50ZXN0KGZbMV0pKXt2YXIgaD1mWzBdO2ZbMF09ZlsxXSxmWzFdPWh9aWYoL2xlZnR8cmlnaHR8Y2VudGVyfE9iamVjdC8udGVzdChmWzBdKSYmL3RvcHxib3R0b218Y2VudGVyfE9iamVjdC8udGVzdChmWzFdKSlyZXR1cm4gZi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGE/YTpnW2FdfSl9fX1mdW5jdGlvbiBlKGQpe3ZhciBlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGQpO2lmKGUpe2Zvcih2YXIgZj1lWzBdLGg9W3tcIiVcIjo1MH0se1wiJVwiOjUwfV0saT0wLGo9ITEsaz0wO2s8Zi5sZW5ndGg7aysrKXt2YXIgbD1mW2tdO1wic3RyaW5nXCI9PXR5cGVvZiBsPyhqPS9ib3R0b218cmlnaHQvLnRlc3QobCksaT17bGVmdDowLHJpZ2h0OjAsY2VudGVyOmksdG9wOjEsYm90dG9tOjF9W2xdLGhbaV09Z1tsXSxcImNlbnRlclwiPT1sJiZpKyspOihqJiYobD1iKGwpLGxbXCIlXCJdPShsW1wiJVwiXXx8MCkrMTAwKSxoW2ldPWwsaSsrLGo9ITEpfXJldHVybltoLGVbMV1dfX1mdW5jdGlvbiBmKGIpe3ZhciBjPWEuY29uc3VtZVJlcGVhdGVkKGUsL14sLyxiKTtpZihjJiZcIlwiPT1jWzFdKXJldHVybiBjWzBdfXZhciBnPXtsZWZ0OntcIiVcIjowfSxjZW50ZXI6e1wiJVwiOjUwfSxyaWdodDp7XCIlXCI6MTAwfSx0b3A6e1wiJVwiOjB9LGJvdHRvbTp7XCIlXCI6MTAwfX0saD1hLm1lcmdlTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGEubWVyZ2VEaW1lbnNpb25zLFwiIFwiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGQuYmluZChudWxsLDMpLGgsW1widHJhbnNmb3JtLW9yaWdpblwiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLmJpbmQobnVsbCwyKSxoLFtcInBlcnNwZWN0aXZlLW9yaWdpblwiXSksYS5jb25zdW1lUG9zaXRpb249ZSxhLm1lcmdlT2Zmc2V0TGlzdD1oO3ZhciBpPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKG51bGwsaCxcIiwgXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoZixpLFtcImJhY2tncm91bmQtcG9zaXRpb25cIixcIm9iamVjdC1wb3NpdGlvblwiXSl9KGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7dmFyIGM9YS5jb25zdW1lVG9rZW4oL15jaXJjbGUvLGIpO2lmKGMmJmNbMF0pcmV0dXJuW1wiY2lyY2xlXCJdLmNvbmNhdChhLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXlxcKC8pKSxkLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQodm9pZCAwLC9eYXQvKSksYS5jb25zdW1lUG9zaXRpb24sYS5pZ25vcmUoYS5jb25zdW1lVG9rZW4uYmluZCh2b2lkIDAsL15cXCkvKSldLGNbMV0pKTt2YXIgZj1hLmNvbnN1bWVUb2tlbigvXmVsbGlwc2UvLGIpO2lmKGYmJmZbMF0pcmV0dXJuW1wiZWxsaXBzZVwiXS5jb25jYXQoYS5jb25zdW1lTGlzdChbYS5pZ25vcmUoYS5jb25zdW1lVG9rZW4uYmluZCh2b2lkIDAsL15cXCgvKSksZSxhLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXmF0LykpLGEuY29uc3VtZVBvc2l0aW9uLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQodm9pZCAwLC9eXFwpLykpXSxmWzFdKSk7dmFyIGc9YS5jb25zdW1lVG9rZW4oL15wb2x5Z29uLyxiKTtyZXR1cm4gZyYmZ1swXT9bXCJwb2x5Z29uXCJdLmNvbmNhdChhLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXlxcKC8pKSxhLm9wdGlvbmFsKGEuY29uc3VtZVRva2VuLmJpbmQodm9pZCAwLC9ebm9uemVyb1xccyosfF5ldmVub2RkXFxzKiwvKSxcIm5vbnplcm8sXCIpLGEuY29uc3VtZVNpemVQYWlyTGlzdCxhLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKHZvaWQgMCwvXlxcKS8pKV0sZ1sxXSkpOnZvaWQgMH1mdW5jdGlvbiBjKGIsYyl7aWYoYlswXT09PWNbMF0pcmV0dXJuXCJjaXJjbGVcIj09YlswXT9hLm1lcmdlTGlzdChiLnNsaWNlKDEpLGMuc2xpY2UoMSksW1wiY2lyY2xlKFwiLGEubWVyZ2VEaW1lbnNpb25zLFwiIGF0IFwiLGEubWVyZ2VPZmZzZXRMaXN0LFwiKVwiXSk6XCJlbGxpcHNlXCI9PWJbMF0/YS5tZXJnZUxpc3QoYi5zbGljZSgxKSxjLnNsaWNlKDEpLFtcImVsbGlwc2UoXCIsYS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXIsXCIgYXQgXCIsYS5tZXJnZU9mZnNldExpc3QsXCIpXCJdKTpcInBvbHlnb25cIj09YlswXSYmYlsxXT09Y1sxXT9hLm1lcmdlTGlzdChiLnNsaWNlKDIpLGMuc2xpY2UoMiksW1wicG9seWdvbihcIixiWzFdLGcsXCIpXCJdKTp2b2lkIDB9dmFyIGQ9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsYS5wYXJzZUxlbmd0aE9yUGVyY2VudCksZT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxkLC9eLyksZj1hLm1lcmdlTmVzdGVkUmVwZWF0ZWQuYmluZCh2b2lkIDAsYS5tZXJnZURpbWVuc2lvbnMsXCIgXCIpLGc9YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGYsXCIsXCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYixjLFtcInNoYXBlLW91dHNpZGVcIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtiLmNvbmNhdChbYV0pLmZvckVhY2goZnVuY3Rpb24oYil7YiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUmJihkW2FdPWIpLGVbYl09YX0pfXZhciBkPXt9LGU9e307YyhcInRyYW5zZm9ybVwiLFtcIndlYmtpdFRyYW5zZm9ybVwiLFwibXNUcmFuc2Zvcm1cIl0pLGMoXCJ0cmFuc2Zvcm1PcmlnaW5cIixbXCJ3ZWJraXRUcmFuc2Zvcm1PcmlnaW5cIl0pLGMoXCJwZXJzcGVjdGl2ZVwiLFtcIndlYmtpdFBlcnNwZWN0aXZlXCJdKSxjKFwicGVyc3BlY3RpdmVPcmlnaW5cIixbXCJ3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblwiXSksYS5wcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGRbYV18fGF9LGEudW5wcmVmaXhlZFByb3BlcnR5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gZVthXXx8YX19KGIpfSgpLGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5hbmltYXRlKFtdKS5vbmNhbmNlbCl7dmFyIGE7aWYod2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O2Vsc2UgdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX07dmFyIGI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPVwiY2FuY2VsXCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmXCJjYW5jZWxcIj09YT90aGlzLl9jYW5jZWxIYW5kbGVycy5wdXNoKGIpOmguY2FsbCh0aGlzLGEsYil9O3ZhciBpPWYucmVtb3ZlRXZlbnRMaXN0ZW5lcjtyZXR1cm4gZi5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7aWYoXCJjYW5jZWxcIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIiksZj1cIjBcIj09ZT9cIjFcIjpcIjBcIjtjPWIuYW5pbWF0ZSh7b3BhY2l0eTpbZixmXX0se2R1cmF0aW9uOjF9KSxjLmN1cnJlbnRUaW1lPTAsZD1nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpPT1mfWNhdGNoKGEpe31maW5hbGx5e2MmJmMuY2FuY2VsKCl9aWYoIWQpe3ZhciBnPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHdpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8bnVsbD09PWJ8fChiPWEuY29udmVydFRvQXJyYXlGb3JtKGIpKSxnLmNhbGwodGhpcyxiLGMpfX19KGEpfSgpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJhZnRlclwiaW4gRWxlbWVudC5wcm90b3R5cGVcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLmFmdGVyXG4vKiBnbG9iYWwgX211dGF0aW9uICovXG5Eb2N1bWVudC5wcm90b3R5cGUuYWZ0ZXIgPSBFbGVtZW50LnByb3RvdHlwZS5hZnRlciA9IGZ1bmN0aW9uIGFmdGVyKCkge1xuXHRpZiAodGhpcy5wYXJlbnROb2RlKSB7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLFxuXHRcdFx0XHR2aWFibGVOZXh0U2libGluZyA9IHRoaXMubmV4dFNpYmxpbmcsXG5cdFx0XHRcdGlkeCA9IHZpYWJsZU5leHRTaWJsaW5nID8gYXJncy5pbmRleE9mKHZpYWJsZU5leHRTaWJsaW5nKSA6IC0xO1xuXG5cdFx0d2hpbGUgKGlkeCAhPT0gLTEpIHtcblx0XHRcdHZpYWJsZU5leHRTaWJsaW5nID0gdmlhYmxlTmV4dFNpYmxpbmcubmV4dFNpYmxpbmc7XG5cdFx0XHRpZiAoIXZpYWJsZU5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWR4ID0gYXJncy5pbmRleE9mKHZpYWJsZU5leHRTaWJsaW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF9tdXRhdGlvbihhcmd1bWVudHMpLCB2aWFibGVOZXh0U2libGluZyk7XG5cdH1cbn07XG5cbi8vIE5vdCBhbGwgVUFzIHN1cHBvcnQgdGhlIFRleHQgY29uc3RydWN0b3IuICBQb2x5ZmlsbCBvbiB0aGUgVGV4dCBjb25zdHJ1Y3RvciBvbmx5IHdoZXJlIGl0IGV4aXN0c1xuLy8gVE9ETzogQWRkIGEgcG9seWZpbGwgZm9yIHRoZSBUZXh0IGNvbnN0cnVjdG9yLCBhbmQgbWFrZSBpdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBwb2x5ZmlsbC5cbmlmIChcIlRleHRcIiBpbiBzZWxmKSB7XG5cdFRleHQucHJvdG90eXBlLmFmdGVyID0gRWxlbWVudC5wcm90b3R5cGUuYWZ0ZXI7XG59XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX211dGF0aW9uIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19tdXRhdGlvblwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJhZnRlclwiaW4gQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGVcbikpIHtcbi8vIENoYXJhY3RlckRhdGEucHJvdG90eXBlLmFmdGVyXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5hZnRlciA9IEVsZW1lbnQucHJvdG90eXBlLmFmdGVyXG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX211dGF0aW9uIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19tdXRhdGlvblwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJFbGVtZW50XCJpbiBzZWxmJiZcImJlZm9yZVwiaW4gRWxlbWVudC5wcm90b3R5cGVcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLmJlZm9yZVxuLyogZ2xvYmFsIF9tdXRhdGlvbiAqL1xuRG9jdW1lbnQucHJvdG90eXBlLmJlZm9yZSA9IEVsZW1lbnQucHJvdG90eXBlLmJlZm9yZSA9IGZ1bmN0aW9uIGJlZm9yZSgpIHtcblx0aWYgKHRoaXMucGFyZW50Tm9kZSkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxcblx0XHRcdHZpYWJsZVByZXZpb3VzU2libGluZyA9IHRoaXMucHJldmlvdXNTaWJsaW5nLFxuXHRcdFx0aWR4ID0gdmlhYmxlUHJldmlvdXNTaWJsaW5nID8gYXJncy5pbmRleE9mKHZpYWJsZVByZXZpb3VzU2libGluZykgOiAtMTtcblxuXHRcdHdoaWxlIChpZHggIT09IC0xKSB7XG5cdFx0XHR2aWFibGVQcmV2aW91c1NpYmxpbmcgPSB2aWFibGVQcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuXHRcdFx0aWYgKCF2aWFibGVQcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZHggPSBhcmdzLmluZGV4T2YodmlhYmxlUHJldmlvdXNTaWJsaW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFxuXHRcdFx0X211dGF0aW9uKGFyZ3VtZW50cyksXG5cdFx0XHR2aWFibGVQcmV2aW91c1NpYmxpbmcgPyB2aWFibGVQcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcgOiB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZFxuXHRcdCk7XG5cdH1cbn07XG5cbi8vIE5vdCBhbGwgVUFzIHN1cHBvcnQgdGhlIFRleHQgY29uc3RydWN0b3IuICBQb2x5ZmlsbCBvbiB0aGUgVGV4dCBjb25zdHJ1Y3RvciBvbmx5IHdoZXJlIGl0IGV4aXN0c1xuLy8gVE9ETzogQWRkIGEgcG9seWZpbGwgZm9yIHRoZSBUZXh0IGNvbnN0cnVjdG9yLCBhbmQgbWFrZSBpdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBwb2x5ZmlsbC5cbmlmIChcIlRleHRcIiBpbiBzZWxmKSB7XG5cdFRleHQucHJvdG90eXBlLmJlZm9yZSA9IEVsZW1lbnQucHJvdG90eXBlLmJlZm9yZTtcbn1cbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcImJlZm9yZVwiaW4gQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGVcbikpIHtcbi8vIENoYXJhY3RlckRhdGEucHJvdG90eXBlLmJlZm9yZVxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuYmVmb3JlID0gRWxlbWVudC5wcm90b3R5cGUuYmVmb3JlXG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRhcmdldCwgU291cmNlLCBrZXkpIHtcbiAga2V5IGluIFRhcmdldCB8fCBkZWZpbmVQcm9wZXJ0eShUYXJnZXQsIGtleSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNvdXJjZVtrZXldOyB9LFxuICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IFNvdXJjZVtrZXldID0gaXQ7IH1cbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSwgc29uYXJqcy9zbG93LXJlZ2V4IC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoRlVMTF9OQU1FLCB3cmFwcGVyLCBGT1JDRUQsIElTX0FHR1JFR0FURV9FUlJPUikge1xuICB2YXIgU1RBQ0tfVFJBQ0VfTElNSVQgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgdmFyIE9QVElPTlNfUE9TSVRJT04gPSBJU19BR0dSRUdBVEVfRVJST1IgPyAyIDogMTtcbiAgdmFyIHBhdGggPSBGVUxMX05BTUUuc3BsaXQoJy4nKTtcbiAgdmFyIEVSUk9SX05BTUUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBPcmlnaW5hbEVycm9yID0gZ2V0QnVpbHRJbi5hcHBseShudWxsLCBwYXRoKTtcblxuICBpZiAoIU9yaWdpbmFsRXJyb3IpIHJldHVybjtcblxuICB2YXIgT3JpZ2luYWxFcnJvclByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3IucHJvdG90eXBlO1xuXG4gIC8vIFY4IDkuMy0gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyMDA2XG4gIGlmICghSVNfUFVSRSAmJiBoYXNPd24oT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ2NhdXNlJykpIGRlbGV0ZSBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNhdXNlO1xuXG4gIGlmICghRk9SQ0VEKSByZXR1cm4gT3JpZ2luYWxFcnJvcjtcblxuICB2YXIgQmFzZUVycm9yID0gZ2V0QnVpbHRJbignRXJyb3InKTtcblxuICB2YXIgV3JhcHBlZEVycm9yID0gd3JhcHBlcihmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoSVNfQUdHUkVHQVRFX0VSUk9SID8gYiA6IGEsIHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IElTX0FHR1JFR0FURV9FUlJPUiA/IG5ldyBPcmlnaW5hbEVycm9yKGEpIDogbmV3IE9yaWdpbmFsRXJyb3IoKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGluc3RhbGxFcnJvclN0YWNrKHJlc3VsdCwgV3JhcHBlZEVycm9yLCByZXN1bHQuc3RhY2ssIDIpO1xuICAgIGlmICh0aGlzICYmIGlzUHJvdG90eXBlT2YoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgdGhpcykpIGluaGVyaXRJZlJlcXVpcmVkKHJlc3VsdCwgdGhpcywgV3JhcHBlZEVycm9yKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IE9QVElPTlNfUE9TSVRJT04pIGluc3RhbGxFcnJvckNhdXNlKHJlc3VsdCwgYXJndW1lbnRzW09QVElPTlNfUE9TSVRJT05dKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBXcmFwcGVkRXJyb3IucHJvdG90eXBlID0gT3JpZ2luYWxFcnJvclByb3RvdHlwZTtcblxuICBpZiAoRVJST1JfTkFNRSAhPT0gJ0Vycm9yJykge1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IpO1xuICAgIGVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIEJhc2VFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuICB9IGVsc2UgaWYgKERFU0NSSVBUT1JTICYmIFNUQUNLX1RSQUNFX0xJTUlUIGluIE9yaWdpbmFsRXJyb3IpIHtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgU1RBQ0tfVFJBQ0VfTElNSVQpO1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnKTtcbiAgfVxuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yKTtcblxuICBpZiAoIUlTX1BVUkUpIHRyeSB7XG4gICAgLy8gU2FmYXJpIDEzLSBidWc6IFdlYkFzc2VtYmx5IGVycm9ycyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIGAubmFtZWBcbiAgICBpZiAoT3JpZ2luYWxFcnJvclByb3RvdHlwZS5uYW1lICE9PSBFUlJPUl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ25hbWUnLCBFUlJPUl9OQU1FKTtcbiAgICB9XG4gICAgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdyYXBwZWRFcnJvcjtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gIHJldHVybiBXcmFwcGVkRXJyb3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBmdW5jdGlvbnMgYC5sZW5ndGhgICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UnKTtcblxudmFyIFdFQl9BU1NFTUJMWSA9ICdXZWJBc3NlbWJseSc7XG52YXIgV2ViQXNzZW1ibHkgPSBnbG9iYWxUaGlzW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1maW5kIC0tIHRlc3RpbmdcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBGRjk5KyBidWdcbnZhciBCUk9LRU5fT05fU1BBUlNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluY2x1ZGVzIC0tIGRldGVjdGlvblxuICByZXR1cm4gIUFycmF5KDEpLmluY2x1ZGVzKCk7XG59KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogQlJPS0VOX09OX1NQQVJTRSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdpbmNsdWRlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoc3RhdGUua2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPT0gT2JqZWN0O1xudmFyIEZPUkNFRCA9IEVTM19TVFJJTkdTIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4odG9JbmRleGVkT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggPD0gMTIxIGFuZCBTYWZhcmkgPD0gMTUuNDsgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTI2ODFcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkucHVzaCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9UT19MRU5HVEggfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnB1c2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucHVzaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGFyZ0NvdW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspIHtcbiAgICAgIE9bbGVuXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGxlbisrO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4pO1xuICAgIHJldHVybiBsZW47XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9qc29uXG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8sICdudW1iZXInKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgQ09OU1RSVUNUT1IgPSAnY29uc3RydWN0b3InO1xudmFyIElURVJBVE9SID0gJ0l0ZXJhdG9yJztcbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBOYXRpdmVJdGVyYXRvciA9IGdsb2JhbFRoaXNbSVRFUkFUT1JdO1xuXG4vLyBGRjU2LSBoYXZlIG5vbi1zdGFuZGFyZCBnbG9iYWwgaGVscGVyIGBJdGVyYXRvcmBcbnZhciBGT1JDRUQgPSBJU19QVVJFXG4gIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUl0ZXJhdG9yKVxuICB8fCBOYXRpdmVJdGVyYXRvci5wcm90b3R5cGUgIT09IEl0ZXJhdG9yUHJvdG90eXBlXG4gIC8vIEZGNDQtIG5vbi1zdGFuZGFyZCBgSXRlcmF0b3JgIHBhc3NlcyBwcmV2aW91cyB0ZXN0c1xuICB8fCAhZmFpbHMoZnVuY3Rpb24gKCkgeyBOYXRpdmVJdGVyYXRvcih7fSk7IH0pO1xuXG52YXIgSXRlcmF0b3JDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIEl0ZXJhdG9yKCkge1xuICBhbkluc3RhbmNlKHRoaXMsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgaWYgKGdldFByb3RvdHlwZU9mKHRoaXMpID09PSBJdGVyYXRvclByb3RvdHlwZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fic3RyYWN0IGNsYXNzIEl0ZXJhdG9yIG5vdCBkaXJlY3RseSBjb25zdHJ1Y3RhYmxlJyk7XG59O1xuXG52YXIgZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihJdGVyYXRvclByb3RvdHlwZSwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKHJlcGxhY2VtZW50KSB7XG4gICAgICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgICAgICBpZiAodGhpcyA9PT0gSXRlcmF0b3JQcm90b3R5cGUpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiWW91IGNhbid0IHJlZGVmaW5lIHRoaXMgcHJvcGVydHlcIik7XG4gICAgICAgIGlmIChoYXNPd24odGhpcywga2V5KSkgdGhpc1trZXldID0gcmVwbGFjZW1lbnQ7XG4gICAgICAgIGVsc2UgY3JlYXRlUHJvcGVydHkodGhpcywga2V5LCByZXBsYWNlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSBJdGVyYXRvclByb3RvdHlwZVtrZXldID0gdmFsdWU7XG59O1xuXG5pZiAoIWhhc093bihJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRykpIGRlZmluZUl0ZXJhdG9yUHJvdG90eXBlQWNjZXNzb3IoVE9fU1RSSU5HX1RBRywgSVRFUkFUT1IpO1xuXG5pZiAoRk9SQ0VEIHx8ICFoYXNPd24oSXRlcmF0b3JQcm90b3R5cGUsIENPTlNUUlVDVE9SKSB8fCBJdGVyYXRvclByb3RvdHlwZVtDT05TVFJVQ1RPUl0gPT09IE9iamVjdCkge1xuICBkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yKENPTlNUUlVDVE9SLCBJdGVyYXRvckNvbnN0cnVjdG9yKTtcbn1cblxuSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBJdGVyYXRvclByb3RvdHlwZTtcblxuLy8gYEl0ZXJhdG9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pdGVyYXRvclxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgSXRlcmF0b3I6IEl0ZXJhdG9yQ29uc3RydWN0b3Jcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0SXRlcmF0b3JEaXJlY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdCcpO1xuXG4vLyBgSXRlcmF0b3IucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pdGVyYXRvci5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSkge1xuICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgIGFDYWxsYWJsZShwcmVkaWNhdGUpO1xuICAgIHZhciByZWNvcmQgPSBnZXRJdGVyYXRvckRpcmVjdCh0aGlzKTtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgcmV0dXJuIGl0ZXJhdGUocmVjb3JkLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGNvdW50ZXIrKykpIHJldHVybiBzdG9wKHZhbHVlKTtcbiAgICB9LCB7IElTX1JFQ09SRDogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkucmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG9iamVjdEdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpLmY7XG5cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHVuY3VycnlUaGlzKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBpbiBzb21lIElFIHZlcnNpb25zLCBgcHJvcGVydHlJc0VudW1lcmFibGVgIHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdCBvbiBpbnRlZ2VyIGtleXNcbi8vIG9mIGBudWxsYCBwcm90b3R5cGUgb2JqZWN0c1xudmFyIElFX0JVRyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxuICB2YXIgTyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIE9bMl0gPSAyO1xuICByZXR1cm4gIXByb3BlcnR5SXNFbnVtZXJhYmxlKE8sIDIpO1xufSk7XG5cbi8vIGBPYmplY3QueyBlbnRyaWVzLCB2YWx1ZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUT19FTlRSSUVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBvYmplY3RLZXlzKE8pO1xuICAgIHZhciBJRV9XT1JLQVJPVU5EID0gSUVfQlVHICYmIG9iamVjdEdldFByb3RvdHlwZU9mKE8pID09PSBudWxsO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgKElFX1dPUktBUk9VTkQgPyBrZXkgaW4gTyA6IHByb3BlcnR5SXNFbnVtZXJhYmxlKE8sIGtleSkpKSB7XG4gICAgICAgIHB1c2gocmVzdWx0LCBUT19FTlRSSUVTID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuICBlbnRyaWVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBPYmplY3QudmFsdWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4gIHZhbHVlczogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXknKS5lbnRyaWVzO1xuXG4vLyBgT2JqZWN0LmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKE8pIHtcbiAgICByZXR1cm4gJGVudHJpZXMoTyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpLmY7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgZGVmaW5lQnVpbHRJbihPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEJ1biwgRGVubyAtLSBkZXRlY3Rpb24gKi9cbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciB1c2VyQWdlbnRTdGFydHNXaXRoID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gdXNlckFnZW50LnNsaWNlKDAsIHN0cmluZy5sZW5ndGgpID09PSBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdCdW4vJykpIHJldHVybiAnQlVOJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Nsb3VkZmxhcmUtV29ya2VycycpKSByZXR1cm4gJ0NMT1VERkxBUkUnO1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnRGVuby8nKSkgcmV0dXJuICdERU5PJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ05vZGUuanMvJykpIHJldHVybiAnTk9ERSc7XG4gIGlmIChnbG9iYWxUaGlzLkJ1biAmJiB0eXBlb2YgQnVuLnZlcnNpb24gPT0gJ3N0cmluZycpIHJldHVybiAnQlVOJztcbiAgaWYgKGdsb2JhbFRoaXMuRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnKSByZXR1cm4gJ0RFTk8nO1xuICBpZiAoY2xhc3NvZihnbG9iYWxUaGlzLnByb2Nlc3MpID09PSAncHJvY2VzcycpIHJldHVybiAnTk9ERSc7XG4gIGlmIChnbG9iYWxUaGlzLndpbmRvdyAmJiBnbG9iYWxUaGlzLmRvY3VtZW50KSByZXR1cm4gJ0JST1dTRVInO1xuICByZXR1cm4gJ1JFU1QnO1xufSkoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgRU5WSVJPTk1FTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFTlZJUk9OTUVOVCA9PT0gJ05PREUnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsVGhpcy5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWxUaGlzLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWxUaGlzLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsVGhpcy5GdW5jdGlvbjtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbFRoaXMuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWxUaGlzLmxvY2F0aW9uO1xufSk7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGhhc093bihxdWV1ZSwgaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgZXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsVGhpcy5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIEF2b2lkIE5vZGVKUyBleHBlcmltZW50YWwgd2FybmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm4gZ2xvYmFsVGhpc1tuYW1lXTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsVGhpcywgbmFtZSk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbn07XG5cblF1ZXVlLnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBlbnRyeSA9IHsgaXRlbTogaXRlbSwgbmV4dDogbnVsbCB9O1xuICAgIHZhciB0YWlsID0gdGhpcy50YWlsO1xuICAgIGlmICh0YWlsKSB0YWlsLm5leHQgPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmhlYWQ7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaGVhZCA9IGVudHJ5Lm5leHQ7XG4gICAgICBpZiAobmV4dCA9PT0gbnVsbCkgdGhpcy50YWlsID0gbnVsbDtcbiAgICAgIHJldHVybiBlbnRyeS5pdGVtO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWV1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiB0eXBlb2YgUGViYmxlICE9ICd1bmRlZmluZWQnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1pb3MnKTtcbnZhciBJU19JT1NfUEVCQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50LWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsVGhpcy5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbFRoaXMuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsVGhpcy5Qcm9taXNlO1xudmFyIG1pY3JvdGFzayA9IHNhZmVHZXRCdWlsdEluKCdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFtaWNyb3Rhc2spIHtcbiAgdmFyIHF1ZXVlID0gbmV3IFF1ZXVlKCk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGZuID0gcXVldWUuZ2V0KCkpIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAocXVldWUuaGVhZCkgbm90aWZ5KCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICAvLyBhbHNvIGV4Y2VwdCBXZWJPUyBXZWJraXQgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg5OFxuICBpZiAoIUlTX0lPUyAmJiAhSVNfTk9ERSAmJiAhSVNfV0VCT1NfV0VCS0lUICYmIE11dGF0aW9uT2JzZXJ2ZXIgJiYgZG9jdW1lbnQpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmICghSVNfSU9TX1BFQkJMRSAmJiBQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIC8vIHdvcmthcm91bmQgb2YgV2ViS2l0IH4gaU9TIFNhZmFyaSAxMC4xIGJ1Z1xuICAgIHByb21pc2UuY29uc3RydWN0b3IgPSBQcm9taXNlO1xuICAgIHRoZW4gPSBiaW5kKHByb21pc2UudGhlbiwgcHJvbWlzZSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gTm9kZS5qcyB3aXRob3V0IHByb21pc2VzXG4gIH0gZWxzZSBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ2VcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgLy8gYHdlYnBhY2tgIGRldiBzZXJ2ZXIgYnVnIG9uIElFIGdsb2JhbCBtZXRob2RzIC0gdXNlIGJpbmQoZm4sIGdsb2JhbClcbiAgICBtYWNyb3Rhc2sgPSBiaW5kKG1hY3JvdGFzaywgZ2xvYmFsVGhpcyk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpcy5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBFTlZJUk9OTUVOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsVGhpcy5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChFTlZJUk9OTUVOVCA9PT0gJ0JST1dTRVInIHx8IEVOVklST05NRU5UID09PSAnREVOTycpICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC1pcy1ub2RlJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcXVldWUnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5DT05TVFJVQ1RPUjtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uUkVKRUNUSU9OX0VWRU5UO1xudmFyIE5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlNVQkNMQVNTSU5HO1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3I7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWxUaGlzLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsVGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFRoaXNbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWxUaGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWxUaGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcbiAgfTtcblxuICAvLyBgUHJvbWlzZS5wcm90b3R5cGUudGhlbmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdEluKFByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgcmVhY3Rpb24uZmFpbCA9IGlzQ2FsbGFibGUob25SZWplY3RlZCkgJiYgb25SZWplY3RlZDtcbiAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHN0YXRlLnN0YXRlID09PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gYFByb21pc2VgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UtZXhlY3V0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgdmFyIGNhcGFiaWxpdHlSZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICBjYXBhYmlsaXR5UmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpLkNPTlNUUlVDVE9SO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG52YXIgTmF0aXZlUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gTmF0aXZlUmVnRXhwLnByb3RvdHlwZTtcbnZhciBTeW50YXhFcnJvciA9IGdsb2JhbFRoaXMuU3ludGF4RXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKFJlZ0V4cFByb3RvdHlwZS5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgTUlTU0VEX1NUSUNLWSA9IHN0aWNreUhlbHBlcnMuTUlTU0VEX1NUSUNLWTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xuXG52YXIgQkFTRV9GT1JDRUQgPSBERVNDUklQVE9SUyAmJlxuICAoIUNPUlJFQ1RfTkVXIHx8IE1JU1NFRF9TVElDS1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0cgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJlMltNQVRDSF0gPSBmYWxzZTtcbiAgICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgcmV0dXJuIE5hdGl2ZVJlZ0V4cChyZTEpICE9PSByZTEgfHwgTmF0aXZlUmVnRXhwKHJlMikgPT09IHJlMiB8fCBTdHJpbmcoTmF0aXZlUmVnRXhwKHJlMSwgJ2knKSkgIT09ICcvYS9pJztcbiAgfSkpO1xuXG52YXIgaGFuZGxlRG90QWxsID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIHJlc3VsdCArPSBjaHIgKyBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWJyYWNrZXRzICYmIGNociA9PT0gJy4nKSB7XG4gICAgICByZXN1bHQgKz0gJ1tcXFxcc1xcXFxTXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaHIgPT09ICdbJykge1xuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICAgIGJyYWNrZXRzID0gZmFsc2U7XG4gICAgICB9IHJlc3VsdCArPSBjaHI7XG4gICAgfVxuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaGFuZGxlTkNHID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbmFtZWQgPSBbXTtcbiAgdmFyIG5hbWVzID0gY3JlYXRlKG51bGwpO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIG5jZyA9IGZhbHNlO1xuICB2YXIgZ3JvdXBpZCA9IDA7XG4gIHZhciBncm91cG5hbWUgPSAnJztcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIGNociArPSBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgICAvLyBpZ25vcmUgbm9uLWNhcHR1cmluZyBncm91cHNcbiAgICAgICAgaWYgKHN0cmluZ1NsaWNlKHN0cmluZywgaW5kZXggKyAxLCBpbmRleCArIDMpID09PSAnPzonKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4ZWMoSVNfTkNHLCBzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICBuY2cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwaWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIGNociA9PT0gJz4nICYmIG5jZzpcbiAgICAgICAgaWYgKGdyb3VwbmFtZSA9PT0gJycgfHwgaGFzT3duKG5hbWVzLCBncm91cG5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzW2dyb3VwbmFtZV0gPSB0cnVlO1xuICAgICAgICBuYW1lZFtuYW1lZC5sZW5ndGhdID0gW2dyb3VwbmFtZSwgZ3JvdXBpZF07XG4gICAgICAgIG5jZyA9IGZhbHNlO1xuICAgICAgICBncm91cG5hbWUgPSAnJztcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuY2cpIGdyb3VwbmFtZSArPSBjaHI7XG4gICAgZWxzZSByZXN1bHQgKz0gY2hyO1xuICB9IHJldHVybiBbcmVzdWx0LCBuYW1lZF07XG59O1xuXG4vLyBgUmVnRXhwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAtY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZCgnUmVnRXhwJywgQkFTRV9GT1JDRUQpKSB7XG4gIHZhciBSZWdFeHBXcmFwcGVyID0gZnVuY3Rpb24gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRoaXNJc1JlZ0V4cCA9IGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCB0aGlzKTtcbiAgICB2YXIgcGF0dGVybklzUmVnRXhwID0gaXNSZWdFeHAocGF0dGVybik7XG4gICAgdmFyIGZsYWdzQXJlVW5kZWZpbmVkID0gZmxhZ3MgPT09IHVuZGVmaW5lZDtcbiAgICB2YXIgZ3JvdXBzID0gW107XG4gICAgdmFyIHJhd1BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHZhciByYXdGbGFncywgZG90QWxsLCBzdGlja3ksIGhhbmRsZWQsIHJlc3VsdCwgc3RhdGU7XG5cbiAgICBpZiAoIXRoaXNJc1JlZ0V4cCAmJiBwYXR0ZXJuSXNSZWdFeHAgJiYgZmxhZ3NBcmVVbmRlZmluZWQgJiYgcGF0dGVybi5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgaWYgKHBhdHRlcm5Jc1JlZ0V4cCB8fCBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgcGF0dGVybikpIHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbiAgICAgIGlmIChmbGFnc0FyZVVuZGVmaW5lZCkgZmxhZ3MgPSBnZXRSZWdFeHBGbGFncyhyYXdQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJuID0gcGF0dGVybiA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhwYXR0ZXJuKTtcbiAgICBmbGFncyA9IGZsYWdzID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKGZsYWdzKTtcbiAgICByYXdQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ET1RfQUxMICYmICdkb3RBbGwnIGluIHJlMSkge1xuICAgICAgZG90QWxsID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAncycpID4gLTE7XG4gICAgICBpZiAoZG90QWxsKSBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsIC9zL2csICcnKTtcbiAgICB9XG5cbiAgICByYXdGbGFncyA9IGZsYWdzO1xuXG4gICAgaWYgKE1JU1NFRF9TVElDS1kgJiYgJ3N0aWNreScgaW4gcmUxKSB7XG4gICAgICBzdGlja3kgPSAhIWZsYWdzICYmIHN0cmluZ0luZGV4T2YoZmxhZ3MsICd5JykgPiAtMTtcbiAgICAgIGlmIChzdGlja3kgJiYgVU5TVVBQT1JURURfWSkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAveS9nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX05DRykge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZU5DRyhwYXR0ZXJuKTtcbiAgICAgIHBhdHRlcm4gPSBoYW5kbGVkWzBdO1xuICAgICAgZ3JvdXBzID0gaGFuZGxlZFsxXTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBpbmhlcml0SWZSZXF1aXJlZChOYXRpdmVSZWdFeHAocGF0dGVybiwgZmxhZ3MpLCB0aGlzSXNSZWdFeHAgPyB0aGlzIDogUmVnRXhwUHJvdG90eXBlLCBSZWdFeHBXcmFwcGVyKTtcblxuICAgIGlmIChkb3RBbGwgfHwgc3RpY2t5IHx8IGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUocmVzdWx0KTtcbiAgICAgIGlmIChkb3RBbGwpIHtcbiAgICAgICAgc3RhdGUuZG90QWxsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmF3ID0gUmVnRXhwV3JhcHBlcihoYW5kbGVEb3RBbGwocGF0dGVybiksIHJhd0ZsYWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGlja3kpIHN0YXRlLnN0aWNreSA9IHRydWU7XG4gICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkgc3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuICE9PSByYXdQYXR0ZXJuKSB0cnkge1xuICAgICAgLy8gZmFpbHMgaW4gb2xkIGVuZ2luZXMsIGJ1dCB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlcyBmb3IgdW5zdXBwb3J0ZWQgcmVnZXggc3ludGF4XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnc291cmNlJywgcmF3UGF0dGVybiA9PT0gJycgPyAnKD86KScgOiByYXdQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVJlZ0V4cCksIGluZGV4ID0gMDsga2V5cy5sZW5ndGggPiBpbmRleDspIHtcbiAgICBwcm94eUFjY2Vzc29yKFJlZ0V4cFdyYXBwZXIsIE5hdGl2ZVJlZ0V4cCwga2V5c1tpbmRleCsrXSk7XG4gIH1cblxuICBSZWdFeHBQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWdFeHBXcmFwcGVyO1xuICBSZWdFeHBXcmFwcGVyLnByb3RvdHlwZSA9IFJlZ0V4cFByb3RvdHlwZTtcbiAgZGVmaW5lQnVpbHRJbihnbG9iYWxUaGlzLCAnUmVnRXhwJywgUmVnRXhwV3JhcHBlciwgeyBjb25zdHJ1Y3RvcjogdHJ1ZSB9KTtcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLUBAc3BlY2llc1xuc2V0U3BlY2llcygnUmVnRXhwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZG90QWxsYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZG90YWxsXG5pZiAoREVTQ1JJUFRPUlMgJiYgVU5TVVBQT1JURURfRE9UX0FMTCkge1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZG90QWxsJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRvdEFsbCgpIHtcbiAgICAgIGlmICh0aGlzID09PSBSZWdFeHBQcm90b3R5cGUpIHJldHVybjtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvciBiZWNhdXNlXG4gICAgICAvLyB3ZSBkb24ndCBhZGQgbWV0YWRhdGEgZm9yIHJlZ2V4cHMgY3JlYXRlZCBieSBhIGxpdGVyYWwuXG4gICAgICBpZiAoY2xhc3NvZih0aGlzKSA9PT0gJ1JlZ0V4cCcpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kb3RBbGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBSZWdFeHAgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE1JU1NFRF9TVElDS1kgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJykuTUlTU0VEX1NUSUNLWTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnN0aWNreWAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLnN0aWNreVxuaWYgKERFU0NSSVBUT1JTICYmIE1JU1NFRF9TVElDS1kpIHtcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFJlZ0V4cFByb3RvdHlwZSwgJ3N0aWNreScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBzdGlja3koKSB7XG4gICAgICBpZiAodGhpcyA9PT0gUmVnRXhwUHJvdG90eXBlKSByZXR1cm47XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IgYmVjYXVzZVxuICAgICAgLy8gd2UgZG9uJ3QgYWRkIG1ldGFkYXRhIGZvciByZWdleHBzIGNyZWF0ZWQgYnkgYSBsaXRlcmFsLlxuICAgICAgaWYgKGNsYXNzb2YodGhpcykgPT09ICdSZWdFeHAnKSB7XG4gICAgICAgIHJldHVybiAhIWdldEludGVybmFsU3RhdGUodGhpcykuc3RpY2t5O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgUmVnRXhwIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT09ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuID0gJHRvU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgZmxhZ3MgPSAkdG9TdHJpbmcoZ2V0UmVnRXhwRmxhZ3MoUikpO1xuICAgIHJldHVybiAnLycgKyBwYXR0ZXJuICsgJy8nICsgZmxhZ3M7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnbWF0Y2gnLCBmdW5jdGlvbiAoTUFUQ0gsIG5hdGl2ZU1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgbWF0Y2hlciA9IGlzTnVsbE9yVW5kZWZpbmVkKHJlZ2V4cCkgPyB1bmRlZmluZWQgOiBnZXRNZXRob2QocmVnZXhwLCBNQVRDSCk7XG4gICAgICByZXR1cm4gbWF0Y2hlciA/IGNhbGwobWF0Y2hlciwgcmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0odG9TdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1hdGNoLCByeCwgUyk7XG5cbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBpc051bGxPclVuZGVmaW5lZChzZWFyY2hWYWx1ZSkgPyB1bmRlZmluZWQgOiBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIHZhciBmdWxsVW5pY29kZTtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICBwdXNoKHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlck9ySW5maW5pdHkocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIHZhciByZXBsYWNlbWVudDtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IHRvU3RyaW5nKGFwcGx5KHJlcGxhY2VWYWx1ZSwgdW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0sICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyB8fCAhUkVQTEFDRV9LRUVQU18kMCB8fCBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcmVsYXRpdmUtdXJsLXN0eWxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciB1cmwgPSBuZXcgVVJMKCdiP2E9MSZiPTImYz0zJywgJ2h0dHBzOi8vYScpO1xuICB2YXIgcGFyYW1zID0gdXJsLnNlYXJjaFBhcmFtcztcbiAgdmFyIHBhcmFtczIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPTEmYT0yJmI9MycpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHVybC5wYXRobmFtZSA9ICdjJTIwZCc7XG4gIHBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgcGFyYW1zWydkZWxldGUnXSgnYicpO1xuICAgIHJlc3VsdCArPSBrZXkgKyB2YWx1ZTtcbiAgfSk7XG4gIHBhcmFtczJbJ2RlbGV0ZSddKCdhJywgMik7XG4gIC8vIGB1bmRlZmluZWRgIGNhc2UgaXMgYSBDaHJvbWl1bSAxMTcgYnVnXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG4gIHBhcmFtczJbJ2RlbGV0ZSddKCdiJywgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIChJU19QVVJFICYmICghdXJsLnRvSlNPTiB8fCAhcGFyYW1zMi5oYXMoJ2EnLCAxKSB8fCBwYXJhbXMyLmhhcygnYScsIDIpIHx8ICFwYXJhbXMyLmhhcygnYScsIHVuZGVmaW5lZCkgfHwgcGFyYW1zMi5oYXMoJ2InKSkpXG4gICAgfHwgKCFwYXJhbXMuc2l6ZSAmJiAoSVNfUFVSRSB8fCAhREVTQ1JJUFRPUlMpKVxuICAgIHx8ICFwYXJhbXMuc29ydFxuICAgIHx8IHVybC5ocmVmICE9PSAnaHR0cHM6Ly9hL2MlMjBkP2E9MSZjPTMnXG4gICAgfHwgcGFyYW1zLmdldCgnYycpICE9PSAnMydcbiAgICB8fCBTdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygnP2E9MScpKSAhPT0gJ2E9MSdcbiAgICB8fCAhcGFyYW1zW0lURVJBVE9SXVxuICAgIC8vIHRocm93cyBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hQGInKS51c2VybmFtZSAhPT0gJ2EnXG4gICAgfHwgbmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPWInKSkuZ2V0KCdhJykgIT09ICdiJ1xuICAgIC8vIG5vdCBwdW55Y29kZWQgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8v0YLQtdGB0YInKS5ob3N0ICE9PSAneG4tLWUxYXliYydcbiAgICAvLyBub3QgZXNjYXBlZCBpbiBDaHJvbWUgNjItXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hI9CxJykuaGFzaCAhPT0gJyMlRDAlQjEnXG4gICAgLy8gZmFpbHMgaW4gQ2hyb21lIDY2LVxuICAgIHx8IHJlc3VsdCAhPT0gJ2ExYzMnXG4gICAgLy8gdGhyb3dzIGluIFNhZmFyaVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8veCcsIHVuZGVmaW5lZCkuaG9zdCAhPT0gJ3gnO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvcHVueWNvZGUuanMvYmxvYi9tYXN0ZXIvcHVueWNvZGUuanNcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxcdTAwN0VdLzsgLy8gbm9uLUFTQ0lJIGNoYXJzXG52YXIgcmVnZXhTZXBhcmF0b3JzID0gL1suXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nOyAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG52YXIgT1ZFUkZMT1dfRVJST1IgPSAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnO1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMocmVnZXhTZXBhcmF0b3JzLmV4ZWMpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciB0b0xvd2VyQ2FzZSA9IHVuY3VycnlUaGlzKCcnLnRvTG93ZXJDYXNlKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKi9cbnZhciB1Y3MyZGVjb2RlID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIHZhciBjb3VudGVyID0gMDtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gY2hhckNvZGVBdChzdHJpbmcsIGNvdW50ZXIrKyk7XG4gICAgaWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuICAgICAgLy8gSXQncyBhIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3Rlci5cbiAgICAgIHZhciBleHRyYSA9IGNoYXJDb2RlQXQoc3RyaW5nLCBjb3VudGVyKyspO1xuICAgICAgaWYgKChleHRyYSAmIDB4RkMwMCkgPT09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuICAgICAgICBwdXNoKG91dHB1dCwgKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEl0J3MgYW4gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG5leHQgY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyLlxuICAgICAgICBwdXNoKG91dHB1dCwgdmFsdWUpO1xuICAgICAgICBjb3VudGVyLS07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2gob3V0cHV0LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqL1xudmFyIGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uIChkaWdpdCkge1xuICAvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuICAvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcbiAgcmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KTtcbn07XG5cbi8qKlxuICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cbiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG4gKi9cbnZhciBhZGFwdCA9IGZ1bmN0aW9uIChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcbiAgdmFyIGsgPSAwO1xuICBkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuICBkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG4gIHdoaWxlIChkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDEpIHtcbiAgICBkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG4gICAgayArPSBiYXNlO1xuICB9XG4gIHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgb3V0cHV0ID0gW107XG5cbiAgLy8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbiAgaW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuICAvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuICB2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG4gIHZhciBuID0gaW5pdGlhbE47XG4gIHZhciBkZWx0YSA9IDA7XG4gIHZhciBiaWFzID0gaW5pdGlhbEJpYXM7XG4gIHZhciBpLCBjdXJyZW50VmFsdWU7XG5cbiAgLy8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cbiAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcbiAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDsgLy8gbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuICB2YXIgaGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aDsgLy8gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cbiAgLy8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cbiAgaWYgKGJhc2ljTGVuZ3RoKSB7XG4gICAgcHVzaChvdXRwdXQsIGRlbGltaXRlcik7XG4gIH1cblxuICAvLyBNYWluIGVuY29kaW5nIGxvb3A6XG4gIHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG4gICAgLy8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dCBsYXJnZXIgb25lOlxuICAgIHZhciBtID0gbWF4SW50O1xuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuICAgICAgICBtID0gY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPiwgYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuXG4gICAgdmFyIGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcbiAgICBpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuICAgICAgdGhyb3cgbmV3ICRSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICB9XG5cbiAgICBkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuICAgIG4gPSBtO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IG4pIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG4gICAgICAgIHZhciBxID0gZGVsdGE7XG4gICAgICAgIHZhciBrID0gYmFzZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICB2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiBrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzO1xuICAgICAgICAgIGlmIChxIDwgdCkgYnJlYWs7XG4gICAgICAgICAgdmFyIHFNaW51c1QgPSBxIC0gdDtcbiAgICAgICAgICB2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuICAgICAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCkpKTtcbiAgICAgICAgICBxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuICAgICAgICAgIGsgKz0gYmFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEpKSk7XG4gICAgICAgIGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PT0gYmFzaWNMZW5ndGgpO1xuICAgICAgICBkZWx0YSA9IDA7XG4gICAgICAgIGhhbmRsZWRDUENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVsdGErKztcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIGpvaW4ob3V0cHV0LCAnJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgZW5jb2RlZCA9IFtdO1xuICB2YXIgbGFiZWxzID0gc3BsaXQocmVwbGFjZSh0b0xvd2VyQ2FzZShpbnB1dCksIHJlZ2V4U2VwYXJhdG9ycywgJ1xcdTAwMkUnKSwgJy4nKTtcbiAgdmFyIGksIGxhYmVsO1xuICBmb3IgKGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGFiZWwgPSBsYWJlbHNbaV07XG4gICAgcHVzaChlbmNvZGVkLCBleGVjKHJlZ2V4Tm9uQVNDSUksIGxhYmVsKSA/ICd4bi0tJyArIGVuY29kZShsYWJlbCkgOiBsYWJlbCk7XG4gIH1cbiAgcmV0dXJuIGpvaW4oZW5jb2RlZCwgJy4nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctZnJvbWNvZGVwb2ludCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG52YXIgSU5DT1JSRUNUX0xFTkdUSCA9ICEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9PSAxO1xuXG4vLyBgU3RyaW5nLmZyb21Db2RlUG9pbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcuZnJvbWNvZGVwb2ludFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHN0YXQ6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IElOQ09SUkVDVF9MRU5HVEggfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBGRkZGKSAhPT0gY29kZSkgdGhyb3cgbmV3ICRSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIGVsZW1lbnRzW2ldID0gY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgY29kZSAlIDB4NDAwICsgMHhEQzAwKTtcbiAgICB9IHJldHVybiBqb2luKGVsZW1lbnRzLCAnJyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBzb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOCkge1xuICAgIC8vIGluc2VydGlvbiBzb3J0XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciBlbGVtZW50LCBqO1xuXG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgIGogPSBpO1xuICAgICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICAgIH1cbiAgICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gbWVyZ2Ugc29ydFxuICAgIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgICB2YXIgbGVmdCA9IHNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKTtcbiAgICB2YXIgcmlnaHQgPSBzb3J0KGFycmF5U2xpY2UoYXJyYXksIG1pZGRsZSksIGNvbXBhcmVmbik7XG4gICAgdmFyIGxsZW5ndGggPSBsZWZ0Lmxlbmd0aDtcbiAgICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgICB2YXIgbGluZGV4ID0gMDtcbiAgICB2YXIgcmluZGV4ID0gMDtcblxuICAgIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgICA/IGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXVxuICAgICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHNhZmVHZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhZmUtZ2V0LWJ1aWx0LWluJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5U29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBVUkxfU0VBUkNIX1BBUkFNUyA9ICdVUkxTZWFyY2hQYXJhbXMnO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SID0gVVJMX1NFQVJDSF9QQVJBTVMgKyAnSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVMpO1xudmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SKTtcblxudmFyIG5hdGl2ZUZldGNoID0gc2FmZUdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgTmF0aXZlUmVxdWVzdCA9IHNhZmVHZXRCdWlsdEluKCdSZXF1ZXN0Jyk7XG52YXIgSGVhZGVycyA9IHNhZmVHZXRCdWlsdEluKCdIZWFkZXJzJyk7XG52YXIgUmVxdWVzdFByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QgJiYgTmF0aXZlUmVxdWVzdC5wcm90b3R5cGU7XG52YXIgSGVhZGVyc1Byb3RvdHlwZSA9IEhlYWRlcnMgJiYgSGVhZGVycy5wcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgZW5jb2RlVVJJQ29tcG9uZW50ID0gZ2xvYmFsVGhpcy5lbmNvZGVVUklDb21wb25lbnQ7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciBmcm9tQ29kZVBvaW50ID0gZ2V0QnVpbHRJbignU3RyaW5nJywgJ2Zyb21Db2RlUG9pbnQnKTtcbnZhciAkcGFyc2VJbnQgPSBwYXJzZUludDtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNoaWZ0ID0gdW5jdXJyeVRoaXMoW10uc2hpZnQpO1xudmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcblxudmFyIHBsdXMgPSAvXFwrL2c7XG52YXIgRkFMTEJBQ0tfUkVQTEFDRVIgPSAnXFx1RkZGRCc7XG52YXIgVkFMSURfSEVYID0gL15bMC05YS1mXSskL2k7XG5cbnZhciBwYXJzZUhleE9jdGV0ID0gZnVuY3Rpb24gKHN0cmluZywgc3RhcnQpIHtcbiAgdmFyIHN1YnN0ciA9IHN0cmluZ1NsaWNlKHN0cmluZywgc3RhcnQsIHN0YXJ0ICsgMik7XG4gIGlmICghZXhlYyhWQUxJRF9IRVgsIHN1YnN0cikpIHJldHVybiBOYU47XG5cbiAgcmV0dXJuICRwYXJzZUludChzdWJzdHIsIDE2KTtcbn07XG5cbnZhciBnZXRMZWFkaW5nT25lcyA9IGZ1bmN0aW9uIChvY3RldCkge1xuICB2YXIgY291bnQgPSAwO1xuICBmb3IgKHZhciBtYXNrID0gMHg4MDsgbWFzayA+IDAgJiYgKG9jdGV0ICYgbWFzaykgIT09IDA7IG1hc2sgPj49IDEpIHtcbiAgICBjb3VudCsrO1xuICB9XG4gIHJldHVybiBjb3VudDtcbn07XG5cbnZhciB1dGY4RGVjb2RlID0gZnVuY3Rpb24gKG9jdGV0cykge1xuICB2YXIgY29kZVBvaW50ID0gbnVsbDtcblxuICBzd2l0Y2ggKG9jdGV0cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6XG4gICAgICBjb2RlUG9pbnQgPSBvY3RldHNbMF07XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBjb2RlUG9pbnQgPSAob2N0ZXRzWzBdICYgMHgxRikgPDwgNiB8IChvY3RldHNbMV0gJiAweDNGKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzpcbiAgICAgIGNvZGVQb2ludCA9IChvY3RldHNbMF0gJiAweDBGKSA8PCAxMiB8IChvY3RldHNbMV0gJiAweDNGKSA8PCA2IHwgKG9jdGV0c1syXSAmIDB4M0YpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgY29kZVBvaW50ID0gKG9jdGV0c1swXSAmIDB4MDcpIDw8IDE4IHwgKG9jdGV0c1sxXSAmIDB4M0YpIDw8IDEyIHwgKG9jdGV0c1syXSAmIDB4M0YpIDw8IDYgfCAob2N0ZXRzWzNdICYgMHgzRik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2RlUG9pbnQgPiAweDEwRkZGRiA/IG51bGwgOiBjb2RlUG9pbnQ7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgcGx1cywgJyAnKTtcbiAgdmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICB2YXIgZGVjb2RlZENoYXIgPSBjaGFyQXQoaW5wdXQsIGkpO1xuXG4gICAgaWYgKGRlY29kZWRDaGFyID09PSAnJScpIHtcbiAgICAgIGlmIChjaGFyQXQoaW5wdXQsIGkgKyAxKSA9PT0gJyUnIHx8IGkgKyAzID4gbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCArPSAnJSc7XG4gICAgICAgIGkrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBvY3RldCA9IHBhcnNlSGV4T2N0ZXQoaW5wdXQsIGkgKyAxKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmIChvY3RldCAhPT0gb2N0ZXQpIHtcbiAgICAgICAgcmVzdWx0ICs9IGRlY29kZWRDaGFyO1xuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpICs9IDI7XG4gICAgICB2YXIgYnl0ZVNlcXVlbmNlTGVuZ3RoID0gZ2V0TGVhZGluZ09uZXMob2N0ZXQpO1xuXG4gICAgICBpZiAoYnl0ZVNlcXVlbmNlTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlY29kZWRDaGFyID0gZnJvbUNoYXJDb2RlKG9jdGV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChieXRlU2VxdWVuY2VMZW5ndGggPT09IDEgfHwgYnl0ZVNlcXVlbmNlTGVuZ3RoID4gNCkge1xuICAgICAgICAgIHJlc3VsdCArPSBGQUxMQkFDS19SRVBMQUNFUjtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2N0ZXRzID0gW29jdGV0XTtcbiAgICAgICAgdmFyIHNlcXVlbmNlSW5kZXggPSAxO1xuXG4gICAgICAgIHdoaWxlIChzZXF1ZW5jZUluZGV4IDwgYnl0ZVNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGlmIChpICsgMyA+IGxlbmd0aCB8fCBjaGFyQXQoaW5wdXQsIGkpICE9PSAnJScpIGJyZWFrO1xuXG4gICAgICAgICAgdmFyIG5leHRCeXRlID0gcGFyc2VIZXhPY3RldChpbnB1dCwgaSArIDEpO1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgICAgICBpZiAobmV4dEJ5dGUgIT09IG5leHRCeXRlKSB7XG4gICAgICAgICAgICBpICs9IDM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHRCeXRlID4gMTkxIHx8IG5leHRCeXRlIDwgMTI4KSBicmVhaztcblxuICAgICAgICAgIHB1c2gob2N0ZXRzLCBuZXh0Qnl0ZSk7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICAgIHNlcXVlbmNlSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvY3RldHMubGVuZ3RoICE9PSBieXRlU2VxdWVuY2VMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHQgKz0gRkFMTEJBQ0tfUkVQTEFDRVI7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29kZVBvaW50ID0gdXRmOERlY29kZShvY3RldHMpO1xuICAgICAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IEZBTExCQUNLX1JFUExBQ0VSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlY29kZWRDaGFyID0gZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGRlY29kZWRDaGFyO1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgZmluZCA9IC9bIScoKX5dfCUyMC9nO1xuXG52YXIgcmVwbGFjZW1lbnRzID0ge1xuICAnISc6ICclMjEnLFxuICBcIidcIjogJyUyNycsXG4gICcoJzogJyUyOCcsXG4gICcpJzogJyUyOScsXG4gICd+JzogJyU3RScsXG4gICclMjAnOiAnKydcbn07XG5cbnZhciByZXBsYWNlciA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXTtcbn07XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHJlcGxhY2UoZW5jb2RlVVJJQ29tcG9uZW50KGl0KSwgZmluZCwgcmVwbGFjZXIpO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBJdGVyYXRvcihwYXJhbXMsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHBhcmFtcykuZW50cmllcyxcbiAgICBpbmRleDogMCxcbiAgICBraW5kOiBraW5kXG4gIH0pO1xufSwgVVJMX1NFQVJDSF9QQVJBTVMsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICB2YXIgZW50cnkgPSB0YXJnZXRbaW5kZXhdO1xuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbn0sIHRydWUpO1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zU3RhdGUgPSBmdW5jdGlvbiAoaW5pdCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgdGhpcy51cmwgPSBudWxsO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHRoaXMucGFyc2VPYmplY3QoaW5pdCk7XG4gICAgZWxzZSB0aGlzLnBhcnNlUXVlcnkodHlwZW9mIGluaXQgPT0gJ3N0cmluZycgPyBjaGFyQXQoaW5pdCwgMCkgPT09ICc/JyA/IHN0cmluZ1NsaWNlKGluaXQsIDEpIDogaW5pdCA6ICR0b1N0cmluZyhpbml0KSk7XG4gIH1cbn07XG5cblVSTFNlYXJjaFBhcmFtc1N0YXRlLnByb3RvdHlwZSA9IHtcbiAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVMsXG4gIGJpbmRVUkw6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9LFxuICBwYXJzZU9iamVjdDogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKG9iamVjdCk7XG4gICAgdmFyIGl0ZXJhdG9yLCBuZXh0LCBzdGVwLCBlbnRyeUl0ZXJhdG9yLCBlbnRyeU5leHQsIGZpcnN0LCBzZWNvbmQ7XG5cbiAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3Iob2JqZWN0LCBpdGVyYXRvck1ldGhvZCk7XG4gICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICAgIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgICAgICBlbnRyeUl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoYW5PYmplY3Qoc3RlcC52YWx1ZSkpO1xuICAgICAgICBlbnRyeU5leHQgPSBlbnRyeUl0ZXJhdG9yLm5leHQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZmlyc3QgPSBjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAoc2Vjb25kID0gY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgIWNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKS5kb25lXG4gICAgICAgICkgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMicpO1xuICAgICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiAkdG9TdHJpbmcoZmlyc3QudmFsdWUpLCB2YWx1ZTogJHRvU3RyaW5nKHNlY29uZC52YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGlmIChoYXNPd24ob2JqZWN0LCBrZXkpKSB7XG4gICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiBrZXksIHZhbHVlOiAkdG9TdHJpbmcob2JqZWN0W2tleV0pIH0pO1xuICAgIH1cbiAgfSxcbiAgcGFyc2VRdWVyeTogZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB2YXIgZW50cmllcyA9IHRoaXMuZW50cmllcztcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3BsaXQocXVlcnksICcmJyk7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIGF0dHJpYnV0ZSwgZW50cnk7XG4gICAgICB3aGlsZSAoaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2luZGV4KytdO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmxlbmd0aCkge1xuICAgICAgICAgIGVudHJ5ID0gc3BsaXQoYXR0cmlidXRlLCAnPScpO1xuICAgICAgICAgIHB1c2goZW50cmllcywge1xuICAgICAgICAgICAga2V5OiBkZWNvZGUoc2hpZnQoZW50cnkpKSxcbiAgICAgICAgICAgIHZhbHVlOiBkZWNvZGUoam9pbihlbnRyeSwgJz0nKSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBwdXNoKHJlc3VsdCwgc2VyaWFsaXplKGVudHJ5LmtleSkgKyAnPScgKyBzZXJpYWxpemUoZW50cnkudmFsdWUpKTtcbiAgICB9IHJldHVybiBqb2luKHJlc3VsdCwgJyYnKTtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5wYXJzZVF1ZXJ5KHRoaXMudXJsLnF1ZXJ5KTtcbiAgfSxcbiAgdXBkYXRlVVJMOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudXJsKSB0aGlzLnVybC51cGRhdGUoKTtcbiAgfVxufTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtc2AgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXVybHNlYXJjaHBhcmFtc1xudmFyIFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yID0gZnVuY3Rpb24gVVJMU2VhcmNoUGFyYW1zKC8qIGluaXQgKi8pIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUpO1xuICB2YXIgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIG5ldyBVUkxTZWFyY2hQYXJhbXNTdGF0ZShpbml0KSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IHN0YXRlLmVudHJpZXMubGVuZ3RoO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuZGVmaW5lQnVpbHRJbnMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCB7XG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmFwcGVuZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1hcHBlbmRcbiAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDIpO1xuICAgIHB1c2goc3RhdGUuZW50cmllcywgeyBrZXk6ICR0b1N0cmluZyhuYW1lKSwgdmFsdWU6ICR0b1N0cmluZyh2YWx1ZSkgfSk7XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5sZW5ndGgrKztcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZGVsZXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWRlbGV0ZVxuICAnZGVsZXRlJzogZnVuY3Rpb24gKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciB2YWx1ZSA9ICR2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJHZhbHVlIDogJHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkgJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgZW50cnkudmFsdWUgPT09IHZhbHVlKSkge1xuICAgICAgICBzcGxpY2UoZW50cmllcywgaW5kZXgsIDEpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICB9IGVsc2UgaW5kZXgrKztcbiAgICB9XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gZW50cmllcy5sZW5ndGg7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmdldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1nZXRcbiAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSByZXR1cm4gZW50cmllc1tpbmRleF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRBbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0YWxsXG4gIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKG5hbWUpIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHB1c2gocmVzdWx0LCBlbnRyaWVzW2luZGV4XS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmhhc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXNcbiAgaGFzOiBmdW5jdGlvbiBoYXMobmFtZSAvKiAsIHZhbHVlICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyICR2YWx1ZSA9IGxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgdmFyIHZhbHVlID0gJHZhbHVlID09PSB1bmRlZmluZWQgPyAkdmFsdWUgOiAkdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5ICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXRcbiAgc2V0OiBmdW5jdGlvbiBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciB2YWwgPSAkdG9TdHJpbmcodmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChmb3VuZCkgc3BsaWNlKGVudHJpZXMsIGluZGV4LS0sIDEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgZW50cnkudmFsdWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkgcHVzaChlbnRyaWVzLCB7IGtleToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zb3J0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNvcnRcbiAgc29ydDogZnVuY3Rpb24gc29ydCgpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIGFycmF5U29ydChzdGF0ZS5lbnRyaWVzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEua2V5ID4gYi5rZXkgPyAxIDogLTE7XG4gICAgfSk7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFjaywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgIH1cbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAna2V5cycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICd2YWx1ZXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAnZW50cmllcycpO1xuICB9XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2RcbmRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCBJVEVSQVRPUiwgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmVudHJpZXMsIHsgbmFtZTogJ2VudHJpZXMnIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHNlYXJjaHBhcmFtcy1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbmRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNpemVgIGdldHRlclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy91cmwvcHVsbC83MzRcbmlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gIGdldDogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzLmxlbmd0aDtcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsIFVSTF9TRUFSQ0hfUEFSQU1TKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMIH0sIHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvclxufSk7XG5cbi8vIFdyYXAgYGZldGNoYCBhbmQgYFJlcXVlc3RgIGZvciBjb3JyZWN0IHdvcmsgd2l0aCBwb2x5ZmlsbGVkIGBVUkxTZWFyY2hQYXJhbXNgXG5pZiAoIVVTRV9OQVRJVkVfVVJMICYmIGlzQ2FsbGFibGUoSGVhZGVycykpIHtcbiAgdmFyIGhlYWRlcnNIYXMgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzUHJvdG90eXBlLmhhcyk7XG4gIHZhciBoZWFkZXJzU2V0ID0gdW5jdXJyeVRoaXMoSGVhZGVyc1Byb3RvdHlwZS5zZXQpO1xuXG4gIHZhciB3cmFwUmVxdWVzdE9wdGlvbnMgPSBmdW5jdGlvbiAoaW5pdCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkge1xuICAgICAgdmFyIGJvZHkgPSBpbml0LmJvZHk7XG4gICAgICB2YXIgaGVhZGVycztcbiAgICAgIGlmIChjbGFzc29mKGJvZHkpID09PSBVUkxfU0VBUkNIX1BBUkFNUykge1xuICAgICAgICBoZWFkZXJzID0gaW5pdC5oZWFkZXJzID8gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzKSA6IG5ldyBIZWFkZXJzKCk7XG4gICAgICAgIGlmICghaGVhZGVyc0hhcyhoZWFkZXJzLCAnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgICBoZWFkZXJzU2V0KGhlYWRlcnMsICdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlKGluaXQsIHtcbiAgICAgICAgICBib2R5OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgJHRvU3RyaW5nKGJvZHkpKSxcbiAgICAgICAgICBoZWFkZXJzOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgaGVhZGVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSByZXR1cm4gaW5pdDtcbiAgfTtcblxuICBpZiAoaXNDYWxsYWJsZShuYXRpdmVGZXRjaCkpIHtcbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBkb250Q2FsbEdldFNldDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGZldGNoOiBmdW5jdGlvbiBmZXRjaChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZldGNoKGlucHV0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHdyYXBSZXF1ZXN0T3B0aW9ucyhhcmd1bWVudHNbMV0pIDoge30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQ2FsbGFibGUoTmF0aXZlUmVxdWVzdCkpIHtcbiAgICB2YXIgUmVxdWVzdENvbnN0cnVjdG9yID0gZnVuY3Rpb24gUmVxdWVzdChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgUmVxdWVzdFByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZVJlcXVlc3QoaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgfTtcblxuICAgIFJlcXVlc3RQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZXF1ZXN0Q29uc3RydWN0b3I7XG4gICAgUmVxdWVzdENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFJlcXVlc3RQcm90b3R5cGU7XG5cbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZG9udENhbGxHZXRTZXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBSZXF1ZXN0OiBSZXF1ZXN0Q29uc3RydWN0b3JcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvcixcbiAgZ2V0U3RhdGU6IGdldEludGVybmFsUGFyYW1zU3RhdGVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xudmFyIGFycmF5RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNvZGVBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY29kZUF0O1xudmFyIHRvQVNDSUkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXB1bnljb2RlLXRvLWFzY2lpJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIFVSTFNlYXJjaFBhcmFtc01vZHVsZSA9IHJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsVVJMU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcignVVJMJyk7XG52YXIgVVJMU2VhcmNoUGFyYW1zID0gVVJMU2VhcmNoUGFyYW1zTW9kdWxlLlVSTFNlYXJjaFBhcmFtcztcbnZhciBnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlID0gVVJMU2VhcmNoUGFyYW1zTW9kdWxlLmdldFN0YXRlO1xuXG52YXIgTmF0aXZlVVJMID0gZ2xvYmFsVGhpcy5VUkw7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsVGhpcy5UeXBlRXJyb3I7XG52YXIgcGFyc2VJbnQgPSBnbG9iYWxUaGlzLnBhcnNlSW50O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcbnZhciBwb3AgPSB1bmN1cnJ5VGhpcyhbXS5wb3ApO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS5zaGlmdCk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgdG9Mb3dlckNhc2UgPSB1bmN1cnJ5VGhpcygnJy50b0xvd2VyQ2FzZSk7XG52YXIgdW5zaGlmdCA9IHVuY3VycnlUaGlzKFtdLnVuc2hpZnQpO1xuXG52YXIgSU5WQUxJRF9BVVRIT1JJVFkgPSAnSW52YWxpZCBhdXRob3JpdHknO1xudmFyIElOVkFMSURfU0NIRU1FID0gJ0ludmFsaWQgc2NoZW1lJztcbnZhciBJTlZBTElEX0hPU1QgPSAnSW52YWxpZCBob3N0JztcbnZhciBJTlZBTElEX1BPUlQgPSAnSW52YWxpZCBwb3J0JztcblxudmFyIEFMUEhBID0gL1thLXpdL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLW9ic2N1cmUtcmFuZ2UgLS0gc2FmZVxudmFyIEFMUEhBTlVNRVJJQyA9IC9bXFxkKy0uYS16XS9pO1xudmFyIERJR0lUID0gL1xcZC87XG52YXIgSEVYX1NUQVJUID0gL14weC9pO1xudmFyIE9DVCA9IC9eWzAtN10rJC87XG52YXIgREVDID0gL15cXGQrJC87XG52YXIgSEVYID0gL15bXFxkYS1mXSskL2k7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tY29udHJvbC1jaGFyYWN0ZXIgLS0gc2FmZSAqL1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlQgPSAvW1xcMFxcdFxcblxcciAjJS86PD4/QFtcXFxcXFxdXnxdLztcbnZhciBGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5UID0gL1tcXDBcXHRcXG5cXHIgIy86PD4/QFtcXFxcXFxdXnxdLztcbnZhciBMRUFESU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UgPSAvXltcXHUwMDAwLVxcdTAwMjBdKy87XG52YXIgVFJBSUxJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSA9IC8oXnxbXlxcdTAwMDAtXFx1MDAyMF0pW1xcdTAwMDAtXFx1MDAyMF0rJC87XG52YXIgVEFCX0FORF9ORVdfTElORSA9IC9bXFx0XFxuXFxyXS9nO1xuLyogZXNsaW50LWVuYWJsZSByZWdleHAvbm8tY29udHJvbC1jaGFyYWN0ZXIgLS0gc2FmZSAqL1xudmFyIEVPRjtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpcHY0LW51bWJlci1wYXJzZXJcbnZhciBwYXJzZUlQdjQgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIHBhcnRzID0gc3BsaXQoaW5wdXQsICcuJyk7XG4gIHZhciBwYXJ0c0xlbmd0aCwgbnVtYmVycywgaW5kZXgsIHBhcnQsIHJhZGl4LCBudW1iZXIsIGlwdjQ7XG4gIGlmIChwYXJ0cy5sZW5ndGggJiYgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgcGFydHMubGVuZ3RoLS07XG4gIH1cbiAgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChwYXJ0c0xlbmd0aCA+IDQpIHJldHVybiBpbnB1dDtcbiAgbnVtYmVycyA9IFtdO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07XG4gICAgaWYgKHBhcnQgPT09ICcnKSByZXR1cm4gaW5wdXQ7XG4gICAgcmFkaXggPSAxMDtcbiAgICBpZiAocGFydC5sZW5ndGggPiAxICYmIGNoYXJBdChwYXJ0LCAwKSA9PT0gJzAnKSB7XG4gICAgICByYWRpeCA9IGV4ZWMoSEVYX1NUQVJULCBwYXJ0KSA/IDE2IDogODtcbiAgICAgIHBhcnQgPSBzdHJpbmdTbGljZShwYXJ0LCByYWRpeCA9PT0gOCA/IDEgOiAyKTtcbiAgICB9XG4gICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICBudW1iZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWV4ZWMocmFkaXggPT09IDEwID8gREVDIDogcmFkaXggPT09IDggPyBPQ1QgOiBIRVgsIHBhcnQpKSByZXR1cm4gaW5wdXQ7XG4gICAgICBudW1iZXIgPSBwYXJzZUludChwYXJ0LCByYWRpeCk7XG4gICAgfVxuICAgIHB1c2gobnVtYmVycywgbnVtYmVyKTtcbiAgfVxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIG51bWJlciA9IG51bWJlcnNbaW5kZXhdO1xuICAgIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGggLSAxKSB7XG4gICAgICBpZiAobnVtYmVyID49IHBvdygyNTYsIDUgLSBwYXJ0c0xlbmd0aCkpIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID4gMjU1KSByZXR1cm4gbnVsbDtcbiAgfVxuICBpcHY0ID0gcG9wKG51bWJlcnMpO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlwdjQgKz0gbnVtYmVyc1tpbmRleF0gKiBwb3coMjU2LCAzIC0gaW5kZXgpO1xuICB9XG4gIHJldHVybiBpcHY0O1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWlwdjYtcGFyc2VyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xudmFyIHBhcnNlSVB2NiA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgYWRkcmVzcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgdmFyIHBpZWNlSW5kZXggPSAwO1xuICB2YXIgY29tcHJlc3MgPSBudWxsO1xuICB2YXIgcG9pbnRlciA9IDA7XG4gIHZhciB2YWx1ZSwgbGVuZ3RoLCBudW1iZXJzU2VlbiwgaXB2NFBpZWNlLCBudW1iZXIsIHN3YXBzLCBzd2FwO1xuXG4gIHZhciBjaHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYXJBdChpbnB1dCwgcG9pbnRlcik7XG4gIH07XG5cbiAgaWYgKGNocigpID09PSAnOicpIHtcbiAgICBpZiAoY2hhckF0KGlucHV0LCAxKSAhPT0gJzonKSByZXR1cm47XG4gICAgcG9pbnRlciArPSAyO1xuICAgIHBpZWNlSW5kZXgrKztcbiAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XG4gIH1cbiAgd2hpbGUgKGNocigpKSB7XG4gICAgaWYgKHBpZWNlSW5kZXggPT09IDgpIHJldHVybjtcbiAgICBpZiAoY2hyKCkgPT09ICc6Jykge1xuICAgICAgaWYgKGNvbXByZXNzICE9PSBudWxsKSByZXR1cm47XG4gICAgICBwb2ludGVyKys7XG4gICAgICBwaWVjZUluZGV4Kys7XG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFsdWUgPSBsZW5ndGggPSAwO1xuICAgIHdoaWxlIChsZW5ndGggPCA0ICYmIGV4ZWMoSEVYLCBjaHIoKSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgKiAxNiArIHBhcnNlSW50KGNocigpLCAxNik7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBsZW5ndGgrKztcbiAgICB9XG4gICAgaWYgKGNocigpID09PSAnLicpIHtcbiAgICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHBvaW50ZXIgLT0gbGVuZ3RoO1xuICAgICAgaWYgKHBpZWNlSW5kZXggPiA2KSByZXR1cm47XG4gICAgICBudW1iZXJzU2VlbiA9IDA7XG4gICAgICB3aGlsZSAoY2hyKCkpIHtcbiAgICAgICAgaXB2NFBpZWNlID0gbnVsbDtcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xuICAgICAgICAgIGlmIChjaHIoKSA9PT0gJy4nICYmIG51bWJlcnNTZWVuIDwgNCkgcG9pbnRlcisrO1xuICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhlYyhESUdJVCwgY2hyKCkpKSByZXR1cm47XG4gICAgICAgIHdoaWxlIChleGVjKERJR0lULCBjaHIoKSkpIHtcbiAgICAgICAgICBudW1iZXIgPSBwYXJzZUludChjaHIoKSwgMTApO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPT09IG51bGwpIGlwdjRQaWVjZSA9IG51bWJlcjtcbiAgICAgICAgICBlbHNlIGlmIChpcHY0UGllY2UgPT09IDApIHJldHVybjtcbiAgICAgICAgICBlbHNlIGlwdjRQaWVjZSA9IGlwdjRQaWVjZSAqIDEwICsgbnVtYmVyO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPiAyNTUpIHJldHVybjtcbiAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAyNTYgKyBpcHY0UGllY2U7XG4gICAgICAgIG51bWJlcnNTZWVuKys7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PT0gMiB8fCBudW1iZXJzU2VlbiA9PT0gNCkgcGllY2VJbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9PSA0KSByZXR1cm47XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGNocigpID09PSAnOicpIHtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIGlmICghY2hyKCkpIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGNocigpKSByZXR1cm47XG4gICAgYWRkcmVzc1twaWVjZUluZGV4KytdID0gdmFsdWU7XG4gIH1cbiAgaWYgKGNvbXByZXNzICE9PSBudWxsKSB7XG4gICAgc3dhcHMgPSBwaWVjZUluZGV4IC0gY29tcHJlc3M7XG4gICAgcGllY2VJbmRleCA9IDc7XG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT09IDAgJiYgc3dhcHMgPiAwKSB7XG4gICAgICBzd2FwID0gYWRkcmVzc1twaWVjZUluZGV4XTtcbiAgICAgIGFkZHJlc3NbcGllY2VJbmRleC0tXSA9IGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdO1xuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIC0tc3dhcHNdID0gc3dhcDtcbiAgICB9XG4gIH0gZWxzZSBpZiAocGllY2VJbmRleCAhPT0gOCkgcmV0dXJuO1xuICByZXR1cm4gYWRkcmVzcztcbn07XG5cbnZhciBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZSA9IGZ1bmN0aW9uIChpcHY2KSB7XG4gIHZhciBtYXhJbmRleCA9IG51bGw7XG4gIHZhciBtYXhMZW5ndGggPSAxO1xuICB2YXIgY3VyclN0YXJ0ID0gbnVsbDtcbiAgdmFyIGN1cnJMZW5ndGggPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICBmb3IgKDsgaW5kZXggPCA4OyBpbmRleCsrKSB7XG4gICAgaWYgKGlwdjZbaW5kZXhdICE9PSAwKSB7XG4gICAgICBpZiAoY3Vyckxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICBtYXhJbmRleCA9IGN1cnJTdGFydDtcbiAgICAgICAgbWF4TGVuZ3RoID0gY3Vyckxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XG4gICAgICBjdXJyTGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkgY3VyclN0YXJ0ID0gaW5kZXg7XG4gICAgICArK2N1cnJMZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoID8gY3VyclN0YXJ0IDogbWF4SW5kZXg7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2hvc3Qtc2VyaWFsaXppbmdcbnZhciBzZXJpYWxpemVIb3N0ID0gZnVuY3Rpb24gKGhvc3QpIHtcbiAgdmFyIHJlc3VsdCwgaW5kZXgsIGNvbXByZXNzLCBpZ25vcmUwO1xuXG4gIC8vIGlwdjRcbiAgaWYgKHR5cGVvZiBob3N0ID09ICdudW1iZXInKSB7XG4gICAgcmVzdWx0ID0gW107XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykge1xuICAgICAgdW5zaGlmdChyZXN1bHQsIGhvc3QgJSAyNTYpO1xuICAgICAgaG9zdCA9IGZsb29yKGhvc3QgLyAyNTYpO1xuICAgIH1cbiAgICByZXR1cm4gam9pbihyZXN1bHQsICcuJyk7XG4gIH1cblxuICAvLyBpcHY2XG4gIGlmICh0eXBlb2YgaG9zdCA9PSAnb2JqZWN0Jykge1xuICAgIHJlc3VsdCA9ICcnO1xuICAgIGNvbXByZXNzID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoaG9zdCk7XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgODsgaW5kZXgrKykge1xuICAgICAgaWYgKGlnbm9yZTAgJiYgaG9zdFtpbmRleF0gPT09IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKGlnbm9yZTApIGlnbm9yZTAgPSBmYWxzZTtcbiAgICAgIGlmIChjb21wcmVzcyA9PT0gaW5kZXgpIHtcbiAgICAgICAgcmVzdWx0ICs9IGluZGV4ID8gJzonIDogJzo6JztcbiAgICAgICAgaWdub3JlMCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gbnVtYmVyVG9TdHJpbmcoaG9zdFtpbmRleF0sIDE2KTtcbiAgICAgICAgaWYgKGluZGV4IDwgNykgcmVzdWx0ICs9ICc6JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdbJyArIHJlc3VsdCArICddJztcbiAgfVxuXG4gIHJldHVybiBob3N0O1xufTtcblxudmFyIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQgPSB7fTtcbnZhciBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyAnOiAxLCAnXCInOiAxLCAnPCc6IDEsICc+JzogMSwgJ2AnOiAxXG59KTtcbnZhciBwYXRoUGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcjJzogMSwgJz8nOiAxLCAneyc6IDEsICd9JzogMVxufSk7XG52YXIgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBwYXRoUGVyY2VudEVuY29kZVNldCwge1xuICAnLyc6IDEsICc6JzogMSwgJzsnOiAxLCAnPSc6IDEsICdAJzogMSwgJ1snOiAxLCAnXFxcXCc6IDEsICddJzogMSwgJ14nOiAxLCAnfCc6IDFcbn0pO1xuXG52YXIgcGVyY2VudEVuY29kZSA9IGZ1bmN0aW9uIChjaHIsIHNldCkge1xuICB2YXIgY29kZSA9IGNvZGVBdChjaHIsIDApO1xuICByZXR1cm4gY29kZSA+IDB4MjAgJiYgY29kZSA8IDB4N0YgJiYgIWhhc093bihzZXQsIGNocikgPyBjaHIgOiBlbmNvZGVVUklDb21wb25lbnQoY2hyKTtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3BlY2lhbC1zY2hlbWVcbnZhciBzcGVjaWFsU2NoZW1lcyA9IHtcbiAgZnRwOiAyMSxcbiAgZmlsZTogbnVsbCxcbiAgaHR0cDogODAsXG4gIGh0dHBzOiA0NDMsXG4gIHdzOiA4MCxcbiAgd3NzOiA0NDNcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jd2luZG93cy1kcml2ZS1sZXR0ZXJcbnZhciBpc1dpbmRvd3NEcml2ZUxldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcsIG5vcm1hbGl6ZWQpIHtcbiAgdmFyIHNlY29uZDtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgZXhlYyhBTFBIQSwgY2hhckF0KHN0cmluZywgMCkpXG4gICAgJiYgKChzZWNvbmQgPSBjaGFyQXQoc3RyaW5nLCAxKSkgPT09ICc6JyB8fCAoIW5vcm1hbGl6ZWQgJiYgc2Vjb25kID09PSAnfCcpKTtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3RhcnQtd2l0aC1hLXdpbmRvd3MtZHJpdmUtbGV0dGVyXG52YXIgc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIHRoaXJkO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA+IDEgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoc3RyaW5nU2xpY2Uoc3RyaW5nLCAwLCAyKSkgJiYgKFxuICAgIHN0cmluZy5sZW5ndGggPT09IDIgfHxcbiAgICAoKHRoaXJkID0gY2hhckF0KHN0cmluZywgMikpID09PSAnLycgfHwgdGhpcmQgPT09ICdcXFxcJyB8fCB0aGlyZCA9PT0gJz8nIHx8IHRoaXJkID09PSAnIycpXG4gICk7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3NpbmdsZS1kb3QtcGF0aC1zZWdtZW50XG52YXIgaXNTaW5nbGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICByZXR1cm4gc2VnbWVudCA9PT0gJy4nIHx8IHRvTG93ZXJDYXNlKHNlZ21lbnQpID09PSAnJTJlJztcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG91YmxlLWRvdC1wYXRoLXNlZ21lbnRcbnZhciBpc0RvdWJsZURvdCA9IGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gIHNlZ21lbnQgPSB0b0xvd2VyQ2FzZShzZWdtZW50KTtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuLicgfHwgc2VnbWVudCA9PT0gJyUyZS4nIHx8IHNlZ21lbnQgPT09ICcuJTJlJyB8fCBzZWdtZW50ID09PSAnJTJlJTJlJztcbn07XG5cbi8vIFN0YXRlczpcbnZhciBTQ0hFTUVfU1RBUlQgPSB7fTtcbnZhciBTQ0hFTUUgPSB7fTtcbnZhciBOT19TQ0hFTUUgPSB7fTtcbnZhciBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFBBVEhfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUkVMQVRJVkUgPSB7fTtcbnZhciBSRUxBVElWRV9TTEFTSCA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVMgPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUyA9IHt9O1xudmFyIEFVVEhPUklUWSA9IHt9O1xudmFyIEhPU1QgPSB7fTtcbnZhciBIT1NUTkFNRSA9IHt9O1xudmFyIFBPUlQgPSB7fTtcbnZhciBGSUxFID0ge307XG52YXIgRklMRV9TTEFTSCA9IHt9O1xudmFyIEZJTEVfSE9TVCA9IHt9O1xudmFyIFBBVEhfU1RBUlQgPSB7fTtcbnZhciBQQVRIID0ge307XG52YXIgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSCA9IHt9O1xudmFyIFFVRVJZID0ge307XG52YXIgRlJBR01FTlQgPSB7fTtcblxudmFyIFVSTFN0YXRlID0gZnVuY3Rpb24gKHVybCwgaXNCYXNlLCBiYXNlKSB7XG4gIHZhciB1cmxTdHJpbmcgPSAkdG9TdHJpbmcodXJsKTtcbiAgdmFyIGJhc2VTdGF0ZSwgZmFpbHVyZSwgc2VhcmNoUGFyYW1zO1xuICBpZiAoaXNCYXNlKSB7XG4gICAgZmFpbHVyZSA9IHRoaXMucGFyc2UodXJsU3RyaW5nKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkgYmFzZVN0YXRlID0gbmV3IFVSTFN0YXRlKGJhc2UsIHRydWUpO1xuICAgIGZhaWx1cmUgPSB0aGlzLnBhcnNlKHVybFN0cmluZywgbnVsbCwgYmFzZVN0YXRlKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICBzZWFyY2hQYXJhbXMgPSBnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlKG5ldyBVUkxTZWFyY2hQYXJhbXMoKSk7XG4gICAgc2VhcmNoUGFyYW1zLmJpbmRVUkwodGhpcyk7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMgPSBzZWFyY2hQYXJhbXM7XG4gIH1cbn07XG5cblVSTFN0YXRlLnByb3RvdHlwZSA9IHtcbiAgdHlwZTogJ1VSTCcsXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXBhcnNpbmdcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbiAgcGFyc2U6IGZ1bmN0aW9uIChpbnB1dCwgc3RhdGVPdmVycmlkZSwgYmFzZSkge1xuICAgIHZhciB1cmwgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgU0NIRU1FX1NUQVJUO1xuICAgIHZhciBwb2ludGVyID0gMDtcbiAgICB2YXIgYnVmZmVyID0gJyc7XG4gICAgdmFyIHNlZW5BdCA9IGZhbHNlO1xuICAgIHZhciBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgIHZhciBzZWVuUGFzc3dvcmRUb2tlbiA9IGZhbHNlO1xuICAgIHZhciBjb2RlUG9pbnRzLCBjaHIsIGJ1ZmZlckNvZGVQb2ludHMsIGZhaWx1cmU7XG5cbiAgICBpbnB1dCA9ICR0b1N0cmluZyhpbnB1dCk7XG5cbiAgICBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgIHVybC5zY2hlbWUgPSAnJztcbiAgICAgIHVybC51c2VybmFtZSA9ICcnO1xuICAgICAgdXJsLnBhc3N3b3JkID0gJyc7XG4gICAgICB1cmwuaG9zdCA9IG51bGw7XG4gICAgICB1cmwucG9ydCA9IG51bGw7XG4gICAgICB1cmwucGF0aCA9IFtdO1xuICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIHVybC5mcmFnbWVudCA9IG51bGw7XG4gICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IGZhbHNlO1xuICAgICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBMRUFESU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UsICcnKTtcbiAgICAgIGlucHV0ID0gcmVwbGFjZShpbnB1dCwgVFJBSUxJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSwgJyQxJyk7XG4gICAgfVxuXG4gICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBUQUJfQU5EX05FV19MSU5FLCAnJyk7XG5cbiAgICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcblxuICAgIHdoaWxlIChwb2ludGVyIDw9IGNvZGVQb2ludHMubGVuZ3RoKSB7XG4gICAgICBjaHIgPSBjb2RlUG9pbnRzW3BvaW50ZXJdO1xuICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICBjYXNlIFNDSEVNRV9TVEFSVDpcbiAgICAgICAgICBpZiAoY2hyICYmIGV4ZWMoQUxQSEEsIGNocikpIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSB0b0xvd2VyQ2FzZShjaHIpO1xuICAgICAgICAgICAgc3RhdGUgPSBTQ0hFTUU7XG4gICAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU0NIRU1FOlxuICAgICAgICAgIGlmIChjaHIgJiYgKGV4ZWMoQUxQSEFOVU1FUklDLCBjaHIpIHx8IGNociA9PT0gJysnIHx8IGNociA9PT0gJy0nIHx8IGNociA9PT0gJy4nKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHRvTG93ZXJDYXNlKGNocik7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICc6Jykge1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgKFxuICAgICAgICAgICAgICAodXJsLmlzU3BlY2lhbCgpICE9PSBoYXNPd24oc3BlY2lhbFNjaGVtZXMsIGJ1ZmZlcikpIHx8XG4gICAgICAgICAgICAgIChidWZmZXIgPT09ICdmaWxlJyAmJiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHx8XG4gICAgICAgICAgICAgICh1cmwuc2NoZW1lID09PSAnZmlsZScgJiYgIXVybC5ob3N0KVxuICAgICAgICAgICAgKSkgcmV0dXJuO1xuICAgICAgICAgICAgdXJsLnNjaGVtZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0gPT09IHVybC5wb3J0KSB1cmwucG9ydCA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICBzdGF0ZSA9IEZJTEU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiBiYXNlICYmIGJhc2Uuc2NoZW1lID09PSB1cmwuc2NoZW1lKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5pc1NwZWNpYWwoKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludHNbcG9pbnRlciArIDFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX09SX0FVVEhPUklUWTtcbiAgICAgICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIHN0YXRlID0gQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gTk9fU0NIRU1FO1xuICAgICAgICAgICAgcG9pbnRlciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTk9fU0NIRU1FOlxuICAgICAgICAgIGlmICghYmFzZSB8fCAoYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGNociAhPT0gJyMnKSkgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGlmIChiYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IGJhc2Uuc2NoZW1lID09PSAnZmlsZScgPyBGSUxFIDogUkVMQVRJVkU7XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycgJiYgY29kZVBvaW50c1twb2ludGVyICsgMV0gPT09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSBSRUxBVElWRTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIX09SX0FVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFTEFUSVZFOlxuICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICBpZiAoY2hyID09PSBFT0YpIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PT0gJy8nIHx8IChjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFJFTEFUSVZFX1NMQVNIO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucGF0aC5sZW5ndGgtLTtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSRUxBVElWRV9TTEFTSDpcbiAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIChjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJykpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTOlxuICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgaWYgKGNociAhPT0gJy8nIHx8IGNoYXJBdChidWZmZXIsIHBvaW50ZXIgKyAxKSAhPT0gJy8nKSBjb250aW51ZTtcbiAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUzpcbiAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgY2hyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEFVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09PSAnQCcpIHtcbiAgICAgICAgICAgIGlmIChzZWVuQXQpIGJ1ZmZlciA9ICclNDAnICsgYnVmZmVyO1xuICAgICAgICAgICAgc2VlbkF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJ1ZmZlckNvZGVQb2ludHMgPSBhcnJheUZyb20oYnVmZmVyKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyQ29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gYnVmZmVyQ29kZVBvaW50c1tpXTtcbiAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gJzonICYmICFzZWVuUGFzc3dvcmRUb2tlbikge1xuICAgICAgICAgICAgICAgIHNlZW5QYXNzd29yZFRva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludCwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICAgICAgaWYgKHNlZW5QYXNzd29yZFRva2VuKSB1cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgICAgIGVsc2UgdXJsLnVzZXJuYW1lICs9IGVuY29kZWRDb2RlUG9pbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNociA9PT0gRU9GIHx8IGNociA9PT0gJy8nIHx8IGNociA9PT0gJz8nIHx8IGNociA9PT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHNlZW5BdCAmJiBidWZmZXIgPT09ICcnKSByZXR1cm4gSU5WQUxJRF9BVVRIT1JJVFk7XG4gICAgICAgICAgICBwb2ludGVyIC09IGFycmF5RnJvbShidWZmZXIpLmxlbmd0aCArIDE7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gSE9TVDtcbiAgICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNocjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEhPU1Q6XG4gICAgICAgIGNhc2UgSE9TVE5BTUU6XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgdXJsLnNjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnOicgJiYgIXNlZW5CcmFja2V0KSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyID09PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUE9SVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlID09PSBIT1NUTkFNRSkgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkgJiYgYnVmZmVyID09PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIGJ1ZmZlciA9PT0gJycgJiYgKHVybC5pbmNsdWRlc0NyZWRlbnRpYWxzKCkgfHwgdXJsLnBvcnQgIT09IG51bGwpKSByZXR1cm47XG4gICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjaHIgPT09ICdbJykgc2VlbkJyYWNrZXQgPSB0cnVlO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09PSAnXScpIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQT1JUOlxuICAgICAgICAgIGlmIChleGVjKERJR0lULCBjaHIpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fCBjaHIgPT09ICc/JyB8fCBjaHIgPT09ICcjJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkgfHxcbiAgICAgICAgICAgIHN0YXRlT3ZlcnJpZGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIgIT09ICcnKSB7XG4gICAgICAgICAgICAgIHZhciBwb3J0ID0gcGFyc2VJbnQoYnVmZmVyLCAxMCk7XG4gICAgICAgICAgICAgIGlmIChwb3J0ID4gMHhGRkZGKSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgICAgICB1cmwucG9ydCA9ICh1cmwuaXNTcGVjaWFsKCkgJiYgcG9ydCA9PT0gc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0pID8gbnVsbCA6IHBvcnQ7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRklMRTpcbiAgICAgICAgICB1cmwuc2NoZW1lID0gJ2ZpbGUnO1xuICAgICAgICAgIGlmIChjaHIgPT09ICcvJyB8fCBjaHIgPT09ICdcXFxcJykgc3RhdGUgPSBGSUxFX1NMQVNIO1xuICAgICAgICAgIGVsc2UgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgc3dpdGNoIChjaHIpIHtcbiAgICAgICAgICAgICAgY2FzZSBFT0Y6XG4gICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlcihqb2luKGFycmF5U2xpY2UoY29kZVBvaW50cywgcG9pbnRlciksICcnKSkpIHtcbiAgICAgICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICAgICAgICB1cmwuc2hvcnRlblBhdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRklMRV9TTEFTSDpcbiAgICAgICAgICBpZiAoY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHN0YXRlID0gRklMRV9IT1NUO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09PSAnZmlsZScgJiYgIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoam9pbihhcnJheVNsaWNlKGNvZGVQb2ludHMsIHBvaW50ZXIpLCAnJykpKSB7XG4gICAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYmFzZS5wYXRoWzBdLCB0cnVlKSkgcHVzaCh1cmwucGF0aCwgYmFzZS5wYXRoWzBdKTtcbiAgICAgICAgICAgIGVsc2UgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIEZJTEVfSE9TVDpcbiAgICAgICAgICBpZiAoY2hyID09PSBFT0YgfHwgY2hyID09PSAnLycgfHwgY2hyID09PSAnXFxcXCcgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycpIHtcbiAgICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyID09PSAnJykge1xuICAgICAgICAgICAgICB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICAgIGlmICh1cmwuaG9zdCA9PT0gJ2xvY2FsaG9zdCcpIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICB9IGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSF9TVEFSVDpcbiAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgY2hyICE9PSAnXFxcXCcpIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09PSAnPycpIHtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT09IEVPRikge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgaWYgKGNociAhPT0gJy8nKSBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSDpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaHIgPT09IEVPRiB8fCBjaHIgPT09ICcvJyB8fFxuICAgICAgICAgICAgKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkgfHxcbiAgICAgICAgICAgICghc3RhdGVPdmVycmlkZSAmJiAoY2hyID09PSAnPycgfHwgY2hyID09PSAnIycpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGlzRG91YmxlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgdXJsLnNob3J0ZW5QYXRoKCk7XG4gICAgICAgICAgICAgIGlmIChjaHIgIT09ICcvJyAmJiAhKGNociA9PT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVEb3QoYnVmZmVyKSkge1xuICAgICAgICAgICAgICBpZiAoY2hyICE9PSAnLycgJiYgIShjaHIgPT09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PT0gJ2ZpbGUnICYmICF1cmwucGF0aC5sZW5ndGggJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYnVmZmVyKSkge1xuICAgICAgICAgICAgICAgIGlmICh1cmwuaG9zdCkgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBjaGFyQXQoYnVmZmVyLCAwKSArICc6JzsgLy8gbm9ybWFsaXplIHdpbmRvd3MgZHJpdmUgbGV0dGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT09ICdmaWxlJyAmJiAoY2hyID09PSBFT0YgfHwgY2hyID09PSAnPycgfHwgY2hyID09PSAnIycpKSB7XG4gICAgICAgICAgICAgIHdoaWxlICh1cmwucGF0aC5sZW5ndGggPiAxICYmIHVybC5wYXRoWzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNoaWZ0KHVybC5wYXRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBwYXRoUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg6XG4gICAgICAgICAgaWYgKGNociA9PT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9PSBFT0YpIHtcbiAgICAgICAgICAgIHVybC5wYXRoWzBdICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUVVFUlk6XG4gICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT09IEVPRikge1xuICAgICAgICAgICAgaWYgKGNociA9PT0gXCInXCIgJiYgdXJsLmlzU3BlY2lhbCgpKSB1cmwucXVlcnkgKz0gJyUyNyc7XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgPT09ICcjJykgdXJsLnF1ZXJ5ICs9ICclMjMnO1xuICAgICAgICAgICAgZWxzZSB1cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShjaHIsIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGUkFHTUVOVDpcbiAgICAgICAgICBpZiAoY2hyICE9PSBFT0YpIHVybC5mcmFnbWVudCArPSBwZXJjZW50RW5jb2RlKGNociwgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcG9pbnRlcisrO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNob3N0LXBhcnNpbmdcbiAgcGFyc2VIb3N0OiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICB2YXIgcmVzdWx0LCBjb2RlUG9pbnRzLCBpbmRleDtcbiAgICBpZiAoY2hhckF0KGlucHV0LCAwKSA9PT0gJ1snKSB7XG4gICAgICBpZiAoY2hhckF0KGlucHV0LCBpbnB1dC5sZW5ndGggLSAxKSAhPT0gJ10nKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gcGFyc2VJUHY2KHN0cmluZ1NsaWNlKGlucHV0LCAxLCAtMSkpO1xuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgLy8gb3BhcXVlIGhvc3RcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU3BlY2lhbCgpKSB7XG4gICAgICBpZiAoZXhlYyhGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5ULCBpbnB1dCkpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSAnJztcbiAgICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29kZVBvaW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpbmRleF0sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IHRvQVNDSUkoaW5wdXQpO1xuICAgICAgaWYgKGV4ZWMoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCwgaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gcGFyc2VJUHY0KGlucHV0KTtcbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2Nhbm5vdC1oYXZlLWEtdXNlcm5hbWUtcGFzc3dvcmQtcG9ydFxuICBjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gIXRoaXMuaG9zdCB8fCB0aGlzLmNhbm5vdEJlQUJhc2VVUkwgfHwgdGhpcy5zY2hlbWUgPT09ICdmaWxlJztcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpbmNsdWRlLWNyZWRlbnRpYWxzXG4gIGluY2x1ZGVzQ3JlZGVudGlhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy51c2VybmFtZSAhPT0gJycgfHwgdGhpcy5wYXNzd29yZCAhPT0gJyc7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaXMtc3BlY2lhbFxuICBpc1NwZWNpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFzT3duKHNwZWNpYWxTY2hlbWVzLCB0aGlzLnNjaGVtZSk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc2hvcnRlbi1hLXVybHMtcGF0aFxuICBzaG9ydGVuUGF0aDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gdGhpcy5wYXRoO1xuICAgIHZhciBwYXRoU2l6ZSA9IHBhdGgubGVuZ3RoO1xuICAgIGlmIChwYXRoU2l6ZSAmJiAodGhpcy5zY2hlbWUgIT09ICdmaWxlJyB8fCBwYXRoU2l6ZSAhPT0gMSB8fCAhaXNXaW5kb3dzRHJpdmVMZXR0ZXIocGF0aFswXSwgdHJ1ZSkpKSB7XG4gICAgICBwYXRoLmxlbmd0aC0tO1xuICAgIH1cbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4gIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciB1cmwgPSB0aGlzO1xuICAgIHZhciBzY2hlbWUgPSB1cmwuc2NoZW1lO1xuICAgIHZhciB1c2VybmFtZSA9IHVybC51c2VybmFtZTtcbiAgICB2YXIgcGFzc3dvcmQgPSB1cmwucGFzc3dvcmQ7XG4gICAgdmFyIGhvc3QgPSB1cmwuaG9zdDtcbiAgICB2YXIgcG9ydCA9IHVybC5wb3J0O1xuICAgIHZhciBwYXRoID0gdXJsLnBhdGg7XG4gICAgdmFyIHF1ZXJ5ID0gdXJsLnF1ZXJ5O1xuICAgIHZhciBmcmFnbWVudCA9IHVybC5mcmFnbWVudDtcbiAgICB2YXIgb3V0cHV0ID0gc2NoZW1lICsgJzonO1xuICAgIGlmIChob3N0ICE9PSBudWxsKSB7XG4gICAgICBvdXRwdXQgKz0gJy8vJztcbiAgICAgIGlmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpKSB7XG4gICAgICAgIG91dHB1dCArPSB1c2VybmFtZSArIChwYXNzd29yZCA/ICc6JyArIHBhc3N3b3JkIDogJycpICsgJ0AnO1xuICAgICAgfVxuICAgICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gICAgICBpZiAocG9ydCAhPT0gbnVsbCkgb3V0cHV0ICs9ICc6JyArIHBvcnQ7XG4gICAgfSBlbHNlIGlmIChzY2hlbWUgPT09ICdmaWxlJykgb3V0cHV0ICs9ICcvLyc7XG4gICAgb3V0cHV0ICs9IHVybC5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgam9pbihwYXRoLCAnLycpIDogJyc7XG4gICAgaWYgKHF1ZXJ5ICE9PSBudWxsKSBvdXRwdXQgKz0gJz8nICsgcXVlcnk7XG4gICAgaWYgKGZyYWdtZW50ICE9PSBudWxsKSBvdXRwdXQgKz0gJyMnICsgZnJhZ21lbnQ7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhyZWZcbiAgc2V0SHJlZjogZnVuY3Rpb24gKGhyZWYpIHtcbiAgICB2YXIgZmFpbHVyZSA9IHRoaXMucGFyc2UoaHJlZik7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IG5ldyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gICAgdGhpcy5zZWFyY2hQYXJhbXMudXBkYXRlKCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1vcmlnaW5cbiAgZ2V0T3JpZ2luOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjaGVtZSA9IHRoaXMuc2NoZW1lO1xuICAgIHZhciBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIGlmIChzY2hlbWUgPT09ICdibG9iJykgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgVVJMQ29uc3RydWN0b3Ioc2NoZW1lLnBhdGhbMF0pLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgaWYgKHNjaGVtZSA9PT0gJ2ZpbGUnIHx8ICF0aGlzLmlzU3BlY2lhbCgpKSByZXR1cm4gJ251bGwnO1xuICAgIHJldHVybiBzY2hlbWUgKyAnOi8vJyArIHNlcmlhbGl6ZUhvc3QodGhpcy5ob3N0KSArIChwb3J0ICE9PSBudWxsID8gJzonICsgcG9ydCA6ICcnKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gIGdldFByb3RvY29sOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1lICsgJzonO1xuICB9LFxuICBzZXRQcm90b2NvbDogZnVuY3Rpb24gKHByb3RvY29sKSB7XG4gICAgdGhpcy5wYXJzZSgkdG9TdHJpbmcocHJvdG9jb2wpICsgJzonLCBTQ0hFTUVfU1RBUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgZ2V0VXNlcm5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy51c2VybmFtZTtcbiAgfSxcbiAgc2V0VXNlcm5hbWU6IGZ1bmN0aW9uICh1c2VybmFtZSkge1xuICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyh1c2VybmFtZSkpO1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgdGhpcy51c2VybmFtZSA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGFzc3dvcmRcbiAgZ2V0UGFzc3dvcmQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXNzd29yZDtcbiAgfSxcbiAgc2V0UGFzc3dvcmQ6IGZ1bmN0aW9uIChwYXNzd29yZCkge1xuICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyhwYXNzd29yZCkpO1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgdGhpcy5wYXNzd29yZCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICBnZXRIb3N0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJ1xuICAgICAgOiBwb3J0ID09PSBudWxsID8gc2VyaWFsaXplSG9zdChob3N0KVxuICAgICAgOiBzZXJpYWxpemVIb3N0KGhvc3QpICsgJzonICsgcG9ydDtcbiAgfSxcbiAgc2V0SG9zdDogZnVuY3Rpb24gKGhvc3QpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXJzZShob3N0LCBIT1NUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gIGdldEhvc3RuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJyA6IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gIH0sXG4gIHNldEhvc3RuYW1lOiBmdW5jdGlvbiAoaG9zdG5hbWUpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXJzZShob3N0bmFtZSwgSE9TVE5BTUUpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcG9ydFxuICBnZXRQb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgcmV0dXJuIHBvcnQgPT09IG51bGwgPyAnJyA6ICR0b1N0cmluZyhwb3J0KTtcbiAgfSxcbiAgc2V0UG9ydDogZnVuY3Rpb24gKHBvcnQpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHBvcnQgPSAkdG9TdHJpbmcocG9ydCk7XG4gICAgaWYgKHBvcnQgPT09ICcnKSB0aGlzLnBvcnQgPSBudWxsO1xuICAgIGVsc2UgdGhpcy5wYXJzZShwb3J0LCBQT1JUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhdGhuYW1lXG4gIGdldFBhdGhuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhdGggPSB0aGlzLnBhdGg7XG4gICAgcmV0dXJuIHRoaXMuY2Fubm90QmVBQmFzZVVSTCA/IHBhdGhbMF0gOiBwYXRoLmxlbmd0aCA/ICcvJyArIGpvaW4ocGF0aCwgJy8nKSA6ICcnO1xuICB9LFxuICBzZXRQYXRobmFtZTogZnVuY3Rpb24gKHBhdGhuYW1lKSB7XG4gICAgaWYgKHRoaXMuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgIHRoaXMucGF0aCA9IFtdO1xuICAgIHRoaXMucGFyc2UocGF0aG5hbWUsIFBBVEhfU1RBUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNoXG4gIGdldFNlYXJjaDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgcmV0dXJuIHF1ZXJ5ID8gJz8nICsgcXVlcnkgOiAnJztcbiAgfSxcbiAgc2V0U2VhcmNoOiBmdW5jdGlvbiAoc2VhcmNoKSB7XG4gICAgc2VhcmNoID0gJHRvU3RyaW5nKHNlYXJjaCk7XG4gICAgaWYgKHNlYXJjaCA9PT0gJycpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhckF0KHNlYXJjaCwgMCkgPT09ICc/Jykgc2VhcmNoID0gc3RyaW5nU2xpY2Uoc2VhcmNoLCAxKTtcbiAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgIHRoaXMucGFyc2Uoc2VhcmNoLCBRVUVSWSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNocGFyYW1zXG4gIGdldFNlYXJjaFBhcmFtczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFBhcmFtcy5mYWNhZGU7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1oYXNoXG4gIGdldEhhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50O1xuICAgIHJldHVybiBmcmFnbWVudCA/ICcjJyArIGZyYWdtZW50IDogJyc7XG4gIH0sXG4gIHNldEhhc2g6IGZ1bmN0aW9uIChoYXNoKSB7XG4gICAgaGFzaCA9ICR0b1N0cmluZyhoYXNoKTtcbiAgICBpZiAoaGFzaCA9PT0gJycpIHtcbiAgICAgIHRoaXMuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2hhckF0KGhhc2gsIDApID09PSAnIycpIGhhc2ggPSBzdHJpbmdTbGljZShoYXNoLCAxKTtcbiAgICB0aGlzLmZyYWdtZW50ID0gJyc7XG4gICAgdGhpcy5wYXJzZShoYXNoLCBGUkFHTUVOVCk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaFBhcmFtcy5zZXJpYWxpemUoKSB8fCBudWxsO1xuICB9XG59O1xuXG4vLyBgVVJMYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtY2xhc3NcbnZhciBVUkxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTCh1cmwgLyogLCBiYXNlICovKSB7XG4gIHZhciB0aGF0ID0gYW5JbnN0YW5jZSh0aGlzLCBVUkxQcm90b3R5cGUpO1xuICB2YXIgYmFzZSA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN0YXRlID0gc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCBuZXcgVVJMU3RhdGUodXJsLCBmYWxzZSwgYmFzZSkpO1xuICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgdGhhdC5ocmVmID0gc3RhdGUuc2VyaWFsaXplKCk7XG4gICAgdGhhdC5vcmlnaW4gPSBzdGF0ZS5nZXRPcmlnaW4oKTtcbiAgICB0aGF0LnByb3RvY29sID0gc3RhdGUuZ2V0UHJvdG9jb2woKTtcbiAgICB0aGF0LnVzZXJuYW1lID0gc3RhdGUuZ2V0VXNlcm5hbWUoKTtcbiAgICB0aGF0LnBhc3N3b3JkID0gc3RhdGUuZ2V0UGFzc3dvcmQoKTtcbiAgICB0aGF0Lmhvc3QgPSBzdGF0ZS5nZXRIb3N0KCk7XG4gICAgdGhhdC5ob3N0bmFtZSA9IHN0YXRlLmdldEhvc3RuYW1lKCk7XG4gICAgdGhhdC5wb3J0ID0gc3RhdGUuZ2V0UG9ydCgpO1xuICAgIHRoYXQucGF0aG5hbWUgPSBzdGF0ZS5nZXRQYXRobmFtZSgpO1xuICAgIHRoYXQuc2VhcmNoID0gc3RhdGUuZ2V0U2VhcmNoKCk7XG4gICAgdGhhdC5zZWFyY2hQYXJhbXMgPSBzdGF0ZS5nZXRTZWFyY2hQYXJhbXMoKTtcbiAgICB0aGF0Lmhhc2ggPSBzdGF0ZS5nZXRIYXNoKCk7XG4gIH1cbn07XG5cbnZhciBVUkxQcm90b3R5cGUgPSBVUkxDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbnZhciBhY2Nlc3NvckRlc2NyaXB0b3IgPSBmdW5jdGlvbiAoZ2V0dGVyLCBzZXR0ZXIpIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpW2dldHRlcl0oKTtcbiAgICB9LFxuICAgIHNldDogc2V0dGVyICYmIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcylbc2V0dGVyXSh2YWx1ZSk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9O1xufTtcblxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhyZWZgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ocmVmXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdocmVmJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdzZXJpYWxpemUnLCAnc2V0SHJlZicpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUub3JpZ2luYCBnZXR0ZXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLW9yaWdpblxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnb3JpZ2luJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRPcmlnaW4nKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnByb3RvY29sYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcHJvdG9jb2xcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3Byb3RvY29sJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQcm90b2NvbCcsICdzZXRQcm90b2NvbCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUudXNlcm5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC11c2VybmFtZVxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAndXNlcm5hbWUnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFVzZXJuYW1lJywgJ3NldFVzZXJuYW1lJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wYXNzd29yZGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhc3N3b3JkXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwYXNzd29yZCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UGFzc3dvcmQnLCAnc2V0UGFzc3dvcmQnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhvc3RgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdob3N0JywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRIb3N0JywgJ3NldEhvc3QnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhvc3RuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdG5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ2hvc3RuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRIb3N0bmFtZScsICdzZXRIb3N0bmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucG9ydGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBvcnRcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3BvcnQnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBvcnQnLCAnc2V0UG9ydCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucGF0aG5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXRobmFtZVxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncGF0aG5hbWUnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBhdGhuYW1lJywgJ3NldFBhdGhuYW1lJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5zZWFyY2hgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3NlYXJjaCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0U2VhcmNoJywgJ3NldFNlYXJjaCcpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoUGFyYW1zYCBnZXR0ZXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaHBhcmFtc1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnc2VhcmNoUGFyYW1zJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRTZWFyY2hQYXJhbXMnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLmhhc2hgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1oYXNoXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdoYXNoJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRIYXNoJywgJ3NldEhhc2gnKSk7XG59XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvSlNPTmAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdG9qc29uXG5kZWZpbmVCdWlsdEluKFVSTFByb3RvdHlwZSwgJ3RvSlNPTicsIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jVVJMLXN0cmluZ2lmaWNhdGlvbi1iZWhhdmlvclxuZGVmaW5lQnVpbHRJbihVUkxQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5zZXJpYWxpemUoKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuaWYgKE5hdGl2ZVVSTCkge1xuICB2YXIgbmF0aXZlQ3JlYXRlT2JqZWN0VVJMID0gTmF0aXZlVVJMLmNyZWF0ZU9iamVjdFVSTDtcbiAgdmFyIG5hdGl2ZVJldm9rZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5yZXZva2VPYmplY3RVUkw7XG4gIC8vIGBVUkwuY3JlYXRlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9jcmVhdGVPYmplY3RVUkxcbiAgaWYgKG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCkgZGVmaW5lQnVpbHRJbihVUkxDb25zdHJ1Y3RvciwgJ2NyZWF0ZU9iamVjdFVSTCcsIGJpbmQobmF0aXZlQ3JlYXRlT2JqZWN0VVJMLCBOYXRpdmVVUkwpKTtcbiAgLy8gYFVSTC5yZXZva2VPYmplY3RVUkxgIG1ldGhvZFxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML3Jldm9rZU9iamVjdFVSTFxuICBpZiAobmF0aXZlUmV2b2tlT2JqZWN0VVJMKSBkZWZpbmVCdWlsdEluKFVSTENvbnN0cnVjdG9yLCAncmV2b2tlT2JqZWN0VVJMJywgYmluZChuYXRpdmVSZXZva2VPYmplY3RVUkwsIE5hdGl2ZVVSTCkpO1xufVxuXG5zZXRUb1N0cmluZ1RhZyhVUkxDb25zdHJ1Y3RvciwgJ1VSTCcpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIFVSTDogVVJMQ29uc3RydWN0b3Jcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwuY29uc3RydWN0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcblxuLy8gYFVSTC5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC10b2pzb25cbiQoeyB0YXJnZXQ6ICdVUkwnLCBwcm90bzogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9LCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiBjYWxsKFVSTC5wcm90b3R5cGUudG9TdHJpbmcsIHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciAkVVJMU2VhcmNoUGFyYW1zID0gVVJMU2VhcmNoUGFyYW1zO1xudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9ICRVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xudmFyIGFwcGVuZCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5hcHBlbmQpO1xudmFyICRkZWxldGUgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGVbJ2RlbGV0ZSddKTtcbnZhciBmb3JFYWNoID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmZvckVhY2gpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBwYXJhbXMgPSBuZXcgJFVSTFNlYXJjaFBhcmFtcygnYT0xJmE9MiZiPTMnKTtcblxucGFyYW1zWydkZWxldGUnXSgnYScsIDEpO1xuLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG5wYXJhbXNbJ2RlbGV0ZSddKCdiJywgdW5kZWZpbmVkKTtcblxuaWYgKHBhcmFtcyArICcnICE9PSAnYT0yJykge1xuICBkZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ2RlbGV0ZScsIGZ1bmN0aW9uIChuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAobGVuZ3RoICYmICR2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJGRlbGV0ZSh0aGlzLCBuYW1lKTtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKHYsIGspIHsgLy8gYWxzbyB2YWxpZGF0ZXMgYHRoaXNgXG4gICAgICBwdXNoKGVudHJpZXMsIHsga2V5OiBrLCB2YWx1ZTogdiB9KTtcbiAgICB9KTtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChsZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSB0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgdmFsdWUgPSB0b1N0cmluZygkdmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGRpbmRleCA9IDA7XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgdmFyIGVudHJpZXNMZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllc0xlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgaWYgKGZvdW5kIHx8IGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgJGRlbGV0ZSh0aGlzLCBlbnRyeS5rZXkpO1xuICAgICAgfSBlbHNlIGRpbmRleCsrO1xuICAgIH1cbiAgICB3aGlsZSAoZGluZGV4IDwgZW50cmllc0xlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2RpbmRleCsrXTtcbiAgICAgIGlmICghKGVudHJ5LmtleSA9PT0ga2V5ICYmIGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIGFwcGVuZCh0aGlzLCBlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTtcbiAgICB9XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSwgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyICRVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXM7XG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gJFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZ2V0QWxsID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmdldEFsbCk7XG52YXIgJGhhcyA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5oYXMpO1xudmFyIHBhcmFtcyA9IG5ldyAkVVJMU2VhcmNoUGFyYW1zKCdhPTEnKTtcblxuLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTE0MjIyXG5pZiAocGFyYW1zLmhhcygnYScsIDIpIHx8ICFwYXJhbXMuaGFzKCdhJywgdW5kZWZpbmVkKSkge1xuICBkZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ2hhcycsIGZ1bmN0aW9uIGhhcyhuYW1lIC8qICwgdmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgJHZhbHVlID0gbGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAobGVuZ3RoICYmICR2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJGhhcyh0aGlzLCBuYW1lKTtcbiAgICB2YXIgdmFsdWVzID0gZ2V0QWxsKHRoaXMsIG5hbWUpOyAvLyBhbHNvIHZhbGlkYXRlcyBgdGhpc2BcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChsZW5ndGgsIDEpO1xuICAgIHZhciB2YWx1ZSA9IHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodmFsdWVzW2luZGV4KytdID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgfSByZXR1cm4gZmFsc2U7XG4gIH0sIHsgZW51bWVyYWJsZTogdHJ1ZSwgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5mb3JFYWNoKTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2l6ZWAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3VybC9wdWxsLzczNFxuaWYgKERFU0NSSVBUT1JTICYmICEoJ3NpemUnIGluIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSkpIHtcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKCkgeyBjb3VudCsrOyB9KTtcbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuIiwgImNsYXNzIENvbnN0YW50cyB7XG5cdHZlcnNpb24gPSAnNC4xLjAnO1xuXHRnZXQgaXNBcnRpY2xlKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dJc0FydGljbGUnKTtcblx0fVxuXHRnZXQgY3VycmVudFBhZ2VOYW1lKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLnJlcGxhY2UoLyAvZywgJ18nKTtcblx0fVxuXHRnZXQgYXJ0aWNsZUlkKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dBcnRpY2xlSWQnKTtcblx0fVxuXHRnZXQgcmV2aXNpb25JZCgpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnUmV2aXNpb25JZCcpO1xuXHR9XG5cdGdldCBsYXRlc3RSZXZpc2lvbklkKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dDdXJSZXZpc2lvbklkJyk7XG5cdH1cblx0Z2V0IGFydGljbGVQYXRoKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpO1xuXHR9XG5cdGdldCBzY3JpcHRQYXRoKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dTY3JpcHRQYXRoJyk7XG5cdH1cblx0Z2V0IGFjdGlvbigpIHtcblx0XHRyZXR1cm4gd2luZG93Lm13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJyk7XG5cdH1cblx0Z2V0IHNraW4oKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5tdy5jb25maWcuZ2V0KCdza2luJyk7XG5cdH1cblx0Z2V0IHVzZXJHcm91cHMoKSB7XG5cdFx0cmV0dXJuIHdpbmRvdy5tdy5jb25maWcuZ2V0KCd3Z1VzZXJHcm91cHMnKTtcblx0fVxuXHRnZXQgd2lraUlkKCkge1xuXHRcdHJldHVybiB3aW5kb3cubXcuY29uZmlnLmdldCgnd2dXaWtpSUQnKTtcblx0fVxuXHR1c2VyQWdlbnQgPSBgQ2FlbExhYi8xLjAgV2lraXBsdXMvJHt0aGlzLnZlcnNpb259ICgke3RoaXMud2lraUlkfSlgO1xufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29uc3RhbnRzKCk7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBDb25zdGFudHMgZnJvbSAnLi4vdXRpbHMvY29uc3RhbnRzJztcblxuY29uc3QgUmVxdWVzdHMgPSB7XG5cdGJhc2U6IGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0fSR7Q29uc3RhbnRzLnNjcmlwdFBhdGh9L2FwaS5waHBgLFxuXHRhc3luYyBnZXQocXVlcnkpIHtcblx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKFJlcXVlc3RzLmJhc2UpO1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHF1ZXJ5KSkge1xuXHRcdFx0dXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBxdWVyeVtrZXldKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcblx0XHRcdGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHQnQXBpLVVzZXItQWdlbnQnOiBDb25zdGFudHMudXNlckFnZW50LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0XHRyZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXHR9LFxuXHRhc3luYyBwb3N0KHBheWxvYWQpIHtcblx0XHRjb25zdCB1cmwgPSBuZXcgVVJMKFJlcXVlc3RzLmJhc2UpO1xuXHRcdGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkKSkge1xuXHRcdFx0Zm9ybS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG5cdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdGJvZHk6IGZvcm0sXG5cdFx0XHRjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0J0FwaS1Vc2VyLUFnZW50JzogQ29uc3RhbnRzLnVzZXJBZ2VudCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RzO1xuIiwgImV4cG9ydCBkZWZhdWx0IHtcblx0dW5rbm93bl9lcnJvcl9uYW1lOiBcIuacquefpeeahOmUmeivr+WQjVwiLFxuXHRhcGlfdW5hY2Nlc3NpYWJsZTogXCLml6Dlj6/nlKjnmoRBUElcIixcblx0YXBpX3Vud3JpdGVhYmxlOiBcIuaXoOWPr+eUqOeahOWGmeWFpUFQSVwiLFxuXHRmYWlsX3RvX2dldF90aW1lc3RhbXA6IFwi5peg5rOV6I635b6X6aG16Z2i57yW6L6R6LW35aeL5pe26Ze05oizXCIsXG5cdGZhaWxfdG9fZ2V0X2VkaXR0b2tlbjogXCLml6Dms5XojrflvpfpobXpnaLnvJbovpHmnYPmoIdcIixcblx0ZmFpbF90b19nZXRfcGFnZWluZm86IFwi5peg5rOV6I635b6X6aG16Z2i5L+h5oGvXCIsXG5cdG5vdF9hdXRvY29uZmlybWVkX3VzZXI6IFwi6Z2e6Ieq5Yqo56Gu6K6k55So5oi3XCIsXG5cdGhpdF9hYnVzZWZpbHRlcjogXCLooqvpmLLmu6XnlKjov4fmu6Tlmajmi6bmiKpcIixcblx0dW5rbm93bl9lZGl0X2Vycm9yOiBcIuacquefpee8lui+kemUmeivr1wiLFxuXHR1bmtub3duX2VkaXRfZXJyb3JfbWVzc2FnZTogXCLmnKrnn6XnvJbovpHplJnor68oJDEpXCIsXG5cdG5vdGl0bGU6IFwi5peg5rOV57yW6L6R56m65qCH6aKY6aG16Z2iXCIsXG5cdG5vdGV4dDogXCLnvLrlsJHpobXpnaLlhoXlrrlcIixcblx0bm90b2tlbjogXCLnqbrnvJbovpHmnYPmoIdcIixcblx0aW52YWxpZHNlY3Rpb246IFwi5q616JC957yW5Y+36Z2e5rOVXCIsXG5cdHByb3RlY3RlZHRpdGxlOiBcIuivpeagh+mimOiiq+S/neaKpO+8jOaXoOazleWIm+W7ulwiLFxuXHRjYW50Y3JlYXRlOiBcIuaXoOaWsOW7uumhtemdouadg+mZkFwiLFxuXHRjYW50Y3JlYXRlX2Fub246IFwi5Yy/5ZCN55So5oi35peg5paw5bu66aG16Z2i5p2D6ZmQXCIsXG5cdGFydGljbGVleGlzdHM6IFwi5peg5rOV5Yib5bu65bey57uP5a2Y5Zyo55qE6aG16Z2iXCIsXG5cdG5vaW1hZ2VyZWRpcmVjdF9hbm9uOiBcIuWMv+WQjeeUqOaIt+aXoOaWsOW7uuaWh+S7tumHjeWumuWQkeadg+mZkFwiLFxuXHRub2ltYWdlcmVkaXJlY3Q6IFwi5peg5paw5bu65paH5Lu26YeN5a6a5ZCR5p2D6ZmQXCIsXG5cdHNwYW1kZXRlY3RlZDogXCLmlofmnKzlkKvmnInmlY/mhJ/lhoXlrrnvvIzooqtTUEFN6L+H5ruk5Zmo5oum5oiqXCIsXG5cdGZpbHRlcmVkOiBcIue8lui+keiiq+i/h+a7pOWZqOaLpuaIqlwiLFxuXHRjb250ZW50dG9vYmlnOiBcIuaWh+acrOi2hei/h+acgOWkp+mVv+W6pumZkOWItlwiLFxuXHRub2VkaXRfYW5vbjogXCLljL/lkI3nlKjmiLfml6DnvJbovpHpobXpnaLmnYPpmZBcIixcblx0bm9lZGl0OiBcIuaXoOe8lui+kemhtemdouadg+mZkFwiLFxuXHRwYWdlZGVsZXRlZDogXCLnvJbovpHml7bvvIzmraTpobXpnaLooqvliKDpmaRcIixcblx0ZW1wdHlwYWdlOiBcIuaXoOazleaWsOW7uuepuuWGheWuuemhtemdolwiLFxuXHRlbXB0eW5ld3NlY3Rpb246IFwi5peg5rOV5paw5bu656m65YaF5a655q616JC9XCIsXG5cdGVkaXRjb25mbGljdDogXCLnvJbovpHlhrLnqoHvvIzor7fmiYvlt6Xmo4Dmn6XpobXpnaLlvZPliY3lhoXlrrnkuI7mj5DkuqTlhoXlrrnlt67lvILlubbkv67mraPlkI7vvIzliLfmlrDpobXpnaLmj5DkuqRcIixcblx0cmV2d3JvbmdwYWdlOiBcIue8lui+keeahOS/ruiuoueJiOacrOS4jue8lui+keeahOmhtemdouS4jeWMuemFjVwiLFxuXHR1bmRvZmFpbHVyZTogXCLnlLHkuo7lrZjlnKjlhrLnqoHnmoTkuK3pl7TniYjmnKzvvIzml6Dms5XmkqTplIDnvJbovpFcIixcblx0bWlzc2luZ3RpdGxlOiBcIuaXoOazleWIm+W7uuaIlue8lui+keepuuagh+mimOmhtemdolwiLFxuXHRtdXN0YmVwb3N0ZWQ6IFwi5b+F6aG75L2/55SoUE9TVOaWueW8j+aPkOS6pOe8lui+kVwiLFxuXHRyZWFkYXBpZGVuaWVkOiBcIuaXoOivu+WPlkFQSeS9v+eUqOadg+mZkFwiLFxuXHR3cml0ZWFwaWRlbmllZDogXCLml6DpgJrov4dBUEnnvJbovpHpobXpnaLmnYPpmZBcIixcblx0bm9hcGl3cml0ZTogXCLmnKxXaWtp5pyq5byA5ZCv5Y+v55So55qE5YaZ5YWlQVBJXCIsXG5cdGJhZHRva2VuOiBcIumdnuazleeahOe8lui+keadg+agh1wiLFxuXHRtaXNzaW5ncGFyYW06IFwi57y65bCR5b+F6KaB5Y+C5pWw77yM6aG16Z2i5ZCN5ZKM6aG16Z2iSUTkuI3og73lnYfkuLrnqbpcIixcblx0aW52YWxpZHBhcmFtbWl4OiBcIuWPguaVsOmHjeWkje+8jOmhtemdouWQjeWSjOmhtemdoklE5LiN6IO95ZCM5pe257uZ5a6aXCIsXG5cdGludmFsaWR0aXRsZTogXCLpnZ7ms5XnmoTmoIfpophcIixcblx0bm9zdWNocGFnZWlkOiBcIuS4jeWtmOWcqOeahOmhtemdoklEXCIsXG5cdHBhZ2VjYW5ub3RleGlzdDogXCLor6XlkI3np7Dnqbrpl7TkuI3lhYHorrjmlrDlu7rkuIDoiKzpobXpnaJcIixcblx0bm9zdWNocmV2aWQ6IFwi5LiN5a2Y5Zyo55qE5L+u6K6i54mI5pysXCIsXG5cdGJhZG1kNTogXCLpnZ7ms5XnmoRNRDXlgLxcIixcblx0aG9va2Fib3J0ZWQ6IFwi57yW6L6R6KKr5omp5bGVSG9va+aLpuaIqlwiLFxuXHRwYXJzZWVycm9yOiBcIuaXoOazleino+aekOmhtemdouaWh+acrFwiLFxuXHRzdW1tYXJ5cmVxdWlyZWQ6IFwi57yW6L6R5pGY6KaB5LiN6IO95Li656m6XCIsXG5cdGJsb2NrZWQ6IFwi5bey6KKr5bCB56aBXCIsXG5cdHJhdGVsaW1pdGVkOiBcIui+vuWIsOaTjeS9nOmAn+eOh+S4iumZkO+8jOivt+eojeWQjumHjeivlVwiLFxuXHR1bmtub3duZXJyb3I6IFwi5pyq55+l6ZSZ6K+vXCIsXG5cdG5vc3VjaHNlY3Rpb246IFwi5peg5rOV57yW6L6R5LiN5a2Y5Zyo55qE5q616JC9XCIsXG5cdHNlY3Rpb25zbm90c3VwcG9ydGVkOiBcIuivpemhtemdouS4jeaUr+aMgeauteiQvee8lui+kVwiLFxuXHRlZGl0bm90c3VwcG9ydGVkOiBcIuivpemhtemdouS4jeaUr+aMgemAmui/h0FQSee8lui+kVwiLFxuXHRhcHBlbmRub3RzdXBwb3J0ZWQ6IFwi6K+l6aG16Z2i5peg5rOV5Zyo5YmN5ZCO5o+S5YWl5paH5pysXCIsXG5cdHJlZGlyZWN0X2FwcGVuZG9ubHk6IFwi5Zyo6YG15b6q6YeN5a6a5ZCR55qE5oOF5Ya15LiL77yM5Y+q6IO96L+b6KGM5YmN5ZCO5o+S5YWl5oiW5Yib5bu65paw5q616JC9XCIsXG5cdGJhZGZvcm1hdDogXCLmlofmnKzmoLzlvI/plJnor69cIixcblx0Y3VzdG9tY3NzcHJvdGVjdGVkOiBcIuaXoOazlee8lui+keeUqOaIt0NTU+mhtVwiLFxuXHRjdXN0b21qc3Byb3RlY3RlZDogXCLml6Dms5XnvJbovpHnlKjmiLdKU+mhtVwiLFxuXHRjYXNjYWRlcHJvdGVjdGVkOiBcIuivpemhtemdouiiq+e6p+iBlOS/neaKpFwiLFxuXHRuZXR3b3JrX2VkaXRfZXJyb3I6IFwi55Sx5LqO572R57uc5Y6f5Zug57yW6L6R5aSx6LSlXCIsXG5cdHJlZGlyZWN0X3RvX3N1bW1hcnk6IFwi6YeN5a6a5ZCR6aG16Z2i6IezW1skMV1dIC8vIFdpa2lwbHVzXCIsXG5cdHJlZGlyZWN0X2Zyb21fc3VtbWFyeTogXCLlsIZbWyQxXV3ph43lrprlkJHoh7NbWyQyXV0gLy8gV2lraXBsdXNcIixcblx0bmVlZF9pbml0OiBcIumhtemdouexu+acquWKoOi9veWujOaIkFwiLFxuXHRmYWlsX3RvX2dldF93aWtpdGV4dDogXCLml6Dms5XojrflvpfpobXpnaLmlofmnKxcIixcblx0cXVpY2tlZGl0X3RvcGJ0bjogXCLlv6vpgJ/nvJbovpFcIixcblx0cXVpY2tlZGl0X3NlY3Rpb25idG46IFwi5b+r6YCf57yW6L6RXCIsXG5cdGZhaWxfdG9faW5pdF9xdWlja2VkaXQ6IFwi5peg5rOV5Yqg6L295b+r6YCf57yW6L6RXCIsXG5cdGJhY2s6IFwi6L+U5ZueXCIsXG5cdGdvdG9fZWRpdGJveDogXCLliLDnvJbovpHmoYZcIixcblx0c3VtbWFyeV9wbGFjZWhvbGQ6IFwi6K+36L6T5YWl57yW6L6R5pGY6KaBXCIsXG5cdHN1Ym1pdDogXCLmj5DkuqRcIixcblx0cHVibGlzaF9wYWdlOiBcIuWPkeW4g+mhtemdolwiLFxuXHRwdWJsaXNoX2NoYW5nZTogXCLlj5HluIPmm7TmlLlcIixcblx0cHJldmlldzogXCLpooTop4hcIixcblx0Y2FuY2VsOiBcIuWPlua2iFwiLFxuXHRtYXJrX21pbm9yZWRpdDogXCLmoIforrDkuLrlsI/nvJbovpFcIixcblx0b25jbG9zZV9jb25maXJtOiBcIltXaWtpcGx1c10g5oKo56Gu6K6k6KaB5YWz6ZetL+WIt+aWsOmhtemdouWQl++8n+i/meS8muWvvOiHtOaCqOeahOe8lui+keaVsOaNruS4ouWksVwiLFxuXHRmYWlsX3RvX2dldF93aWtpdGV4dF93aGVuX2VkaXQ6IFwi5peg5rOV6I635b6X6aG16Z2i5paH5pys5Lul57yW6L6RXCIsXG5cdGNhbnRfcGFyc2Vfd2lraXRleHQ6IFwi5peg5rOV6Kej5p6Q57u05Z+65paH5pysXCIsXG5cdGxvYWRpbmdfcHJldmlldzogXCLmraPlnKjor7vlj5bpooTop4hcIixcblx0c3VibWl0dGluZ19lZGl0OiBcIuato+WcqOaPkOS6pOe8lui+kVwiLFxuXHRlZGl0X3N1Y2Nlc3M6IFwi57yW6L6R5oiQ5YqfIOeUqOaXtiQxbXNcIixcblx0ZW1wdHlfcGFnZV9jb25maXJtOiBcIuaCqOWQkee8lui+keWHveaVsOS8oOWFpeS6huepuuWGheWuueWPguaVsCDov5nlsIbmuIXnqbrpobXpnaJcXHJcXG7nlLHkuo7or6XooYzkuLrljbHpmakg6K+35bCGY29uZmln5Y+C5pWw55qEZW1wdHnplK7lgLzorr7lrprkuLp0cnVl5p2l56Gu6K6kXCIsXG5cdGNyb3NzX3BhZ2VfZWRpdDogXCLnvJbovpHnm67moIfkvY3kuo7lhbbku5bpobXpnaIg5q2j5Zyo6I635Y+W5Z+656GA5L+h5oGvXCIsXG5cdGNyb3NzX3BhZ2VfZWRpdF9zdWJtaXQ6IFwi5Z+656GA5L+h5oGv6I635Y+W5oiQ5YqfIOato+WcqOaPkOS6pOe8lui+kVwiLFxuXHRjcm9zc19wYWdlX2VkaXRfZXJyb3I6IFwi5peg5rOV6I635b6X5Z+656GA5L+h5oGvPi48XCIsXG5cdGluc3RhbGxfdGlwOiBcIuaCqOaYr+WQpuWFgeiuuFdpa2lwbHVz6YeH6ZuG6Z2e5pWP5oSf5pWw5o2u55So5LqO5pS56L+bV2lraXBsdXPlj4rkuLrlvZPliY1XaWtp77yaJDHmj5DkvpvmlLnov5vlu7rorq7vvJ9cIixcblx0YWNjZXB0OiBcIuaOpeWPl1wiLFxuXHRkZWNsaW5lOiBcIuaLkue7nVwiLFxuXHRpbnN0YWxsX2ZpbmlzaDogXCJXaWtpcGx1c+WuieijheWujOavlVwiLFxuXHRsb2FkaW5nOiBcIuato+WcqOi9veWFpVwiLFxuXHRjYW50X2FkZF9mdW5jYnRuOiBcIuaXoOazleWinuWKoOWKn+iDveaMiemSrlwiLFxuXHR3aWtpcGx1c19zZXR0aW5nczogXCJXaWtpcGx1c+iuvue9rlwiLFxuXHR3aWtpcGx1c19zZXR0aW5nc19kZXNjOiBcIuivt+WcqOS4i+aWueaMieinhOiMg+S/ruaUuVdpa2lwbHVz6K6+572uXCIsXG5cdHdpa2lwbHVzX3NldHRpbmdzX3BsYWNlaG9sZGVyOiBcIuW9k+WJjeiuvue9ruS4uuepuiDor7flnKjmraTlpITmjInop4TojIPkv67mlLlXaWtpcGx1c+iuvue9rlwiLFxuXHR3aWtpcGx1c19zZXR0aW5nc19ncmFtbWFyX2Vycm9yOiBcIuiuvue9ruWtmOWcqOivreazlemUmeivryDor7fmo4Dmn6XlkI7ph43or5VcIixcblx0d2lraXBsdXNfc2V0dGluZ3Nfc2F2ZWQ6IFwi6K6+572u5bey5L+d5a2YXCIsXG5cdHJlZGlyZWN0X2Zyb206IFwi5bCG6aG16Z2i6YeN5a6a5ZCR6Iez5q2kXCIsXG5cdHJlZGlyZWN0X2Rlc2M6IFwi6K+36L6T5YWl6KaB6YeN5a6a5ZCR6Iez5q2k55qE6aG16Z2i5ZCNXCIsXG5cdHJlZGlyZWN0X3N1bW1hcnlfZGVzYzogXCLlnKjkuIvmlrnovpPlhaXnvJbovpHmkZjopoHvvIjlj6/pgInvvIlcIixcblx0ZW1wdHlfaW5wdXQ6IFwi6L6T5YWl5LiN6IO95Li656m6XCIsXG5cdHJlZGlyZWN0X3NhdmVkOiBcIumHjeWumuWQkeWujOaIkFwiLFxuXHR1bmluaXRlZDogXCJXaWtpcGx1c+acquWKoOi9veWujOavlSDor7fliLfmlrDph43or5VcIixcblx0Y2FudF9wYXJzZV9pMThuY2FjaGU6IFwi5peg5rOV6Kej5p6Q5aSa6K+t6KiA5a6a5LmJ5paH5Lu257yT5a2YXCIsXG5cdGNhbnRfbG9hZF9sYW5ndWFnZTogXCLml6Dms5Xojrflj5blpJror63oqIDlrprkuYnmlofku7ZcIixcblx0aGlzdG9yeV9lZGl0X3dhcm5pbmc6IFwiIC8vIOato+ivleWbvue8lui+keWOhuWPsueJiOacrCDov5nlsIbkvJrlupTnlKjliLDmnKzpobXpnaLnmoTmnIDmlrDniYjmnKwg6K+35oWO6YeN5o+Q5LqkXCIsXG5cdGNyZWF0ZV9wYWdlX3RpcDogXCI8IS0tIOato+WcqOWIm+W7uuaWsOmhtemdoiDor7fliKDljrvmraTooYzms6jph4rlkI7nu6fnu60gLS0+XCIsXG5cdGNvbnRpbnVlOiBcIuS7jeeEtue7p+e7rVwiLFxuXHRkZWZhdWx0X3N1bW1hcnlfc3VmZml4OiBcIi8vIEVkaXQgdmlhIFdpa2lwbHVzXCIsXG59XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB6aENOIGZyb20gJy4vaTE4bi16aC1jbi5qcyc7XG5cbmNsYXNzIEkxOG4ge1xuXHRsYW5ndWFnZTtcblx0aTE4bkRhdGEgPSB7J3poLWNuJzogemhDTn07XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGxldCBsYW5ndWFnZTtcblx0XHR0cnkge1xuXHRcdFx0bGFuZ3VhZ2UgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVsnV2lraXBsdXNfU2V0dGluZ3MnXSlbJ2xhbmd1YWdlJ10gfHwgbmF2aWdhdG9yLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRsYW5ndWFnZSA9IChuYXZpZ2F0b3IubGFuZ3VhZ2UgfHwgbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSlcblx0XHRcdFx0LnJlcGxhY2UoL2hhbltzdF0tPy9pLCAnJykgLy8gZm9yIGxhbmd1YWdlcyBsaWtlIHpoLUhhbnMtQ05cblx0XHRcdFx0LnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXHRcdHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcblx0XHQvLyBNZXJnZSB3aXRoIGxvY2FsU3RvcmFnZSBpMThuIGNhY2hlXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGkxOG5DYWNoZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1dpa2lwbHVzX2kxOG5DYWNoZScpKTtcblx0XHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGkxOG5DYWNoZSkpIHtcblx0XHRcdFx0dGhpcy5pMThuRGF0YVtrZXldID0gaTE4bkNhY2hlW2tleV07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvLyBGYWlsIHRvIHBhcnNlIGkxOG4gY2FjaGUsIHJlc2V0XG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnV2lraXBsdXNfaTE4bkNhY2hlJywgJ3t9Jyk7XG5cdFx0fVxuXHR9XG5cdHRyYW5zbGF0ZShrZXksIHBsYWNlaG9sZGVycyA9IFtdKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGNvbnN0IGxhbmd1YWdlID0gdGhpcy5sYW5ndWFnZSBpbiB0aGlzLmkxOG5EYXRhID8gdGhpcy5sYW5ndWFnZSA6ICd6aC1jbic7XG5cdFx0aWYgKGtleSBpbiB0aGlzLmkxOG5EYXRhW2xhbmd1YWdlXSkge1xuXHRcdFx0cmVzdWx0ID0gdGhpcy5pMThuRGF0YVtsYW5ndWFnZV1ba2V5XTtcblx0XHR9IGVsc2UgaWYgKGtleSBpbiB0aGlzLmkxOG5EYXRhWyd6aC1jbiddKSB7XG5cdFx0XHQvLyBGYWxsYmFjayB0byB0aGUgYnVpbHQtaW4gU2ltcGxpZmllZCBDaGluZXNlXG5cdFx0XHRyZXN1bHQgPSB0aGlzLmkxOG5EYXRhWyd6aC1jbiddW2tleV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdCA9IGtleTtcblx0XHR9XG5cblx0XHRpZiAocGxhY2Vob2xkZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBwbGFjZWhvbGRlcl0gb2YgcGxhY2Vob2xkZXJzLmVudHJpZXMoKSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZShgJCR7aW5kZXggKyAxfWAsIHBsYWNlaG9sZGVyKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgSTE4bigpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nO1xuXG5jbGFzcyBXaWtpcGx1c0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCBjb2RlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5jb2RlID0gY29kZTtcblx0fVxufVxuXG5jb25zdCBMb2cgPSB7XG5cdGRlYnVnKG1lc3NhZ2UgPSAnJykge1xuXHRcdGNvbnNvbGUuZGVidWcoYFtXaWtpcGx1cy1ERUJVR10gJHttZXNzYWdlfWApO1xuXHR9LFxuXHRpbmZvKG1lc3NhZ2UgPSAnJykge1xuXHRcdGNvbnNvbGUuaW5mbyhgW1dpa2lwbHVzLUlORk9dICR7bWVzc2FnZX1gKTtcblx0fSxcblx0ZXJyb3IoZXJyb3JDb2RlLCBwYXlsb2FkcyA9IFtdKSB7XG5cdFx0bGV0IHRlbXBsYXRlID0gaTE4bi50cmFuc2xhdGUoZXJyb3JDb2RlKTtcblx0XHRpZiAocGF5bG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gRmlsbFxuXHRcdFx0Zm9yIChjb25zdCBbaSwgdl0gb2YgcGF5bG9hZHMuZW50cmllcygpKSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJHtpICsgMX1gLCAnaWcnKSwgdik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnNvbGUuZXJyb3IoYFtXaWtpcGx1cy1FUlJPUl0gJHt0ZW1wbGF0ZX1gKTtcblx0XHR0aHJvdyBuZXcgV2lraXBsdXNFcnJvcihgJHt0ZW1wbGF0ZX1gLCBlcnJvckNvZGUpO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgcmVxdWVzdHMgZnJvbSAnLi4vdXRpbHMvcmVxdWVzdHMnO1xuaW1wb3J0IExvZyBmcm9tICcuLi91dGlscy9sb2cnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5cbmNsYXNzIFdpa2kge1xuXHRwYWdlSW5mb0NhY2hlID0ge307XG5cdC8qKlxuXHQgKiDojrflvpcgRWRpdCBUb2tlblxuXHQgKiBHZXQgRWRpdCBUb2tlblxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuXHQgKi9cblx0YXN5bmMgZ2V0RWRpdFRva2VuKCkge1xuXHRcdC8vIOWwneivleS7jiBBUEkg6I635b6XIEVkaXRUb2tlblxuXHRcdC8vIFRyeSB0byBnZXQgRWRpdFRva2VuIGZyb20gQVBJXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQoe1xuXHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0bWV0YTogJ3Rva2VucycsXG5cdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHR9KTtcblx0XHRpZiAoXG5cdFx0XHRyZXNwb25zZS5xdWVyeSAmJlxuXHRcdFx0cmVzcG9uc2UucXVlcnkudG9rZW5zICYmXG5cdFx0XHRyZXNwb25zZS5xdWVyeS50b2tlbnMuY3NyZnRva2VuICYmXG5cdFx0XHRyZXNwb25zZS5xdWVyeS50b2tlbnMuY3NyZnRva2VuICE9PSAnK1xcXFwnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UucXVlcnkudG9rZW5zLmNzcmZ0b2tlbjtcblx0XHR9XG5cdFx0cmV0dXJuIExvZy5lcnJvcignZmFpbF90b19nZXRfZWRpdHRva2VuJyk7XG5cdH1cblx0LyoqXG5cdCAqIOiOt+W+l+mhtemdouS4iuS4gOeJiOacrOaXtumXtOaIs1xuXHQgKiBHZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZXZpc2lvbiBvZiBwYWdlIHNwZWNpZmllZC5cblx0ICpcblx0ICogQHBhcmFtIHtwYXJhbXMuc3RyaW5nfSB0aXRsZSDpobXpnaLlkI0gLyBQYWdlbmFtZVxuXHQgKiBAcGFyYW0ge3BhcmFtcy5yZXZpc2lvbklkfSByZXZpc2lvbklkIOS/ruiuoueJiOacrOWPtyAvIFJldmlzaW9uIElEXG5cdCAqIEBwYXJhbSB7cGFyYW1zLmNvbnRlbnRtb2RlbH0gY29udGVudG1vZGVsIOWGheWuueaooeWeiyAvIENvbnRlbnQgTW9kZWxcblx0ICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cblx0ICovXG5cdGFzeW5jIGdldFBhZ2VJbmZvKHt0aXRsZSwgcmV2aXNpb25JZH0pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0XHRcdHByb3A6ICdyZXZpc2lvbnN8aW5mbycsXG5cdFx0XHRcdHJ2cHJvcDogJ3RpbWVzdGFtcHxpZHMnLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdH07XG5cdFx0XHRpZiAocmV2aXNpb25JZCkge1xuXHRcdFx0XHRwYXJhbXMucmV2aWRzID0gcmV2aXNpb25JZDtcblx0XHRcdH0gZWxzZSBpZiAodGl0bGUpIHtcblx0XHRcdFx0aWYgKHRoaXMucGFnZUluZm9DYWNoZVt0aXRsZV0pIHtcblx0XHRcdFx0XHQvLyBIaXQgY2FjaGVcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiB0aGlzLnBhZ2VJbmZvQ2FjaGVbdGl0bGVdLnRpbWVzdGFtcCxcblx0XHRcdFx0XHRcdHJldmlzaW9uSWQ6IHRoaXMucGFnZUluZm9DYWNoZVt0aXRsZV0ucmV2aWQsXG5cdFx0XHRcdFx0XHRjb250ZW50bW9kZWw6IHRoaXMucGFnZUluZm9DYWNoZVt0aXRsZV0uY29udGVudG1vZGVsLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFyYW1zLnRpdGxlcyA9IHRpdGxlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5nZXQocGFyYW1zKTtcblx0XHRcdGlmIChyZXNwb25zZS5xdWVyeSAmJiByZXNwb25zZS5xdWVyeS5wYWdlcykge1xuXHRcdFx0XHRjb25zdCBwYWdlS2V5ID0gT2JqZWN0LmtleXMocmVzcG9uc2UucXVlcnkucGFnZXMpWzBdO1xuXHRcdFx0XHRjb25zdCBjb250ZW50bW9kZWwgPSByZXNwb25zZS5xdWVyeS5wYWdlc1twYWdlS2V5XS5jb250ZW50bW9kZWw7XG5cdFx0XHRcdGlmIChwYWdlS2V5ID09PSAnLTEnKSB7XG5cdFx0XHRcdFx0Ly8g5LiN5a2Y5Zyo6L+Z5LiA6aG16Z2iXG5cdFx0XHRcdFx0Ly8gUGFnZSBub3QgZm91bmQuXG5cdFx0XHRcdFx0dGhpcy5wYWdlSW5mb0NhY2hlW3RpdGxlXSA9IHtjb250ZW50bW9kZWx9O1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRjb250ZW50bW9kZWw6IGNvbnRlbnRtb2RlbCxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHBhZ2VJbmZvID0gcmVzcG9uc2UucXVlcnkucGFnZXNbcGFnZUtleV0ucmV2aXNpb25zWzBdO1xuXHRcdFx0XHRpZiAodGl0bGUpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2VJbmZvQ2FjaGVbdGl0bGVdID0gey4uLnBhZ2VJbmZvLCBjb250ZW50bW9kZWx9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGltZXN0YW1wOiBwYWdlSW5mby50aW1lc3RhbXAsXG5cdFx0XHRcdFx0cmV2aXNpb25JZDogcGFnZUluZm8ucmV2aWQsXG5cdFx0XHRcdFx0Y29udGVudG1vZGVsOiBjb250ZW50bW9kZWwsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9fZ2V0X2VkaXR0b2tlbicpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICog6I635b6X6aG16Z2i55qEIFdpa2l0ZXh0XG5cdCAqIEdldCB3aWtpdGV4dCBvZiB0aGUgcGFnZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIHRpdGxlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yZXZpc2lvbklkIOeJiOacrOWPt1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnNlY3Rpb24g5q616JC95Y+3XG5cdCAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gd2lraXRleHTlhoXlrrlcblx0ICovXG5cdGFzeW5jIGdldFdpa2lUZXh0KHtzZWN0aW9uLCByZXZpc2lvbklkfSkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHRcdHJ2cHJvcDogJ2NvbnRlbnQnLFxuXHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0cmV2aWRzOiByZXZpc2lvbklkLFxuXHRcdFx0fTtcblx0XHRcdGlmIChyZXZpc2lvbklkKSB7XG5cdFx0XHRcdHBhcmFtcy5yZXZpZHMgPSByZXZpc2lvbklkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNlY3Rpb24pIHtcblx0XHRcdFx0cGFyYW1zLnJ2c2VjdGlvbiA9IHNlY3Rpb247XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RzLmdldChwYXJhbXMpO1xuXHRcdFx0aWYgKHJlc3BvbnNlLnF1ZXJ5ICYmIHJlc3BvbnNlLnF1ZXJ5LnBhZ2VzKSB7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhyZXNwb25zZS5xdWVyeS5wYWdlcylbMF0gPT09ICctMScpIHtcblx0XHRcdFx0XHQvLyDkuI3lrZjlnKjov5nkuIDpobXpnaJcblx0XHRcdFx0XHQvLyBQYWdlIG5vdCBmb3VuZC5cblx0XHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcGFnZUluZm8gPSByZXNwb25zZS5xdWVyeS5wYWdlc1tPYmplY3Qua2V5cyhyZXNwb25zZS5xdWVyeS5wYWdlcylbMF1dLnJldmlzaW9uc1swXTtcblx0XHRcdFx0cmV0dXJuIHBhZ2VJbmZvWycqJ107XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9fZ2V0X3dpa2l0ZXh0Jyk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiDop6PmnpAgV2lraXRleHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHdpa2l0ZXh0IHdpa2l0ZXh0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSDpobXpnaLmoIfpophcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyDorr7nva5cblx0ICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSDop6PmnpDnu5PmnpwgSFRNTFxuXHQgKi9cblx0YXN5bmMgcGFyc2VXaWtpVGV4dCh3aWtpdGV4dCwgdGl0bGUgPSAnJywgY29uZmlnID0ge30pIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0cy5wb3N0KHtcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdGFjdGlvbjogJ3BhcnNlJyxcblx0XHRcdFx0dGV4dDogd2lraXRleHQsXG5cdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRwc3Q6ICd0cnVlJyxcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHJlc3BvbnNlLnBhcnNlICYmIHJlc3BvbnNlLnBhcnNlLnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLnBhcnNlLnRleHRbJyonXTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcignY2FudF9wYXJzZV93aWtpdGV4dCcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiDnvJbovpHpobXpnaJcblx0ICpcblx0ICogQHBhcmFtIHJvb3QwXG5cdCAqIEBwYXJhbSByb290MC50aXRsZVxuXHQgKiBAcGFyYW0gcm9vdDAuY29udGVudFxuXHQgKiBAcGFyYW0gcm9vdDAuZWRpdFRva2VuXG5cdCAqIEBwYXJhbSByb290MC50aW1lc3RhbXBcblx0ICogQHBhcmFtIHJvb3QwLmNvbmZpZ1xuXHQgKiBAcGFyYW0gcm9vdDAuYWRkaXRpb25hbENvbmZpZ1xuXHQgKi9cblx0YXN5bmMgZWRpdCh7dGl0bGUsIGNvbnRlbnQsIGVkaXRUb2tlbiwgdGltZXN0YW1wLCBjb25maWcgPSB7fSwgYWRkaXRpb25hbENvbmZpZyA9IHt9fSA9IHt9KSB7XG5cdFx0bGV0IHJlc3BvbnNlO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RzLnBvc3Qoe1xuXHRcdFx0XHRhY3Rpb246ICdlZGl0Jyxcblx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdHRleHQ6IGNvbnRlbnQsXG5cdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHR0b2tlbjogZWRpdFRva2VuLFxuXHRcdFx0XHQuLi4odGltZXN0YW1wID8ge2Jhc2V0aW1lc3RhbXA6IHRpbWVzdGFtcH0gOiB7fSksXG5cdFx0XHRcdC4uLmNvbmZpZyxcblx0XHRcdFx0Li4uYWRkaXRpb25hbENvbmZpZyxcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKCduZXR3b3JrX2VkaXRfZXJyb3InKTtcblx0XHR9XG5cdFx0aWYgKHJlc3BvbnNlLmVkaXQpIHtcblx0XHRcdGlmIChyZXNwb25zZS5lZGl0LnJlc3VsdCA9PT0gJ1N1Y2Nlc3MnKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlc3BvbnNlLmVkaXQuY29kZSkge1xuXHRcdFx0XHQvLyBBYnVzZSBGaWx0ZXJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBcbiAgICAgICAgICAgICAgICAgICAgICAgICR7aTE4bi50cmFuc2xhdGUoJ2hpdF9hYnVzZWZpbHRlcicpfToke3Jlc3BvbnNlLmVkaXQuaW5mby5yZXBsYWNlKCcvSGl0IEFidXNlRmlsdGVyOiAvaWcnLCAnJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiBzbWFsbGVyO1wiPiR7cmVzcG9uc2UuZWRpdC53YXJuaW5nfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5lcnJvcigndW5rbm93bl9lZGl0X2Vycm9yJyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChyZXNwb25zZS5lcnJvciAmJiByZXNwb25zZS5lcnJvci5jb2RlKSB7XG5cdFx0XHRMb2cuZXJyb3IocmVzcG9uc2UuZXJyb3IuY29kZSk7XG5cdFx0fSBlbHNlIGlmIChyZXNwb25zZS5jb2RlKSB7XG5cdFx0XHRMb2cuZXJyb3IocmVzcG9uc2UuY29kZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcigndW5rbm93bl9lZGl0X2Vycm9yJyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIOiOt+W+l+aMh+WumumhtemdouacgOaWsOS/ruiuoue8luWPt1xuXHQgKiBHZXQgbGF0ZXN0IHJldmlzaW9uSWQgb2YgYSBwYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHRpdGxlXG5cdCAqL1xuXHRhc3luYyBnZXRMYXRlc3RSZXZpc2lvbklkRm9yUGFnZSh0aXRsZSkge1xuXHRcdGNvbnN0IHtyZXZpc2lvbklkfSA9IGF3YWl0IHRoaXMuZ2V0UGFnZUluZm8oe3RpdGxlfSk7XG5cdFx0cmV0dXJuIHJldmlzaW9uSWQ7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdpa2koKTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuaW1wb3J0IFdpa2kgZnJvbSAnLi4vc2VydmljZXMvd2lraSc7XG5pbXBvcnQgTG9nIGZyb20gJy4uL3V0aWxzL2xvZyc7XG5cbmNsYXNzIFBhZ2Uge1xuXHR0aW1lc3RhbXA7XG5cdGVkaXRUb2tlbjtcblx0dGl0bGU7XG5cdHJldmlzaW9uSWQ7XG5cblx0aW5pdGVkID0gZmFsc2U7XG5cdGlzTmV3UGFnZSA9IGZhbHNlO1xuXG5cdGNvbnRlbnRtb2RlbCA9ICd3aWtpdGV4dCc7XG5cblx0c2VjdGlvbkNhY2hlID0ge307XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7cGFyYW1zLnRpdGxlfSDpobXpnaLmoIfpopggUGFnZSBOYW1lIChvcHRpb25hbClcblx0ICogQHBhcmFtIHtwYXJhbXMucmV2aXNpb25JZH0g6aG16Z2i5L+u6K6i57yW5Y+3IFJldmlzaW9uIElkXG5cdCAqIEBwYXJhbSB7cGFyYW1zLmNvbnRlbnRtb2RlbH0g6aG16Z2i5YaF5a655qih5Z6LIENvbnRlbnQgTW9kZWxcblx0ICovXG5cdGNvbnN0cnVjdG9yKHt0aXRsZSwgcmV2aXNpb25JZH0pIHtcblx0XHR0aGlzLnRpdGxlID0gdGl0bGU7XG5cdFx0dGhpcy5yZXZpc2lvbklkID0gcmV2aXNpb25JZDtcblx0XHR0aGlzLmlzTmV3UGFnZSA9ICFyZXZpc2lvbklkO1xuXHR9XG5cblx0LyoqXG5cdCAqIOWIneWni+WMliDojrflvpfpobXpnaJFZGl0VG9rZW7lkozliJ3lp4tUaW1lU3RhbXBcblx0ICogSW5pdGlhbGl6YXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBlZGl0VG9rZW4gKG9wdGlvbmFsKSDlpoLmnpzmj5DkvpvkuoZlZGl0VG9rZW7vvIzlsIbkuI3kvJrlho3ojrflj5Zcblx0ICovXG5cdGFzeW5jIGluaXQoe2VkaXRUb2tlbiA9ICcnfSA9IHt9KSB7XG5cdFx0Y29uc3QgcHJvbWlzZUFyciA9IFt0aGlzLmdldFRpbWVzdGFtcCgpLCB0aGlzLmdldENvbnRlbnRNb2RlbCgpXTtcblx0XHRpZiAoIWVkaXRUb2tlbikge1xuXHRcdFx0cHJvbWlzZUFyci5wdXNoKHRoaXMuZ2V0RWRpdFRva2VuKCkpO1xuXHRcdH1cblx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyKTtcblx0XHR0aGlzLmluaXRlZCA9IHRydWU7XG5cdFx0TG9nLmluZm8oYFBhZ2UgaW5pdGlhbGl6YXRpb24gZm9yICR7dGhpcy50aXRsZX0jJHt0aGlzLnJldmlzaW9uSWR9IGZpbmlzaGVkLmApO1xuXHR9XG5cblx0LyoqXG5cdCAqIOiOt+W+lyBFZGl0VG9rZW5cblx0ICogR2V0IEVkaXRUb2tlblxuXHQgKi9cblx0YXN5bmMgZ2V0RWRpdFRva2VuKCkge1xuXHRcdGF3YWl0IG13LmxvYWRlci51c2luZygnbWVkaWF3aWtpLnVzZXInKTtcblx0XHRpZiAobXcudXNlci50b2tlbnMuZ2V0KCdjc3JmVG9rZW4nKSAmJiBtdy51c2VyLnRva2Vucy5nZXQoJ2NzcmZUb2tlbicpICE9PSAnK1xcXFwnKSB7XG5cdFx0XHQvLyDlpoLmnpwgTWVkaWFXaWtpIEphdmFTY3JpcHQgQVBJIOWPr+S7peebtOaOpeiOt+W+lyBFZGl0VG9rZW4g5YiZ55u05o6l6L+U5ZueXG5cdFx0XHQvLyBSZXR1cm4gRWRpdFRva2VuIHJldHJpZXZlZCBmcm9tIE1lZGlhV2lraSBKYXZhU2NyaXB0IEFQSSBpZiBhY2Nlc3NpYmxlXG5cdFx0XHR0aGlzLmVkaXRUb2tlbiA9IG13LnVzZXIudG9rZW5zLmdldCgnY3NyZlRva2VuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIOS7jkFQSeiOt+W+l0VkaXRUb2tlblxuXHRcdC8vIEdldCBFZGl0VG9rZW4gZnJvbSBNZWRpYVdpa2kgQVBJXG5cdFx0dGhpcy5lZGl0VG9rZW4gPSBhd2FpdCBXaWtpLmdldEVkaXRUb2tlbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIOiOt+W+l+e8lui+keWfuuWHhuaXtumXtOaIs1xuXHQgKiBHZXQgQmFzZSBUaW1lc3RhbXBcblx0ICovXG5cdGFzeW5jIGdldFRpbWVzdGFtcCgpIHtcblx0XHRjb25zdCB7dGltZXN0YW1wLCByZXZpc2lvbklkfSA9IGF3YWl0IFdpa2kuZ2V0UGFnZUluZm8oe1xuXHRcdFx0cmV2aXNpb25JZDogdGhpcy5yZXZpc2lvbklkLFxuXHRcdFx0dGl0bGU6IHRoaXMudGl0bGUsXG5cdFx0fSk7XG5cdFx0dGhpcy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG5cdFx0aWYgKHJldmlzaW9uSWQpIHtcblx0XHRcdHRoaXMucmV2aXNpb25JZCA9IHJldmlzaW9uSWQ7XG5cdFx0XHR0aGlzLmlzTmV3UGFnZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiDojrflvpfpobXpnaLlhoXlrrnmqKHlnotcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJldmlzaW9uSWRcblx0ICovXG5cdGFzeW5jIGdldENvbnRlbnRNb2RlbCgpIHtcblx0XHRjb25zdCB7Y29udGVudG1vZGVsfSA9IGF3YWl0IFdpa2kuZ2V0UGFnZUluZm8oe1xuXHRcdFx0cmV2aXNpb25JZDogdGhpcy5yZXZpc2lvbklkLFxuXHRcdFx0dGl0bGU6IHRoaXMudGl0bGUsXG5cdFx0fSk7XG5cdFx0dGhpcy5jb250ZW50bW9kZWwgPSBjb250ZW50bW9kZWwgfHwgJ3dpa2l0ZXh0Jztcblx0fVxuXG5cdC8qKlxuXHQgKiDojrflvpcgV2lraVRleHRcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnNlY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yZXZpc2lvbklkXG5cdCAqL1xuXHRhc3luYyBnZXRXaWtpVGV4dCh7c2VjdGlvbiA9ICcnfSA9IHt9KSB7XG5cdFx0Y29uc3Qgc2VjID0gc2VjdGlvbiA9PT0gLTEgPyAnJyA6IHNlY3Rpb247XG5cdFx0aWYgKHRoaXMuc2VjdGlvbkNhY2hlW3NlY10pIHtcblx0XHRcdHJldHVybiB0aGlzLnNlY3Rpb25DYWNoZVtzZWNdO1xuXHRcdH1cblx0XHRjb25zdCB3aWtpVGV4dCA9IGF3YWl0IFdpa2kuZ2V0V2lraVRleHQoe1xuXHRcdFx0c2VjdGlvbjogc2VjLFxuXHRcdFx0cmV2aXNpb25JZDogdGhpcy5yZXZpc2lvbklkLFxuXHRcdH0pO1xuXHRcdExvZy5pbmZvKGBXaWtpdGV4dCBvZiAke3RoaXMudGl0bGV9IyR7c2VjdGlvbn0gZmV0Y2hlZC5gKTtcblx0XHR0aGlzLnNlY3Rpb25DYWNoZVtzZWNdID0gd2lraVRleHQ7XG5cdFx0cmV0dXJuIHdpa2lUZXh0O1xuXHR9XG5cblx0LyoqXG5cdCAqIOino+aekCBXaWtpVGV4dFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lraXRleHRcblx0ICovXG5cdGFzeW5jIHBhcnNlV2lraVRleHQod2lraXRleHQpIHtcblx0XHRyZXR1cm4gV2lraS5wYXJzZVdpa2lUZXh0KHdpa2l0ZXh0LCB0aGlzLnRpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiDnvJbovpHpobXpnaJcblx0ICpcblx0ICogQHBhcmFtIHsqfSBjb25maWdcblx0ICogQHBhcmFtIHBheWxvYWRcblx0ICovXG5cdGFzeW5jIGVkaXQocGF5bG9hZCkge1xuXHRcdGlmICghdGhpcy5lZGl0VG9rZW4pIHtcblx0XHRcdExvZy5lcnJvcignZmFpbF90b19nZXRfZWRpdHRva2VuJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy50aW1lc3RhbXAgJiYgIXRoaXMuaXNOZXdQYWdlKSB7XG5cdFx0XHQvLyDlpoLmnpzkuI3mmK/liJvlu7rmlrDpobXpnaIg5Y+I5rKh5pyJ5Z+65YeG5pe26Ze05oizIOWImeacieWPr+iDvemAoOaIkOe8lui+keimhuebliDkv53pmanotbfop4Hnm7TmjqXmi5Lnu51cblx0XHRcdExvZy5lcnJvcignZmFpbF90b19nZXRfdGltZXN0YW1wJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJldHVybiBXaWtpLmVkaXQoe1xuXHRcdFx0dGl0bGU6IHRoaXMudGl0bGUsXG5cdFx0XHRlZGl0VG9rZW46IHRoaXMuZWRpdFRva2VuLFxuXHRcdFx0Li4uKHRoaXMudGltZXN0YW1wID8ge3RpbWVzdGFtcDogdGhpcy50aW1lc3RhbXB9IDoge30pLFxuXHRcdFx0Li4ucGF5bG9hZCxcblx0XHRcdGFkZGl0aW9uYWxDb25maWc6IHtcblx0XHRcdFx0Li4uKHRoaXMuaXNOZXdQYWdlID8ge2NyZWF0ZW9ubHk6IHRoaXMuaXNOZXdQYWdlfSA6IHt9KSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFnZTtcbiIsICIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtbm9jaGVja1xuY2xhc3MgTm90aWZpY2F0aW9uIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblx0aW5pdCgpIHtcblx0XHQkKCdib2R5JykuYXBwZW5kKCc8ZGl2IGlkPVwiTW9lTm90aWZpY2F0aW9uXCI+PC9kaXY+Jyk7XG5cdH1cblx0ZGlzcGxheSh0ZXh0ID0gJ+WWtX4nLCB0eXBlID0gJ3N1Y2Nlc3MnLCBjYWxsYmFjayA9ICgpID0+IHt9KSB7XG5cdFx0JCgnI01vZU5vdGlmaWNhdGlvbicpLmFwcGVuZChcblx0XHRcdCQoJzxkaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdNb2VOb3RpZmljYXRpb24tbm90aWNlJylcblx0XHRcdFx0LmFkZENsYXNzKGBNb2VOb3RpZmljYXRpb24tbm90aWNlLSR7dHlwZX1gKVxuXHRcdFx0XHQuYXBwZW5kKGA8c3Bhbj4ke3RleHR9PC9zcGFuPmApXG5cdFx0KTtcblx0XHQkKCcjTW9lTm90aWZpY2F0aW9uJykuZmluZCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5sYXN0KCkuZmFkZUluKDMwMCk7XG5cdFx0dGhpcy5iaW5kKCk7XG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdGNhbGxiYWNrKCQoJyNNb2VOb3RpZmljYXRpb24nKS5maW5kKCcuTW9lTm90aWZpY2F0aW9uLW5vdGljZScpLmxhc3QoKSk7XG5cdH1cblx0YmluZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHQkKCcuTW9lTm90aWZpY2F0aW9uLW5vdGljZScpLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRzZWxmLnNsaWRlTGVmdCgkKHRoaXMpKTtcblx0XHR9KTtcblx0fVxuXHRzdWNjZXNzKHRleHQsIGNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kaXNwbGF5KHRleHQsICdzdWNjZXNzJywgY2FsbGJhY2spO1xuXHR9XG5cdHdhcm5pbmcodGV4dCwgY2FsbGJhY2spIHtcblx0XHR0aGlzLmRpc3BsYXkodGV4dCwgJ3dhcm5pbmcnLCBjYWxsYmFjayk7XG5cdH1cblx0ZXJyb3IodGV4dCwgY2FsbGJhY2spIHtcblx0XHR0aGlzLmRpc3BsYXkodGV4dCwgJ2Vycm9yJywgY2FsbGJhY2spO1xuXHR9XG5cdGNsZWFyKCkge1xuXHRcdGlmICgkKCcuTW9lTm90aWZpY2F0aW9uLW5vdGljZScpLmxlbmd0aCA+PSAxMCkge1xuXHRcdFx0JCgnI01vZU5vdGlmaWNhdGlvbicpXG5cdFx0XHRcdC5jaGlsZHJlbigpXG5cdFx0XHRcdC5maXJzdCgpXG5cdFx0XHRcdC5mYWRlT3V0KDE1MCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0c2V0VGltZW91dCh0aGlzLmNsZWFyLCAzMDApO1xuXHRcdH1cblx0fVxuXHRlbXB0eShmKSB7XG5cdFx0JCgnLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2UnKS5lYWNoKGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRpZiAodHlwZW9mIGYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y29uc3QgZWxlID0gJCh0aGlzKTtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0ZihlbGUpO1xuXHRcdFx0XHR9LCAyMDAgKiBpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCQodGhpcylcblx0XHRcdFx0XHQuZGVsYXkoaSAqIDIwMClcblx0XHRcdFx0XHQuZmFkZU91dCgnZmFzdCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0c2xpZGVMZWZ0KGVsZSwgc3BlZWQpIHtcblx0XHRlbGUuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuXHRcdGVsZS5hbmltYXRlKFxuXHRcdFx0e1xuXHRcdFx0XHRsZWZ0OiAnLTIwMCUnLFxuXHRcdFx0fSxcblx0XHRcdHNwZWVkIHx8IDE1MCxcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JCh0aGlzKS5mYWRlT3V0KCdmYXN0JywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE5vdGlmaWNhdGlvbigpO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5jb25zdCBzbGVlcCA9ICh0aW1lKSA9PiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpO1xuXHR9KTtcbn07XG5leHBvcnQgZGVmYXVsdCBzbGVlcDtcbiIsICIvKipcbiAqIOino+aekFVSTOWPguaVsOWIl+ihqFxuICogUGFyc2UgVVJMIHF1ZXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB1cmxcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5KHVybCkge1xuXHRjb25zdCByZWcgPSAvKChbXj8mPV0rKSg/Oj0oW14/Jj1dKikpKikvZztcblx0Y29uc3QgcGFyYW1zID0ge307XG5cdGxldCBtYXRjaDtcblx0d2hpbGUgKChtYXRjaCA9IHJlZy5leGVjKHVybCkpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHBhcmFtc1ttYXRjaFsyXV0gPSBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cGFyYW1zW21hdGNoWzJdXSA9IG1hdGNoWzNdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcGFyYW1zO1xufVxuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgTm90aWZpY2F0aW9uIGZyb20gJy4vbm90aWZpY2F0aW9uJztcbmltcG9ydCBpMThuIGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IExvZyBmcm9tICcuLi91dGlscy9sb2cnO1xuaW1wb3J0IHNsZWVwIGZyb20gJy4uL3V0aWxzL3NsZWVwJztcbmltcG9ydCB7cGFyc2VRdWVyeX0gZnJvbSAnLi4vdXRpbHMvaGVscGVycyc7XG5cbmNsYXNzIFVJIHtcblx0cXVpY2tFZGl0UGFuZWxWaXNpYmxlID0gZmFsc2U7XG5cdHNjcm9sbFRvcCA9IDA7XG5cblx0LyoqXG5cdCAqIOWIm+W7uuWxheS4reWvueivneahhlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUg56qX5Y+j5qCH6aKYXG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgSlF1ZXJ5PEhUTUxFbGVtZW50Pn0gY29udGVudCDlhoXlrrlcblx0ICogQHBhcmFtIHsqfSB3aWR0aCDlrr3luqZcblx0ICogQHBhcmFtIHsqfSBjYWxsYmFjayDlm57osIPlh73mlbBcblx0ICovXG5cdGNyZWF0ZURpYWxvZ0JveCh0aXRsZSA9ICdXaWtpcGx1cycsIGNvbnRlbnQgPSAnJywgd2lkdGggPSA2MDAsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcblx0XHRpZiAoJCgnLldpa2lwbHVzLUludGVyQm94JykubGVuZ3RoID4gMCkge1xuXHRcdFx0JCgnLldpa2lwbHVzLUludGVyQm94JykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdCQodGhpcykucmVtb3ZlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3QgY2xpZW50V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblx0XHRjb25zdCBjbGllbnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0Y29uc3QgZGlhbG9nV2lkdGggPSBNYXRoLm1pbihjbGllbnRXaWR0aCwgd2lkdGgpO1xuXHRcdGNvbnN0IGRpYWxvZ0JveCA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gnKVxuXHRcdFx0LmNzcyh7XG5cdFx0XHRcdCdtYXJnaW4tbGVmdCc6IGNsaWVudFdpZHRoIC8gMiAtIGRpYWxvZ1dpZHRoIC8gMixcblx0XHRcdFx0dG9wOiAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKSArIGNsaWVudEhlaWdodCAqIDAuMixcblx0XHRcdFx0ZGlzcGxheTogJ25vbmUnLFxuXHRcdFx0fSlcblx0XHRcdC5hcHBlbmQoJCgnPGRpdj4nKS5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtSGVhZGVyJykuaHRtbCh0aXRsZSkpXG5cdFx0XHQuYXBwZW5kKCQoJzxkaXY+JykuYWRkQ2xhc3MoJ1dpa2lwbHVzLUludGVyQm94LUNvbnRlbnQnKS5hcHBlbmQoY29udGVudCkpXG5cdFx0XHQuYXBwZW5kKCQoJzxzcGFuPicpLnRleHQoJ8OXJykuYWRkQ2xhc3MoJ1dpa2lwbHVzLUludGVyQm94LUNsb3NlJykpO1xuXHRcdCQoJ2JvZHknKS5hcHBlbmQoZGlhbG9nQm94KTtcblx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gnKS53aWR0aChkaWFsb2dXaWR0aCk7XG5cdFx0JCgnLldpa2lwbHVzLUludGVyQm94LUNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0JCh0aGlzKVxuXHRcdFx0XHQucGFyZW50KClcblx0XHRcdFx0LmZhZGVPdXQoJ2Zhc3QnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgKHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IHVuZGVmaW5lZCkpOyAvLyDlj5bmtojpobXpnaLlhbPpl63noa7orqRcblx0XHRcdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0XHQvL+aLluabs1xuXHRcdGNvbnN0IGJpbmREcmFnZ2luZyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRlbGVtZW50Lm1vdXNlZG93bigoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBiYXNlWCA9IGUuY2xpZW50WDtcblx0XHRcdFx0Y29uc3QgYmFzZVkgPSBlLmNsaWVudFk7XG5cdFx0XHRcdGNvbnN0IGJhc2VPZmZzZXRYID0gZWxlbWVudC5wYXJlbnQoKS5vZmZzZXQoKS5sZWZ0O1xuXHRcdFx0XHRjb25zdCBiYXNlT2Zmc2V0WSA9IGVsZW1lbnQucGFyZW50KCkub2Zmc2V0KCkudG9wO1xuXHRcdFx0XHQkKGRvY3VtZW50KS5vbignbW91c2Vtb3ZlJywgKGUpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50LnBhcmVudCgpLmNzcyh7XG5cdFx0XHRcdFx0XHQnbWFyZ2luLWxlZnQnOiBiYXNlT2Zmc2V0WCArIGUuY2xpZW50WCAtIGJhc2VYLFxuXHRcdFx0XHRcdFx0dG9wOiBiYXNlT2Zmc2V0WSArIGUuY2xpZW50WSAtIGJhc2VZLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0JChkb2N1bWVudCkub24oJ21vdXNldXAnLCAoKSA9PiB7XG5cdFx0XHRcdFx0ZWxlbWVudC51bmJpbmQoJ21vdXNlZG93bicpO1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJyk7XG5cdFx0XHRcdFx0JChkb2N1bWVudCkub2ZmKCdtb3VzZXVwJyk7XG5cdFx0XHRcdFx0YmluZERyYWdnaW5nKGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0YmluZERyYWdnaW5nKCQoJy5XaWtpcGx1cy1JbnRlckJveC1IZWFkZXInKSk7XG5cdFx0JCgnLldpa2lwbHVzLUludGVyQm94JykuZmFkZUluKDUwMCk7XG5cdFx0Y2FsbGJhY2soKTtcblx0XHRyZXR1cm4gZGlhbG9nQm94O1xuXHR9XG5cblx0LyoqXG5cdCAqIOWcqOaQnOe0ouahhuW3puS+p+OAjOabtOWkmuOAjeiPnOWNleWGhea3u+WKoOaMiemSrlxuXHQgKiBBZGQgYSBidXR0b24gaW4gXCJNb3JlXCIgbWVudSAobGVmdCBvZiB0aGUgc2VhcmNoIGJhcilcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQg5oyJ6ZKu5ZCNIEJ1dHRvbiB0ZXh0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCDmjInpkq5pZCBCdXR0b24gaWRcblx0ICogQHJldHVybiB7SlF1ZXJ5PEhUTUxFbGVtZW50Pn0gYnV0dG9uXG5cdCAqL1xuXHRhZGRGdW5jdGlvbkJ1dHRvbih0ZXh0LCBpZCkge1xuXHRcdGxldCBidXR0b247XG5cdFx0c3dpdGNoIChDb25zdGFudHMuc2tpbikge1xuXHRcdFx0Y2FzZSAnbWluZXJ2YSc6XG5cdFx0XHRcdGJ1dHRvbiA9ICQoJzxsaT4nKVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsIGlkKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndG9nZ2xlLWxpc3QtaXRlbScpXG5cdFx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHRcdCQoJzxhPicpXG5cdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygnbXctdWktaWNvbiBtdy11aS1pY29uLWJlZm9yZSB0b2dnbGUtbGlzdC1pdGVtX19hbmNob3InKVxuXHRcdFx0XHRcdFx0XHQuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHRcdCQoJzxzcGFuPicpXG5cdFx0XHRcdFx0XHRcdFx0XHQuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCk7Jylcblx0XHRcdFx0XHRcdFx0XHRcdC5hZGRDbGFzcygndG9nZ2xlLWxpc3QtaXRlbV9fbGFiZWwnKVxuXHRcdFx0XHRcdFx0XHRcdFx0LnRleHQodGV4dClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICdtb2Vza2luJzpcblx0XHRcdFx0YnV0dG9uID0gJCgnPGxpPicpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1Nb3JlLUZ1bmN0aW9uLUJ1dHRvbicpXG5cdFx0XHRcdFx0LmF0dHIoJ2lkJywgaWQpXG5cdFx0XHRcdFx0LmFwcGVuZCgkKCc8YT4nKS5hdHRyKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKTsnKS50ZXh0KHRleHQpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJ1dHRvbiA9ICQoJzxsaT4nKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygnbXctbGlzdC1pdGVtJylcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3ZlY3Rvci10YWItbm9pY29uJylcblx0XHRcdFx0XHQuYXR0cignaWQnLCBpZClcblx0XHRcdFx0XHQuYXBwZW5kKCQoJzxhPicpLmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpLnRleHQodGV4dCkpO1xuXHRcdH1cblx0XHRpZiAoQ29uc3RhbnRzLnNraW4gPT09ICdtaW5lcnZhJyAmJiAkKCcjcC10YicpLmxlbmd0aCA+IDApIHtcblx0XHRcdCQoJyNwLXRiJykuYXBwZW5kKGJ1dHRvbik7XG5cdFx0XHRyZXR1cm4gJChgIyR7aWR9YCk7XG5cdFx0fSBlbHNlIGlmIChDb25zdGFudHMuc2tpbiA9PT0gJ21vZXNraW4nKSB7XG5cdFx0XHQkKCcubW9yZS1hY3Rpb25zLWxpc3QnKS5maXJzdCgpLmFwcGVuZChidXR0b24pO1xuXHRcdFx0cmV0dXJuICQoYCMke2lkfWApO1xuXHRcdH0gZWxzZSBpZiAoJCgnI3AtY2FjdGlvbnMnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHQkKCcjcC1jYWN0aW9ucyB1bCcpLmFwcGVuZChidXR0b24pO1xuXHRcdFx0cmV0dXJuICQoYCMke2lkfWApO1xuXHRcdH1cblx0XHRMb2cuaW5mbyhpMThuLnRyYW5zbGF0ZSgnY2FudF9hZGRfZnVuY2J0bicpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiDmj5LlhaXlv6vpgJ/ph43lrprlkJHmjInpkq5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBvbkNsaWNrXG5cdCAqL1xuXHRpbnNlcnRTaW1wbGVSZWRpcmVjdEJ1dHRvbihvbkNsaWNrID0gKCkgPT4ge30pIHtcblx0XHRjb25zdCBidXR0b24gPSB0aGlzLmFkZEZ1bmN0aW9uQnV0dG9uKGkxOG4udHJhbnNsYXRlKCdyZWRpcmVjdF9mcm9tJyksICdXaWtpcGx1cy1TUi1JbnRybycpO1xuXHRcdGlmIChidXR0b24pIHtcblx0XHRcdGJ1dHRvbi5vbignY2xpY2snLCBvbkNsaWNrKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICog5o+S5YWl6K6+572u6Z2i5p2/5oyJ6ZKuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gb25DbGlja1xuXHQgKi9cblx0aW5zZXJ0U2V0dGluZ3NQYW5lbEJ1dHRvbihvbkNsaWNrID0gKCkgPT4ge30pIHtcblx0XHRjb25zdCBidXR0b24gPSB0aGlzLmFkZEZ1bmN0aW9uQnV0dG9uKGkxOG4udHJhbnNsYXRlKCd3aWtpcGx1c19zZXR0aW5ncycpLCAnV2lraXBsdXMtU2V0dGluZ3MtSW50cm8nKTtcblx0XHRpZiAoYnV0dG9uKSB7XG5cdFx0XHRidXR0b24ub24oJ2NsaWNrJywgb25DbGljayk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIOaPkuWFpemhtumDqOW/q+mAn+e8lui+keaMiemSrlxuXHQgKiBJbnNlcnQgUXVpY2tFZGl0IGJ1dHRvbiBiZXNpZGVzIHBhZ2UgZWRpdCBidXR0b24uXG5cdCAqXG5cdCAqIEBwYXJhbSBvbkNsaWNrXG5cdCAqL1xuXHRpbnNlcnRUb3BRdWlja0VkaXRFbnRyeShvbkNsaWNrKSB7XG5cdFx0Y29uc3QgdG9wQnRuID0gJCgnPGxpPicpLmF0dHIoJ2lkJywgJ1dpa2lwbHVzLUVkaXQtVG9wQnRuJykuYXR0cignY2xhc3MnLCAnbXctbGlzdC1pdGVtJyk7XG5cdFx0Y29uc3QgdG9wQnRuTGluayA9ICQoJzxhPicpXG5cdFx0XHQuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKVxuXHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ3F1aWNrZWRpdF90b3BidG4nKX1gKTtcblx0XHR0b3BCdG4uYXBwZW5kKHRvcEJ0bkxpbmspO1xuXHRcdHN3aXRjaCAoQ29uc3RhbnRzLnNraW4pIHtcblx0XHRcdGNhc2UgJ21pbmVydmEnOlxuXHRcdFx0XHR0b3BCdG4uY3NzKHsnYWxpZ24taXRlbXMnOiAnY2VudGVyJywgZGlzcGxheTogJ2ZsZXgnfSk7XG5cdFx0XHRcdHRvcEJ0bi5maW5kKCdzcGFuJykuYWRkQ2xhc3MoJ3BhZ2UtYWN0aW9ucy1tZW51X19saXN0LWl0ZW0nKTtcblx0XHRcdFx0dG9wQnRuXG5cdFx0XHRcdFx0LmZpbmQoJ2EnKVxuXHRcdFx0XHRcdC5hZGRDbGFzcyhcblx0XHRcdFx0XHRcdCdtdy11aS1pY29uIG13LXVpLWljb24tZWxlbWVudCBtdy11aS1pY29uLXdpa2ltZWRpYS1lZGl0LWJhc2UyMCBtdy11aS1pY29uLXdpdGgtbGFiZWwtZGVza3RvcCdcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmNzcygndmVydGljYWwtYWxpZ24nLCAnbWlkZGxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICd2ZWN0b3ItMjAyMic6XG5cdFx0XHRcdHRvcEJ0bi5hZGRDbGFzcygndmVjdG9yLXRhYi1ub2ljb24nKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJ3ZlY3Rvcic6XG5cdFx0XHRcdHRvcEJ0bi5hcHBlbmQoJCgnPHNwYW4+JykuYXBwZW5kKHRvcEJ0bkxpbmspKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHRcdCQodG9wQnRuKS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRvbkNsaWNrKHtcblx0XHRcdFx0c2VjdGlvbk51bWJlcjogLTEsXG5cdFx0XHRcdHRhcmdldFBhZ2VOYW1lOiBDb25zdGFudHMuY3VycmVudFBhZ2VOYW1lLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0aWYgKCQoJyNjYS1lZGl0JykubGVuZ3RoID4gMCAmJiAkKCcjV2lraXBsdXMtRWRpdC1Ub3BCdG4nKS5sZW5ndGggPT09IDApIHtcblx0XHRcdENvbnN0YW50cy5za2luID09PSAnbWluZXJ2YScgPyAkKCcjY2EtZWRpdCcpLnBhcmVudCgpLmFmdGVyKHRvcEJ0bikgOiAkKCcjY2EtZWRpdCcpLmFmdGVyKHRvcEJ0bik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIOaPkuWFpeauteiQveW/q+mAn+e8lui+keaMiemSrlxuXHQgKiBJbnNlcnQgUXVpY2tFZGl0IGJ1dHRvbnMgZm9yIGVhY2ggc2VjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9uQ2xpY2tcblx0ICovXG5cdGluc2VydFNlY3Rpb25RdWlja0VkaXRFbnRyaWVzKG9uQ2xpY2sgPSAoKSA9PiB7fSkge1xuXHRcdGNvbnN0IHNlY3Rpb25CdG4gPVxuXHRcdFx0Q29uc3RhbnRzLnNraW4gPT09ICdtaW5lcnZhJ1xuXHRcdFx0XHQ/ICQoJzxzcGFuPicpLmFwcGVuZChcblx0XHRcdFx0XHRcdCQoJzxhPicpXG5cdFx0XHRcdFx0XHRcdC5hZGRDbGFzcyhcblx0XHRcdFx0XHRcdFx0XHQnV2lraXBsdXMtRWRpdC1TZWN0aW9uQnRuIG13LXVpLWljb24gbXctdWktaWNvbi1lbGVtZW50IG13LXVpLWljb24td2lraW1lZGlhLWVkaXQtYmFzZTIwIGVkaXQtcGFnZSBtdy11aS1pY29uLWZsdXNoLXJpZ2h0J1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdC5jc3MoJ21hcmdpbi1sZWZ0JywgJzAuNzVlbScpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKScpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCd0aXRsZScsIGkxOG4udHJhbnNsYXRlKCdxdWlja2VkaXRfc2VjdGlvbmJ0bicpKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0OiAkKCc8c3Bhbj4nKVxuXHRcdFx0XHRcdFx0LmFwcGVuZCgkKCc8c3Bhbj4nKS5hZGRDbGFzcygnbXctZWRpdHNlY3Rpb24tZGl2aWRlcicpLnRleHQoJyB8ICcpKVxuXHRcdFx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLUVkaXQtU2VjdGlvbkJ0bicpXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJylcblx0XHRcdFx0XHRcdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgncXVpY2tlZGl0X3NlY3Rpb25idG4nKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0JCgnLm13LWVkaXRzZWN0aW9uJykuZWFjaChmdW5jdGlvbiAoaSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZWRpdFVSTCA9ICQodGhpcykuZmluZChcImFbaHJlZio9J2FjdGlvbj1lZGl0J11cIikuZmlyc3QoKS5hdHRyKCdocmVmJyk7XG5cdFx0XHRcdGNvbnN0IHNlY3Rpb25OdW1iZXIgPSBlZGl0VVJMXG5cdFx0XHRcdFx0Lm1hdGNoKC8mW3ZlXSpzZWN0aW9uXFw9KFteJl0rKS8pWzFdIC8vIGB2ZWAgZm9yIHZpc3VhbCBlZGl0b3Jcblx0XHRcdFx0XHQucmVwbGFjZSgvVC0vZ2ksICcnKTsgLy8gZW1iZWRkZWQgcGFnZXMgdXNlIFQtc2VyaWVzIHNlY3Rpb24gbnVtYmVyXG5cdFx0XHRcdGNvbnN0IHNlY3Rpb25UYXJnZXROYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGVkaXRVUkwubWF0Y2goL3RpdGxlPSguKz8pJi8pWzFdKTtcblx0XHRcdFx0Y29uc3QgY2xvbmVOb2RlID0gJCh0aGlzKS5wcmV2KCkuY2xvbmUoKTtcblx0XHRcdFx0Y2xvbmVOb2RlLmZpbmQoJy5tdy1oZWFkbGluZS1udW1iZXInKS5yZW1vdmUoKTtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbk5hbWUgPSBjbG9uZU5vZGUudGV4dCgpLnRyaW0oKTtcblx0XHRcdFx0Y29uc3QgX3NlY3Rpb25CdG4gPSBzZWN0aW9uQnRuLmNsb25lKCk7XG5cdFx0XHRcdF9zZWN0aW9uQnRuLmZpbmQoJy5XaWtpcGx1cy1FZGl0LVNlY3Rpb25CdG4nKS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0b25DbGljayh7XG5cdFx0XHRcdFx0XHRzZWN0aW9uTnVtYmVyLFxuXHRcdFx0XHRcdFx0c2VjdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHR0YXJnZXRQYWdlTmFtZTogc2VjdGlvblRhcmdldE5hbWUsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRDb25zdGFudHMuc2tpbiA9PT0gJ21pbmVydmEnXG5cdFx0XHRcdFx0PyAkKHRoaXMpLmFwcGVuZChfc2VjdGlvbkJ0bilcblx0XHRcdFx0XHQ6ICQodGhpcykuZmluZCgnLm13LWVkaXRzZWN0aW9uLWJyYWNrZXQnKS5sYXN0KCkuYmVmb3JlKF9zZWN0aW9uQnRuKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRMb2cuZXJyb3IoJ2ZhaWxfdG9faW5pdF9xdWlja2VkaXQnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiDmj5LlhaXku7vmhI/pk77mjqXnvJbovpHlhaXlj6Ncblx0ICpcblx0ICogQHBhcmFtIHsqfSBvbkNsaWNrXG5cdCAqL1xuXHRpbnNlcnRMaW5rRWRpdEVudHJpZXMob25DbGljayA9ICgpID0+IHt9KSB7XG5cdFx0JCgnI213LWNvbnRlbnQtdGV4dCBhLmV4dGVybmFsJykuZWFjaChmdW5jdGlvbiAoaSkge1xuXHRcdFx0Y29uc3QgdXJsID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSBwYXJzZVF1ZXJ5KHVybCk7XG5cdFx0XHRpZiAocGFyYW1zLmFjdGlvbiA9PT0gJ2VkaXQnICYmIHBhcmFtcy50aXRsZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5zZWN0aW9uICE9PSAnbmV3Jykge1xuXHRcdFx0XHQkKHRoaXMpLmFmdGVyKFxuXHRcdFx0XHRcdCQoJzxhPicpXG5cdFx0XHRcdFx0XHQuYXR0cih7XG5cdFx0XHRcdFx0XHRcdGhyZWY6ICdqYXZhc2NyaXB0OnZvaWQoMCknLFxuXHRcdFx0XHRcdFx0XHRjbGFzczogJ1dpa2lwbHVzLUVkaXQtRXZlcnlXaGVyZUJ0bicsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LnRleHQoYCgke2kxOG4udHJhbnNsYXRlKCdxdWlja2VkaXRfc2VjdGlvbmJ0bicpfSlgKVxuXHRcdFx0XHRcdFx0Lm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0b25DbGljayh7XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0UGFnZU5hbWU6IHBhcmFtcy50aXRsZSxcblx0XHRcdFx0XHRcdFx0XHRzZWN0aW9uTnVtYmVyOiBwYXJhbXMuc2VjdGlvbiA/PyAtMSxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0c2hvd1F1aWNrRWRpdFBhbmVsKHtcblx0XHR0aXRsZSA9ICcnLFxuXHRcdGNvbnRlbnQgPSAnJyxcblx0XHRzdW1tYXJ5ID0gJycsXG5cdFx0b25CYWNrID0gKCkgPT4ge30sXG5cdFx0b25QYXJzZSA9ICgpID0+IHt9LFxuXHRcdG9uRWRpdCA9ICgpID0+IHt9LFxuXHRcdGVzY0V4aXQgPSBmYWxzZSxcblx0fSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHRoaXMuc2Nyb2xsVG9wID0gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCk7XG5cdFx0aWYgKHRoaXMucXVpY2tFZGl0UGFuZWxWaXNpYmxlKSB7XG5cdFx0XHR0aGlzLmhpZGVRdWlja0VkaXRQYW5lbCgpO1xuXHRcdH1cblx0XHR0aGlzLnF1aWNrRWRpdFBhbmVsVmlzaWJsZSA9IHRydWU7XG5cdFx0Ly8g6Ziy5q2i5omL5ruR5YWz6Zet6aG16Z2iXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHQnY2xvc2UnLFxuXHRcdFx0KHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGAke2kxOG4udHJhbnNsYXRlKCdvbmNsb3NlX2NvbmZpcm0nKX1gO1xuXHRcdFx0fSlcblx0XHQpO1xuXHRcdGNvbnN0IGlzTmV3UGFnZSA9ICQoJy5ub2FydGljbGV0ZXh0JykubGVuZ3RoID4gMDtcblx0XHQvLyBET00g5a6a5LmJ5byA5aeLXG5cdFx0Y29uc3QgYmFja0J0biA9ICQoJzxzcGFuPicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LUJhY2snKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1CdG4nKVxuXHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ2JhY2snKX1gKTsgLy8g6L+U5Zue5oyJ6ZKuXG5cdFx0Y29uc3QganVtcEJ0biA9ICQoJzxzcGFuPicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtUXVpY2tlZGl0LUp1bXAnKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1CdG4nKVxuXHRcdFx0LmFwcGVuZChcblx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHQuYXR0cignaHJlZicsICcjV2lraXBsdXMtUXVpY2tlZGl0Jylcblx0XHRcdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgnZ290b19lZGl0Ym94Jyl9YClcblx0XHRcdCk7IC8vIOWIsOe8lui+keahhlxuXHRcdGNvbnN0IGlucHV0Qm94ID0gJCgnPHRleHRhcmVhPicpLmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVF1aWNrZWRpdCcpOyAvLyDkuLvnvJbovpHmoYZcblx0XHRjb25zdCBwcmV2aWV3Qm94ID0gJCgnPGRpdj4nKS5hdHRyKCdpZCcsICdXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKTsgLy8g6aKE6KeI6L6T5Ye6XG5cdFx0Y29uc3Qgc3VtbWFyeUJveCA9ICQoJzxpbnB1dD4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVF1aWNrZWRpdC1TdW1tYXJ5LUlucHV0Jylcblx0XHRcdC5hdHRyKCdwbGFjZWhvbGRlcicsIGAke2kxOG4udHJhbnNsYXRlKCdzdW1tYXJ5X3BsYWNlaG9sZCcpfWApOyAvLyDnvJbovpHmkZjopoHovpPlhaVcblx0XHRjb25zdCBlZGl0U3VibWl0QnRuID0gJCgnPGJ1dHRvbj4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVF1aWNrZWRpdC1TdWJtaXQnKVxuXHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoaXNOZXdQYWdlID8gJ3B1Ymxpc2hfcGFnZScgOiAncHVibGlzaF9jaGFuZ2UnKX0oQ3RybCtTKWApOyAvLyDmj5DkuqTmjInpkq5cblx0XHRjb25zdCBwcmV2aWV3U3VibWl0QnRuID0gJCgnPGJ1dHRvbj4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LVN1Ym1pdCcpXG5cdFx0XHQudGV4dChgJHtpMThuLnRyYW5zbGF0ZSgncHJldmlldycpfWApOyAvLyDpooTop4jmjInpkq5cblx0XHRjb25zdCBpc01pbm9yRWRpdCA9ICQoJzxkaXY+Jylcblx0XHRcdC5hcHBlbmQoJCgnPGlucHV0PicpLmF0dHIoe3R5cGU6ICdjaGVja2JveCcsIGlkOiAnV2lraXBsdXMtUXVpY2tlZGl0LU1pbm9yRWRpdCd9KSlcblx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdCQoJzxsYWJlbD4nKVxuXHRcdFx0XHRcdC5hdHRyKCdmb3InLCAnV2lraXBsdXMtUXVpY2tlZGl0LU1pbm9yRWRpdCcpXG5cdFx0XHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ21hcmtfbWlub3JlZGl0Jyl9KEN0cmwrU2hpZnQrUylgKVxuXHRcdFx0KVxuXHRcdFx0LmNzcyh7bWFyZ2luOiAnNXB4IDVweCA1cHggLTNweCcsIGRpc3BsYXk6ICdpbmxpbmUnfSk7XG5cdFx0Ly8gRE9N5a6a5LmJ57uT5p2fXG5cdFx0Y29uc3QgZWRpdEJvZHkgPSAkKCc8ZGl2PicpLmFwcGVuZChcblx0XHRcdGJhY2tCdG4sXG5cdFx0XHRqdW1wQnRuLFxuXHRcdFx0cHJldmlld0JveCxcblx0XHRcdGlucHV0Qm94LFxuXHRcdFx0c3VtbWFyeUJveCxcblx0XHRcdCQoJzxicj4nKSxcblx0XHRcdGlzTWlub3JFZGl0LFxuXHRcdFx0ZWRpdFN1Ym1pdEJ0bixcblx0XHRcdHByZXZpZXdTdWJtaXRCdG5cblx0XHQpO1xuXHRcdHRoaXMuY3JlYXRlRGlhbG9nQm94KHRpdGxlLCBlZGl0Qm9keSwgMTAwMCwgKCkgPT4ge1xuXHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdCcpLnZhbChjb250ZW50KTtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VtbWFyeS1JbnB1dCcpLnZhbChzdW1tYXJ5KTtcblx0XHR9KTtcblx0XHQvLyBCYWNrXG5cdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1CYWNrJykub24oJ2NsaWNrJywgb25CYWNrKTtcblx0XHQvLyBQcmV2aWV3XG5cdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LVN1Ym1pdCcpLm9uKCdjbGljaycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHByZWxvYWRCYW5uZXIgPSAkKCc8ZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtQmFubmVyJylcblx0XHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ2xvYWRpbmdfcHJldmlldycpfWApO1xuXHRcdFx0Y29uc3Qgd2lraVRleHQgPSAkKCcjV2lraXBsdXMtUXVpY2tlZGl0JykudmFsKCk7XG5cdFx0XHQkKHRoaXMpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG5cdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZU91dCgxMDAsICgpID0+IHtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmh0bWwoJycpLmFwcGVuZChwcmVsb2FkQmFubmVyKTtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmZhZGVJbigxMDApO1xuXHRcdFx0fSk7XG5cdFx0XHQkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBzZWxmLnNjcm9sbFRvcH0sIDIwMCk7IC8v6L+U5Zue6aG26YOoXG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBvblBhcnNlKHdpa2lUZXh0KTtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKS5mYWRlT3V0KCcxMDAnLCAoKSA9PiB7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKS5odG1sKGA8aHI+PGRpdiBjbGFzcz1cIm13LWJvZHktY29udGVudFwiPiR7cmVzdWx0fTwvZGl2Pjxocj5gKTtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmZhZGVJbignMTAwJyk7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1TdWJtaXQnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdC8vIEVkaXRcblx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVN1Ym1pdCcpLm9uKCdjbGljaycsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IHRpbWVyID0gRGF0ZS5ub3coKTtcblx0XHRcdGNvbnN0IGVkaXRCYW5uZXIgPSAkKCc8ZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtQmFubmVyJylcblx0XHRcdFx0LnRleHQoYCR7aTE4bi50cmFuc2xhdGUoJ3N1Ym1pdHRpbmdfZWRpdCcpfWApO1xuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcblx0XHRcdFx0c3VtbWFyeTogJCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1TdW1tYXJ5LUlucHV0JykudmFsKCksXG5cdFx0XHRcdGNvbnRlbnQ6ICQoJyNXaWtpcGx1cy1RdWlja2VkaXQnKS52YWwoKSxcblx0XHRcdFx0aXNNaW5vckVkaXQ6ICQoJyNXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0JykuaXMoJzpjaGVja2VkJyksXG5cdFx0XHR9O1xuXHRcdFx0Ly8g5YeG5aSH57yW6L6RIOemgeeUqOaMiemSriDmiafooYzliqjnlLtcblx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VibWl0LCNXaWtpcGx1cy1RdWlja2VkaXQsI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LVN1Ym1pdCcpLmF0dHIoXG5cdFx0XHRcdCdkaXNhYmxlZCcsXG5cdFx0XHRcdCdkaXNhYmxlZCdcblx0XHRcdCk7XG5cdFx0XHQkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBzZWxmLnNjcm9sbFRvcH0sIDIwMCk7XG5cdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVByZXZpZXctT3V0cHV0JykuZmFkZU91dCgxMDAsICgpID0+IHtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmh0bWwoJycpLmFwcGVuZChlZGl0QmFubmVyKTtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpLmZhZGVJbigxMDApO1xuXHRcdFx0fSk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBvbkVkaXQocGF5bG9hZCk7XG5cdFx0XHRcdGNvbnN0IHVzZVRpbWUgPSBEYXRlLm5vdygpIC0gdGltZXI7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1PdXRwdXQnKVxuXHRcdFx0XHRcdC5maW5kKCcuV2lraXBsdXMtQmFubmVyJylcblx0XHRcdFx0XHQuY3NzKCdiYWNrZ3JvdW5kJywgJ3JnYmEoNiwgMjM5LCA5MiwgMC40NCknKTtcblx0XHRcdFx0JCgnI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCcpXG5cdFx0XHRcdFx0LmZpbmQoJy5XaWtpcGx1cy1CYW5uZXInKVxuXHRcdFx0XHRcdC50ZXh0KGAke2kxOG4udHJhbnNsYXRlKCdlZGl0X3N1Y2Nlc3MnLCBbdXNlVGltZS50b1N0cmluZygpXSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsICh3aW5kb3cub25iZWZvcmV1bmxvYWQgPSB1bmRlZmluZWQpKTsgLy/lj5bmtojpobXpnaLlhbPpl63noa7orqRcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0bG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhlcnJvcik7XG5cdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS5jc3MoJ2JhY2tncm91bmQnLCAncmdiYSgyMTgsIDE0MiwgMTY3LCAwLjY1KScpO1xuXHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykuaHRtbChlcnJvci5tZXNzYWdlKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtU3VibWl0LCNXaWtpcGx1cy1RdWlja2VkaXQsI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LVN1Ym1pdCcpLnByb3AoXG5cdFx0XHRcdFx0J2Rpc2FibGVkJyxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vQ3RybCtT5o+Q5LqkIEN0cmwrU2hpZnQrU+Wwj+e8lui+kVxuXHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQsI1dpa2lwbHVzLVF1aWNrZWRpdC1TdW1tYXJ5LUlucHV0LCNXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0Jykub24oJ2tleWRvd24nLCAoZSkgPT4ge1xuXHRcdFx0aWYgKGUuY3RybEtleSAmJiBlLndoaWNoID09PSA4Mykge1xuXHRcdFx0XHRpZiAoZS5zaGlmdEtleSkge1xuXHRcdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtTWlub3JFZGl0JykudHJpZ2dlcignY2xpY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkKCcjV2lraXBsdXMtUXVpY2tlZGl0LVN1Ym1pdCcpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvL0VzY+mAgOWHulxuXHRcdGlmIChlc2NFeGl0KSB7XG5cdFx0XHQkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIChlKSA9PiB7XG5cdFx0XHRcdGlmIChlLndoaWNoID09PSAyNykge1xuXHRcdFx0XHRcdCQoJyNXaWtpcGx1cy1RdWlja2VkaXQtQmFjaycpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGhpZGVRdWlja0VkaXRQYW5lbCgpIHtcblx0XHR0aGlzLnF1aWNrRWRpdFBhbmVsVmlzaWJsZSA9IGZhbHNlO1xuXHRcdCQoJy5XaWtpcGx1cy1JbnRlckJveCcpLmZhZGVPdXQoJ2Zhc3QnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCAod2luZG93Lm9uYmVmb3JldW5sb2FkID0gdW5kZWZpbmVkKSk7IC8v5Y+W5raI6aG16Z2i5YWz6Zet56Gu6K6kXG5cdFx0XHQkKHRoaXMpLnJlbW92ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIOaYvuekuuW/q+mAn+mHjeWumuWQkeW8ueeql1xuXHQgKlxuXHQgKiBAcGFyYW0gcm9vdDBcblx0ICogQHBhcmFtIHJvb3QwLm9uRWRpdFxuXHQgKiBAcGFyYW0gcm9vdDAub25TdWNjZXNzXG5cdCAqL1xuXHRzaG93U2ltcGxlUmVkaXJlY3RQYW5lbCh7b25FZGl0ID0gKCkgPT4ge30sIG9uU3VjY2VzcyA9ICgpID0+IHt9fSA9IHt9KSB7XG5cdFx0Y29uc3QgaW5wdXQgPSAkKCc8aW5wdXQ+JykuYWRkQ2xhc3MoJ1dpa2lwbHVzLUludGVyQm94LUlucHV0JykuYXR0cignaWQnLCAnV2lraXBsdXMtU1ItVGl0bGUnKTtcblx0XHRjb25zdCBzdW1tYXJ5SW5wdXRUaXRsZSA9ICQoJzxwPicpLnRleHQoaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X3N1bW1hcnlfZGVzYycpKTtcblx0XHRjb25zdCBzdW1tYXJ5SW5wdXQgPSAkKCc8aW5wdXQ+JykuYWRkQ2xhc3MoJ1dpa2lwbHVzLUludGVyQm94LUlucHV0JykuYXR0cignaWQnLCAnV2lraXBsdXMtU1ItU3VtbWFyeScpO1xuXHRcdGNvbnN0IGFwcGx5QnRuID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1CdG4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVNSLUFwcGx5Jylcblx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdzdWJtaXQnKSk7XG5cdFx0Y29uc3QgY2FuY2VsQnRuID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1CdG4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVNSLUNhbmNlbCcpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnY2FuY2VsJykpO1xuXHRcdGNvbnN0IGNvbnRpbnVlQnRuID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFkZENsYXNzKCdXaWtpcGx1cy1JbnRlckJveC1CdG4nKVxuXHRcdFx0LmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVNSLUNvbnRpbnVlJylcblx0XHRcdC50ZXh0KGkxOG4udHJhbnNsYXRlKCdjb250aW51ZScpKTtcblx0XHRjb25zdCBjb250ZW50ID0gJCgnPGRpdj4nKVxuXHRcdFx0LmFwcGVuZChpbnB1dClcblx0XHRcdC5hcHBlbmQoc3VtbWFyeUlucHV0VGl0bGUpXG5cdFx0XHQuYXBwZW5kKHN1bW1hcnlJbnB1dClcblx0XHRcdC5hcHBlbmQoJCgnPGhyPicpKVxuXHRcdFx0LmFwcGVuZChhcHBseUJ0bilcblx0XHRcdC5hcHBlbmQoY2FuY2VsQnRuKTsgLy/mi7zmjqVcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmNyZWF0ZURpYWxvZ0JveChpMThuLnRyYW5zbGF0ZSgncmVkaXJlY3RfZGVzYycpLCBjb250ZW50LCA2MDApO1xuXHRcdGFwcGx5QnRuLm9uKCdjbGljaycsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IHRpdGxlID0gJCgnI1dpa2lwbHVzLVNSLVRpdGxlJykudmFsKCk7XG5cdFx0XHRjb25zdCBzdW1tYXJ5ID0gJCgnI1dpa2lwbHVzLVNSLVN1bW1hcnknKS52YWwoKTtcblx0XHRcdCQoJy5XaWtpcGx1cy1JbnRlckJveC1Db250ZW50JykuaHRtbChcblx0XHRcdFx0YDxkaXYgY2xhc3M9XCJXaWtpcGx1cy1CYW5uZXJcIj4ke2kxOG4udHJhbnNsYXRlKCdzdWJtaXR0aW5nX2VkaXQnKX08L2Rpdj5gXG5cdFx0XHQpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgb25FZGl0KHtcblx0XHRcdFx0XHR0aXRsZSxcblx0XHRcdFx0XHRzdW1tYXJ5LFxuXHRcdFx0XHRcdGZvcmNlT3ZlcndyaXRlOiBmYWxzZSxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS50ZXh0KGkxOG4udHJhbnNsYXRlKCdyZWRpcmVjdF9zYXZlZCcpKTtcblx0XHRcdFx0dGhpcy5oaWRlU2ltcGxlUmVkaXJlY3RQYW5lbChkaWFsb2cpO1xuXHRcdFx0XHRvblN1Y2Nlc3Moe3RpdGxlfSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykuY3NzKCdiYWNrZ3JvdW5kJywgJ3JnYmEoMjE4LCAxNDIsIDE2NywgMC42NSknKTtcblx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLnRleHQoZXJyb3IubWVzc2FnZSk7XG5cdFx0XHRcdGlmIChlcnJvci5jb2RlID09PSAnYXJ0aWNsZWV4aXN0cycpIHtcblx0XHRcdFx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gtQ29udGVudCcpLmFwcGVuZCgkKCc8aHI+JykpLmFwcGVuZChjb250aW51ZUJ0bikuYXBwZW5kKGNhbmNlbEJ0bik7XG5cdFx0XHRcdFx0Y2FuY2VsQnRuLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuaGlkZVNpbXBsZVJlZGlyZWN0UGFuZWwoZGlhbG9nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRjb250aW51ZUJ0bi5vbignY2xpY2snLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHQkKCcuV2lraXBsdXMtSW50ZXJCb3gtQ29udGVudCcpLmh0bWwoXG5cdFx0XHRcdFx0XHRcdGA8ZGl2IGNsYXNzPVwiV2lraXBsdXMtQmFubmVyXCI+JHtpMThuLnRyYW5zbGF0ZSgnc3VibWl0dGluZ19lZGl0Jyl9PC9kaXY+YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9uRWRpdCh7XG5cdFx0XHRcdFx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHRcdFx0XHRmb3JjZU92ZXJ3cml0ZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdCQoJy5XaWtpcGx1cy1CYW5uZXInKS50ZXh0KGkxOG4udHJhbnNsYXRlKCdyZWRpcmVjdF9zYXZlZCcpKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlU2ltcGxlUmVkaXJlY3RQYW5lbChkaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHRvblN1Y2Nlc3Moe3RpdGxlfSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHQkKCcuV2lraXBsdXMtQmFubmVyJykuY3NzKCdiYWNrZ3JvdW5kJywgJ3JnYmEoMjE4LCAxNDIsIDE2NywgMC42NSknKTtcblx0XHRcdFx0XHRcdFx0JCgnLldpa2lwbHVzLUJhbm5lcicpLnRleHQoZXJyb3IubWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRjYW5jZWxCdG4ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0dGhpcy5oaWRlU2ltcGxlUmVkaXJlY3RQYW5lbChkaWFsb2cpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIOmakOiXj+W/q+mAn+mHjeWumuWQkeW8ueeql1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGRpYWxvZ1xuXHQgKi9cblx0aGlkZVNpbXBsZVJlZGlyZWN0UGFuZWwoZGlhbG9nID0gJCgnYm9keScpKSB7XG5cdFx0ZGlhbG9nLmZpbmQoJy5XaWtpcGx1cy1JbnRlckJveC1DbG9zZScpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdH1cblxuXHRzaG93U2V0dGluZ3NQYW5lbCh7b25TdWJtaXQgPSAoKSA9PiB7fX0gPSB7fSkge1xuXHRcdGNvbnN0IGlucHV0ID0gJCgnPHRleHRhcmVhPicpLmF0dHIoJ2lkJywgJ1dpa2lwbHVzLVNldHRpbmctSW5wdXQnKS5hdHRyKCdyb3dzJywgJzEwJyk7XG5cdFx0Y29uc3QgYXBwbHlCdG4gPSAkKCc8ZGl2PicpXG5cdFx0XHQuYWRkQ2xhc3MoJ1dpa2lwbHVzLUludGVyQm94LUJ0bicpXG5cdFx0XHQuYXR0cignaWQnLCAnV2lraXBsdXMtU2V0dGluZy1BcHBseScpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnc3VibWl0JykpO1xuXHRcdGNvbnN0IGNhbmNlbEJ0biA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnV2lraXBsdXMtSW50ZXJCb3gtQnRuJylcblx0XHRcdC5hdHRyKCdpZCcsICdXaWtpcGx1cy1TZXR0aW5nLUNhbmNlbCcpXG5cdFx0XHQudGV4dChpMThuLnRyYW5zbGF0ZSgnY2FuY2VsJykpO1xuXHRcdGNvbnN0IGNvbnRlbnQgPSAkKCc8ZGl2PicpLmFwcGVuZChpbnB1dCkuYXBwZW5kKCQoJzxocj4nKSkuYXBwZW5kKGFwcGx5QnRuKS5hcHBlbmQoY2FuY2VsQnRuKTsgLy/mi7zmjqVcblxuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlRGlhbG9nQm94KGkxOG4udHJhbnNsYXRlKCd3aWtpcGx1c19zZXR0aW5nc19kZXNjJyksIGNvbnRlbnQsIDYwMCwgKCkgPT4ge1xuXHRcdFx0aWYgKGxvY2FsU3RvcmFnZS5XaWtpcGx1c19TZXR0aW5ncykge1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtU2V0dGluZy1JbnB1dCcpLnZhbChsb2NhbFN0b3JhZ2UuV2lraXBsdXNfU2V0dGluZ3MpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuV2lraXBsdXNfU2V0dGluZ3MpO1xuXHRcdFx0XHRcdCQoJyNXaWtpcGx1cy1TZXR0aW5nLUlucHV0JykudmFsKEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCAyKSk7XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdC8vIGlnbm9yZVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQkKCcjV2lraXBsdXMtU2V0dGluZy1JbnB1dCcpLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bi50cmFuc2xhdGUoJ3dpa2lwbHVzX3NldHRpbmdzX3BsYWNlaG9sZGVyJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFwcGx5QnRuLm9uKCdjbGljaycsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IHNhdmVkQmFubmVyID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnV2lraXBsdXMtQmFubmVyJykudGV4dChpMThuLnRyYW5zbGF0ZSgnd2lraXBsdXNfc2V0dGluZ3Nfc2F2ZWQnKSk7XG5cdFx0XHRjb25zdCBzZXR0aW5ncyA9ICQoJyNXaWtpcGx1cy1TZXR0aW5nLUlucHV0JykudmFsKCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvblN1Ym1pdCh7c2V0dGluZ3N9KTtcblx0XHRcdFx0JCgnLldpa2lwbHVzLUludGVyQm94LUNvbnRlbnQnKS5odG1sKCcnKS5hcHBlbmQoc2F2ZWRCYW5uZXIpO1xuXHRcdFx0XHRhd2FpdCBzbGVlcCgxNTAwKTtcblx0XHRcdFx0dGhpcy5oaWRlU2V0dGluZ3NQYW5lbChkaWFsb2cpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdE5vdGlmaWNhdGlvbi5lcnJvcihpMThuLnRyYW5zbGF0ZSgnd2lraXBsdXNfc2V0dGluZ3NfZ3JhbW1hcl9lcnJvcicpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjYW5jZWxCdG4ub24oJ2NsaWNrJywgKCkgPT4ge1xuXHRcdFx0dGhpcy5oaWRlU2V0dGluZ3NQYW5lbChkaWFsb2cpO1xuXHRcdH0pO1xuXHR9XG5cblx0aGlkZVNldHRpbmdzUGFuZWwoZGlhbG9nID0gJCgnYm9keScpKSB7XG5cdFx0ZGlhbG9nLmZpbmQoJy5XaWtpcGx1cy1JbnRlckJveC1DbG9zZScpLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdH1cblxuXHRiaW5kUHJlbG9hZEV2ZW50cyhvblByZWxvYWQpIHtcblx0XHQkKCcjdG9jJylcblx0XHRcdC5jaGlsZHJlbigndWwnKVxuXHRcdFx0LmZpbmQoJ2EnKVxuXHRcdFx0LmVhY2goZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0JCh0aGlzKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdCQodGhpcykub2ZmKCdtb3VzZW92ZXInKTtcblx0XHRcdFx0XHRvblByZWxvYWQoe1xuXHRcdFx0XHRcdFx0c2VjdGlvbk51bWJlcjogaSArIDEsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFVJKCk7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLW5vY2hlY2tcbmNsYXNzIFNldHRpbmdzIHtcblx0Z2V0U2V0dGluZyhrZXksIG9iamVjdCA9IHt9KSB7XG5cdFx0Y29uc3QgdyA9IG9iamVjdDtcblx0XHRsZXQgc2V0dGluZ3M7XG5cdFx0dHJ5IHtcblx0XHRcdHNldHRpbmdzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbJ1dpa2lwbHVzX1NldHRpbmdzJ10pO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3VzdG9tU2V0dGluZ0Z1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtzZXR0aW5nc1trZXldfWApO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXN0b21TZXR0aW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAoY3VzdG9tU2V0dGluZ0Z1bmN0aW9uKCkodykgPT09IHRydWUpIHtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN1c3RvbVNldHRpbmdGdW5jdGlvbigpKHcpIHx8IHNldHRpbmdzW2tleV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0dGluZ3Nba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHNldHRpbmdzW2tleV07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsZXQgcmVzdWx0ID0gc2V0dGluZ3Nba2V5XTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKGBcXCR7JHtrZXl9fWAsIG9iamVjdFtrZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgU2V0dGluZ3MoKTtcbiIsICIvKiEgV2lraXBsdXMgLSA0LjAuMTEgfCBFcmlkYW51cyBTb3JhICjlprnnqbrphbEpIHwgQ0MtQlktU0EtNC4wIDxodHRwczovL3F3YmsuY2MvSDpDQy1CWS1TQS00LjA+ICovXG4jV2lraXBsdXMtUXVpY2tlZGl0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG4jV2lraXBsdXMtUXVpY2tlZGl0LVN1bW1hcnktSW5wdXQge1xuICB3aWR0aDogNTAlO1xufVxuLnNraW4tdmVjdG9yICNXaWtpcGx1cy1RdWlja2VkaXQtU3VtbWFyeS1JbnB1dCB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cbiNXaWtpcGx1cy1RdWlja2VkaXQtUHJldmlldy1TdWJtaXQsXG4jV2lraXBsdXMtUXVpY2tlZGl0LVN1Ym1pdCB7XG4gIG1hcmdpbi10b3A6IDVweDtcbiAgcGFkZGluZzogcmV2ZXJ0O1xufVxuI1dpa2lwbHVzLVF1aWNrZWRpdC1QcmV2aWV3LU91dHB1dCB7XG4gIGNsZWFyOiBib3RoO1xuICBtYXJnaW46IDVweCAwO1xufVxuLldpa2lwbHVzLUJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbjogM3B4IDVweDtcbiAgcGFkZGluZzogM3B4IDFlbTtcbiAgd2lkdGg6IGF1dG87XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDJweCAjYWFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5XaWtpcGx1cy1CdG4gYSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcbiAgY29sb3I6ICMwMDA7XG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uV2lraXBsdXMtSW50ZXJCb3gge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjAlO1xuICB6LWluZGV4OiAyMDA7XG4gIHBhZGRpbmc6IDIwcHggMTBweDtcbiAgd2lkdGg6IDYwMHB4O1xuICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNjEsIDE1NCwgMjIwLCAwLjQxKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZjlmNztcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbi5XaWtpcGx1cy1JbnRlckJveC1IZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgdG9wOiAtOHB4O1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzZjZjtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAycmVtO1xuICBjdXJzb3I6IG1vdmU7XG59XG4uV2lraXBsdXMtSW50ZXJCb3gtSW5wdXQge1xuICBtYXJnaW46IDIwcHg7XG4gIHdpZHRoOiA2MCU7XG59XG4uV2lraXBsdXMtSW50ZXJCb3gtQnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbjogYXV0byAzcHg7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5XaWtpcGx1cy1JbnRlckJveC1CdG46aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlOGU4O1xufVxuLldpa2lwbHVzLUludGVyQm94LUNsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBtYXJnaW46IDNweCA3cHg7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uV2lraXBsdXMtSW50ZXJCb3ggbGFiZWwge1xuICBmb250LXNpemU6IDAuOTVyZW07XG59XG4uV2lraXBsdXMtSW50ZXJCb3ggdGFibGUuZGlmZiB7XG4gIHRhYmxlLWxheW91dDogYXV0bztcbn1cbi5XaWtpcGx1cy1JbnRlckJveCB0YWJsZS5kaWZmIC5kaWZmLWFkZGVkbGluZSxcbi5XaWtpcGx1cy1JbnRlckJveCB0YWJsZS5kaWZmIC5kaWZmLWRlbGV0ZWRsaW5lLFxuLldpa2lwbHVzLUludGVyQm94IHRhYmxlLmRpZmYgLmRpZmYtbGluZW5vIHtcbiAgd2lkdGg6IDUwJTtcbn1cbi5XaWtpcGx1cy1JbnRlckJveCB0YWJsZS5kaWZmIC5kaWZmLW1hcmtlciB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uV2lraXBsdXMtQmFubmVyIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxMHB4IDVweDtcbiAgbWluLWhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxOTMsIDIyMiwgMjE0LCAwLjUxKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDJyZW07XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udHMtc2Fucywgc2Fucy1zZXJpZik7XG59XG4uTW9lTm90aWZpY2F0aW9uLW5vdGljZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgbWFyZ2luOiAzcHggNXB4O1xuICBwYWRkaW5nOiAwIDVweDtcbiAgd2lkdGg6IGF1dG87XG4gIGJveC1zaGFkb3c6IDAgM3B4IDNweCAjYWFhO1xuICBmb250LXNpemU6IDFyZW07XG59XG4uTW9lTm90aWZpY2F0aW9uLW5vdGljZSBzcGFuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IDNweCBhdXRvIDNweCAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udHMtc2Fucywgc2Fucy1zZXJpZik7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4uTW9lTm90aWZpY2F0aW9uLW5vdGljZS1zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjOGRkYTkzO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOGEwMDtcbn1cbi5Nb2VOb3RpZmljYXRpb24tbm90aWNlLXdhcm5pbmcge1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNmZmRmMDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRiZDAwO1xufVxuLk1vZU5vdGlmaWNhdGlvbi1ub3RpY2Utd2FybmluZyBzcGFuIHtcbiAgY29sb3I6ICMwMDA7XG59XG4uTW9lTm90aWZpY2F0aW9uLW5vdGljZS1lcnJvciB7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2U3MTcxNztcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiMDBlMDY7XG59XG4jTW9lTm90aWZpY2F0aW9uIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDMwcHg7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDcxMztcbiAgbWluLXdpZHRoOiAyMCU7XG59XG4iLCAiLyoqXG4gKiBXaWtpcGx1c1xuICogRXJpZGFudXMgU29yYSA8c29yYUBzb3VuZC5tb2U+XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgUGFnZSBmcm9tICcuL2NvcmUvcGFnZSc7XG5pbXBvcnQgVUkgZnJvbSAnLi9jb3JlL3VpJztcbmltcG9ydCBOb3RpZmljYXRpb24gZnJvbSAnLi9jb3JlL25vdGlmaWNhdGlvbic7XG5pbXBvcnQgV2lraSBmcm9tICcuL3NlcnZpY2VzL3dpa2knO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gJy4vdXRpbHMvc2V0dGluZ3MnO1xuaW1wb3J0IExvZyBmcm9tICcuL3V0aWxzL2xvZyc7XG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4vdXRpbHMvY29uc3RhbnRzJztcbmltcG9ydCBpMThuIGZyb20gJy4vdXRpbHMvaTE4bic7XG5pbXBvcnQgJy4vd2lraXBsdXMubGVzcyc7XG5cbiQoYXN5bmMgKCkgPT4ge1xuXHRjb25zdCBQYWdlcyA9IHt9O1xuXHRjb25zdCBpc0N1cnJlbnRQYWdlRW1wdHkgPSAkKCcubm9hcnRpY2xldGV4dCcpLmxlbmd0aCA+IDAgJiYgQ29uc3RhbnRzLmFydGljbGVJZCA9PT0gMDtcblxuXHQvKipcblx0ICogR2V0IHBhZ2UgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gcGFyYW1zXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwYXJhbXMucmV2aXNpb25JZCDpobXpnaLkv67orqLniYjmnKzlj7dcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy50aXRsZSDpobXpnaLmoIfpophcblx0ICovXG5cdGNvbnN0IGdldFBhZ2UgPSBhc3luYyAoe3JldmlzaW9uSWQsIHRpdGxlfSkgPT4ge1xuXHRcdGlmIChQYWdlc1tyZXZpc2lvbklkXSkge1xuXHRcdFx0cmV0dXJuIFBhZ2VzW3JldmlzaW9uSWRdO1xuXHRcdH1cblx0XHRjb25zdCBuZXdQYWdlID0gbmV3IFBhZ2Uoe1xuXHRcdFx0cmV2aXNpb25JZCxcblx0XHRcdHRpdGxlLFxuXHRcdH0pO1xuXHRcdGF3YWl0IG5ld1BhZ2UuaW5pdCgpO1xuXHRcdFBhZ2VzW3JldmlzaW9uSWRdID0gbmV3UGFnZTtcblx0XHRyZXR1cm4gUGFnZXNbcmV2aXNpb25JZF07XG5cdH07XG5cblx0TG9nLmluZm8oYFdpa2lwbHVzIG5vdyBsb2FkaW5nLiBWZXJzaW9uOiAke0NvbnN0YW50cy52ZXJzaW9ufWApO1xuXG5cdGlmICghd2luZG93Lm13KSB7XG5cdFx0Y29uc29sZS5sb2coJ01lZGlhd2lraSBKYXZhU2NyaXB0IG5vdCBsb2FkZWQgb3Igbm90IGEgTWVkaWF3aWtpIHdlYnNpdGUuJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmICghQ29uc3RhbnRzLnVzZXJHcm91cHMuaW5jbHVkZXMoJ2F1dG9jb25maXJtZWQnKSAmJiAhQ29uc3RhbnRzLnVzZXJHcm91cHMuaW5jbHVkZXMoJ2NvbmZpcm1lZCcpKSB7XG5cdFx0Tm90aWZpY2F0aW9uLmVycm9yKGkxOG4udHJhbnNsYXRlKCdub3RfYXV0b2NvbmZpcm1lZF91c2VyJykpO1xuXHRcdExvZy5pbmZvKGkxOG4udHJhbnNsYXRlKCdub3RfYXV0b2NvbmZpcm1lZF91c2VyJykpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghQ29uc3RhbnRzLmlzQXJ0aWNsZSB8fCBDb25zdGFudHMuYWN0aW9uICE9PSAndmlldycpIHtcblx0XHRMb2cuaW5mbygnTm90IGFuIGVkaXRhYmxlIHBhZ2UuIFN0b3AgaW5pdGlhbGl6YXRpb24uJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gSW5pdGlhbGl6ZSBjdXJyZW50IHBhZ2Ug6buY6K6k5Yid5aeL5YyW5b2T5YmN6aG16Z2iXG5cdHdpbmRvdy5fV2lraXBsdXNQYWdlcyA9IFBhZ2VzO1xuXHRjb25zdCBjdXJyZW50UGFnZU5hbWUgPSBDb25zdGFudHMuY3VycmVudFBhZ2VOYW1lO1xuXHRjb25zdCByZXZpc2lvbklkID0gQ29uc3RhbnRzLnJldmlzaW9uSWQ7XG5cdGNvbnN0IGN1cnJlbnRQYWdlID0gYXdhaXQgZ2V0UGFnZSh7XG5cdFx0cmV2aXNpb25JZCxcblx0XHR0aXRsZTogY3VycmVudFBhZ2VOYW1lLFxuXHR9KTtcblxuXHRjb25zdCBoYW5kbGVRdWlja0VkaXRCdXR0b25DbGlja2VkID0gYXN5bmMgKHtzZWN0aW9uTnVtYmVyLCBzZWN0aW9uTmFtZSwgdGFyZ2V0UGFnZU5hbWV9ID0ge30pID0+IHtcblx0XHRjb25zdCBpc090aGVyUGFnZSA9IHRhcmdldFBhZ2VOYW1lICE9PSBjdXJyZW50UGFnZU5hbWU7XG5cdFx0aWYgKGlzT3RoZXJQYWdlICYmIENvbnN0YW50cy5sYXRlc3RSZXZpc2lvbklkICE9PSBDb25zdGFudHMucmV2aXNpb25JZCkge1xuXHRcdFx0Ly8g5Zyo5Y6G5Y+y54mI5pys57yW6L6R5YW25LuW6aG16Z2i5pyJ6Zeu6aKYIOaaguaXtuS4jeaUr+aMgVxuXHRcdFx0TG9nLmVycm9yKCdjcm9zc19wYWdlX2hpc3RvcnlfcmV2aXNpb25fZWRpdF93YXJuaW5nJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJldmlzaW9uSWQgPSBpc090aGVyUGFnZSA/IGF3YWl0IFdpa2kuZ2V0TGF0ZXN0UmV2aXNpb25JZEZvclBhZ2UodGFyZ2V0UGFnZU5hbWUpIDogQ29uc3RhbnRzLnJldmlzaW9uSWQ7XG5cblx0XHRjb25zdCBwYWdlID0gYXdhaXQgZ2V0UGFnZSh7cmV2aXNpb25JZCwgdGl0bGU6IHRhcmdldFBhZ2VOYW1lfSk7XG5cdFx0Y29uc3QgY3VzdG9tU3VtbWFyeSA9IFNldHRpbmdzLmdldFNldHRpbmcoJ2RlZmF1bHRTdW1tYXJ5Jywge1xuXHRcdFx0c2VjdGlvbk5hbWUsXG5cdFx0XHRzZWN0aW9uTnVtYmVyLFxuXHRcdFx0c2VjdGlvblRhcmdldE5hbWU6IHRhcmdldFBhZ2VOYW1lLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHN1bW1hcnkgPVxuXHRcdFx0Y3VzdG9tU3VtbWFyeSB8fFxuXHRcdFx0KHNlY3Rpb25OYW1lXG5cdFx0XHRcdD8gYC8qICR7c2VjdGlvbk5hbWV9ICovICR7aTE4bi50cmFuc2xhdGUoJ2RlZmF1bHRfc3VtbWFyeV9zdWZmaXgnKX1gXG5cdFx0XHRcdDogaTE4bi50cmFuc2xhdGUoJ2RlZmF1bHRfc3VtbWFyeV9zdWZmaXgnKSk7XG5cdFx0Y29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdE5vdGlmaWNhdGlvbi5zdWNjZXNzKGkxOG4udHJhbnNsYXRlKCdsb2FkaW5nJykpO1xuXHRcdH0sIDIwMCk7XG5cdFx0Y29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBhd2FpdCBwYWdlLmdldFdpa2lUZXh0KHtcblx0XHRcdHNlY3Rpb246IHNlY3Rpb25OdW1iZXIsXG5cdFx0fSk7XG5cdFx0Y29uc3QgaXNFZGl0SGlzdG9yeVJldmlzaW9uID0gIWlzT3RoZXJQYWdlICYmIENvbnN0YW50cy5sYXRlc3RSZXZpc2lvbklkICE9PSBDb25zdGFudHMucmV2aXNpb25JZDtcblx0XHRjb25zdCBlc2NUb0V4aXQgPVxuXHRcdFx0U2V0dGluZ3MuZ2V0U2V0dGluZygnZXNjX3RvX2V4aXRfcXVpY2tlZGl0JykgPT09IHRydWUgfHwgLy8g5YW85a656ICB6K6+572ua2V5XG5cdFx0XHRTZXR0aW5ncy5nZXRTZXR0aW5nKCdlc2NfdG9fZXhpdF9xdWlja2VkaXQnKSA9PT0gJ3RydWUnIHx8XG5cdFx0XHRTZXR0aW5ncy5nZXRTZXR0aW5nKCdlc2NUb0V4aXRRdWlja0VkaXQnKSA9PT0gdHJ1ZSB8fFxuXHRcdFx0U2V0dGluZ3MuZ2V0U2V0dGluZygnZXNjVG9FeGl0UXVpY2tFZGl0JykgPT09ICd0cnVlJztcblx0XHRjb25zdCBjdXN0b21FZGl0VGFncyA9IFNldHRpbmdzLmdldFNldHRpbmcoJ2N1c3RvbV9lZGl0X3RhZ3MnKTtcblx0XHRjb25zdCBkZWZhdWx0RWRpdFRhZ3MgPSBbXTtcblx0XHRjb25zdCBlZGl0VGFncyA9IGN1c3RvbUVkaXRUYWdzPy5sZW5ndGggPyBjdXN0b21FZGl0VGFncyA6IGRlZmF1bHRFZGl0VGFncztcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdE5vdGlmaWNhdGlvbi5lbXB0eSgpO1xuXG5cdFx0aWYgKGlzRWRpdEhpc3RvcnlSZXZpc2lvbikge1xuXHRcdFx0Tm90aWZpY2F0aW9uLndhcm5pbmcoaTE4bi50cmFuc2xhdGUoJ2hpc3RvcnlfZWRpdF93YXJuaW5nJykpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNob3VsZFNob3dDcmVhdGVQYWdlVGlwID0gaXNPdGhlclBhZ2UgPyAhcmV2aXNpb25JZCA6IGlzQ3VycmVudFBhZ2VFbXB0eTtcblxuXHRcdFVJLnNob3dRdWlja0VkaXRQYW5lbCh7XG5cdFx0XHR0aXRsZTogYCR7aTE4bi50cmFuc2xhdGUoJ3F1aWNrZWRpdF90b3BidG4nKX0ke1xuXHRcdFx0XHRpc0VkaXRIaXN0b3J5UmV2aXNpb24gPyBpMThuLnRyYW5zbGF0ZSgnaGlzdG9yeV9lZGl0X3dhcm5pbmcnKSA6ICcnXG5cdFx0XHR9YCxcblx0XHRcdGNvbnRlbnQ6IHNob3VsZFNob3dDcmVhdGVQYWdlVGlwID8gaTE4bi50cmFuc2xhdGUoJ2NyZWF0ZV9wYWdlX3RpcCcpIDogc2VjdGlvbkNvbnRlbnQsXG5cdFx0XHRzdW1tYXJ5LFxuXHRcdFx0b25CYWNrOiBVSS5oaWRlUXVpY2tFZGl0UGFuZWwsXG5cdFx0XHRvblBhcnNlOiAod2lraVRleHQpID0+IHtcblx0XHRcdFx0cmV0dXJuIHBhZ2UucGFyc2VXaWtpVGV4dCh3aWtpVGV4dCk7XG5cdFx0XHR9LFxuXHRcdFx0b25FZGl0OiBhc3luYyAoe2NvbnRlbnQsIHN1bW1hcnksIGlzTWlub3JFZGl0fSkgPT4ge1xuXHRcdFx0XHRjb25zdCBlZGl0UGF5bG9hZCA9IHtcblx0XHRcdFx0XHRjb250ZW50LFxuXHRcdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHRcdC4uLihzZWN0aW9uTnVtYmVyID09PSAtMSA/IHt9IDoge3NlY3Rpb246IHNlY3Rpb25OdW1iZXJ9KSxcblx0XHRcdFx0XHRcdC4uLihlZGl0VGFncy5sZW5ndGggPyB7dGFnczogZWRpdFRhZ3Muam9pbignfCcpfSA6IHt9KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoaXNNaW5vckVkaXQpIHtcblx0XHRcdFx0XHRlZGl0UGF5bG9hZC5jb25maWcubWlub3IgPSAndHJ1ZSc7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWRpdFBheWxvYWQuY29uZmlnLm5vdG1pbm9yID0gJ3RydWUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGF3YWl0IHBhZ2UuZWRpdChlZGl0UGF5bG9hZCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXNjRXhpdDogZXNjVG9FeGl0LFxuXHRcdH0pO1xuXHR9O1xuXG5cdGNvbnN0IGhhbmRsZVNpbXBsZVJlZGlyZWN0QnV0dG9uQ2xpY2tlZCA9IGFzeW5jICgpID0+IHtcblx0XHRVSS5zaG93U2ltcGxlUmVkaXJlY3RQYW5lbCh7XG5cdFx0XHRvbkVkaXQ6IGFzeW5jICh7dGl0bGUsIHN1bW1hcnksIGZvcmNlT3ZlcndyaXRlID0gZmFsc2V9KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhZ2UgPSBhd2FpdCBnZXRQYWdlKHt0aXRsZX0pO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50UGFnZU5hbWUgPSBDb25zdGFudHMuY3VycmVudFBhZ2VOYW1lO1xuXHRcdFx0XHRjb25zdCBjb250ZW50bW9kZWwgPSBwYWdlLmNvbnRlbnRtb2RlbDtcblx0XHRcdFx0aWYgKHN1bW1hcnkgPT0gJycpIHtcblx0XHRcdFx0XHRzdW1tYXJ5ID0gaTE4bi50cmFuc2xhdGUoJ3JlZGlyZWN0X2Zyb21fc3VtbWFyeScsIFt0aXRsZSwgY3VycmVudFBhZ2VOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY29udGVudCA9ICgoKSA9PiB7XG5cdFx0XHRcdFx0bGV0IGNvbnRlbnQ7XG5cdFx0XHRcdFx0c3dpdGNoIChjb250ZW50bW9kZWwpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2phdmFzY3JpcHQnOlxuXHRcdFx0XHRcdFx0XHRjb250ZW50ID0gYC8qICNSRURJUkVDVCAqL213LmxvYWRlci5sb2FkKFwiJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYXRpb24uaG9zdFxuXHRcdFx0XHRcdFx0XHR9JHtDb25zdGFudHMuc2NyaXB0UGF0aH0vaW5kZXgucGhwP3RpdGxlPSR7bXcudXRpbC53aWtpVXJsZW5jb2RlKFxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlTmFtZVxuXHRcdFx0XHRcdFx0XHQpfSZhY3Rpb249cmF3JmN0eXBlPXRleHQvamF2YXNjcmlwdFwiKTtgO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2Nzcyc6XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQgPSBgLyogI1JFRElSRUNUICovQGltcG9ydCB1cmwoJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYXRpb24uaG9zdFxuXHRcdFx0XHRcdFx0XHR9JHtDb25zdGFudHMuc2NyaXB0UGF0aH0vaW5kZXgucGhwP3RpdGxlPSR7bXcudXRpbC53aWtpVXJsZW5jb2RlKFxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlTmFtZVxuXHRcdFx0XHRcdFx0XHQpfSZhY3Rpb249cmF3JmN0eXBlPXRleHQvY3NzKTtgO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ1NjcmlidW50byc6XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQgPSBgcmV0dXJuIHJlcXVpcmUgW1ske2N1cnJlbnRQYWdlTmFtZX1dXWA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnd2lraXRleHQnOlxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Y29udGVudCA9IGAjUkVESVJFQ1QgW1ske2N1cnJlbnRQYWdlTmFtZX1dXWA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdFx0fSkoKTtcblx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcblx0XHRcdFx0XHRjb250ZW50OiBjb250ZW50LFxuXHRcdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoIWZvcmNlT3ZlcndyaXRlKSB7XG5cdFx0XHRcdFx0cGF5bG9hZC5jb25maWcuY3JlYXRlb25seSA9ICd0cnVlJztcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBwYWdlLmVkaXQocGF5bG9hZCk7XG5cdFx0XHR9LFxuXHRcdFx0b25TdWNjZXNzOiAoe3RpdGxlfSkgPT4ge1xuXHRcdFx0XHRsb2NhdGlvbi5ocmVmID0gQ29uc3RhbnRzLmFydGljbGVQYXRoLnJlcGxhY2UoL1xcJDEvZ2ksIHRpdGxlKTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH07XG5cblx0Y29uc3QgaGFuZGxlU2V0dGluZ3NCdXR0b25DbGlja2VkID0gYXN5bmMgKCkgPT4ge1xuXHRcdFVJLnNob3dTZXR0aW5nc1BhbmVsKHtcblx0XHRcdG9uU3VibWl0OiAoe3NldHRpbmdzfSkgPT4ge1xuXHRcdFx0XHRKU09OLnBhcnNlKHNldHRpbmdzKTtcblx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1dpa2lwbHVzX1NldHRpbmdzJywgc2V0dGluZ3MpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fTtcblxuXHRjb25zdCBoYW5kbGVQcmVsb2FkID0gYXN5bmMgKHtzZWN0aW9uTnVtYmVyfSkgPT4ge1xuXHRcdGF3YWl0IGN1cnJlbnRQYWdlLmdldFdpa2lUZXh0KHtcblx0XHRcdHNlY3Rpb246IHNlY3Rpb25OdW1iZXIsXG5cdFx0fSk7XG5cdH07XG5cblx0VUkuaW5zZXJ0VG9wUXVpY2tFZGl0RW50cnkoaGFuZGxlUXVpY2tFZGl0QnV0dG9uQ2xpY2tlZCk7XG5cdFVJLmluc2VydFNlY3Rpb25RdWlja0VkaXRFbnRyaWVzKGhhbmRsZVF1aWNrRWRpdEJ1dHRvbkNsaWNrZWQpO1xuXHRVSS5pbnNlcnRMaW5rRWRpdEVudHJpZXMoaGFuZGxlUXVpY2tFZGl0QnV0dG9uQ2xpY2tlZCk7XG5cdFVJLmluc2VydFNpbXBsZVJlZGlyZWN0QnV0dG9uKGhhbmRsZVNpbXBsZVJlZGlyZWN0QnV0dG9uQ2xpY2tlZCk7XG5cdFVJLmluc2VydFNldHRpbmdzUGFuZWxCdXR0b24oaGFuZGxlU2V0dGluZ3NCdXR0b25DbGlja2VkKTtcblx0VUkuYmluZFByZWxvYWRFdmVudHMoaGFuZGxlUHJlbG9hZCk7XG59KTtcblxuZXhwb3J0IHt9O1xuIiwgInZvaWQgKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0Ly8gV2FpdCBmb3IgdGhlIERPTSB0byBiZSByZWFkeSBiZWZvcmUgYXR0YWNoaW5nIHRoZSByZXNpemUgbGlzdGVuZXJcblx0YXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpOiB2b2lkID0+IHtcblx0XHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2xvYWRpbmcnKSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiByZXNvbHZlKCksIHtvbmNlOiB0cnVlfSk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblxuXHQkKHdpbmRvdykub24oJ3Jlc2l6ZScsICgpOiB2b2lkID0+IHtcblx0XHRjb25zdCB3aW5kb3dXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xuXHRcdGNvbnN0ICR3aWtpcGx1c0ludGVyYm94ID0gJGJvZHkuZmluZCgnLldpa2lwbHVzLUludGVyQm94Jyk7XG5cdFx0aWYgKCR3aWtpcGx1c0ludGVyYm94KSB7XG5cdFx0XHQkd2lraXBsdXNJbnRlcmJveC5jc3MoJ21heC13aWR0aCcsIGBjYWxjKCR7d2luZG93V2lkdGh9cHggLSAyZW0pYCk7XG5cdFx0fVxuXHR9KTtcbn0pKCk7XG4iLCAiaW1wb3J0ICcuL1dpa2lwbHVzLmxlc3MnO1xuXG4oZnVuY3Rpb24gV2lraXBsdXMoKTogdm9pZCB7XG5cdGNvbnN0IHt3Z0FjdGlvbiwgd2dJc0FydGljbGV9ID0gbXcuY29uZmlnLmdldCgpO1xuXHRpZiAod2dBY3Rpb24gIT09ICd2aWV3JyB8fCAhd2dJc0FydGljbGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBsb2FkZXIgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0Y29uc3Qgeyd2aXN1YWxlZGl0b3ItZW5hYmxlJzogaXNWZUVuYWJsZX0gPSBtdy51c2VyLm9wdGlvbnMuZ2V0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0XHQvKiBzZWUgPGh0dHBzOi8vZ2l0aHViLmNvbS9XaWtpcGx1cy9XaWtpcGx1cy9pc3N1ZXMvNjU+ICovXG5cdFx0aWYgKGlzVmVFbmFibGUpIHtcblx0XHRcdGF3YWl0IG13LmxvYWRlci51c2luZygnZXh0LnZpc3VhbEVkaXRvci5jb3JlJyk7XG5cdFx0fVxuXG5cdFx0YXdhaXQgaW1wb3J0KCcuL21vZHVsZXMvaW5kZXgnKTtcblx0XHRhd2FpdCBpbXBvcnQoJy4vcmVzaXplJyk7XG5cdH07XG5cblx0dm9pZCBsb2FkZXIoKTtcbn0pKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNkZBQUFBLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUSxTQUFVLElBQUk7QUFDeEIsYUFBTyxNQUFNLEdBQUcsU0FBUyxRQUFRO0FBQUEsSUFDbkM7QUFHQSxJQUFBQSxRQUFPO0FBQUEsSUFFTCxNQUFNLE9BQU8sY0FBYyxZQUFZLFVBQVUsS0FDakQsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNO0FBQUEsSUFFekMsTUFBTSxPQUFPLFFBQVEsWUFBWSxJQUFJLEtBQ3JDLE1BQU0sT0FBTyxVQUFVLFlBQVksTUFBTSxLQUN6QyxNQUFNLE9BQU8sV0FBUSxZQUFZLE9BQUk7QUFBQSxJQUVwQywyQkFBWTtBQUFF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QUksSUFBRSxDQUFDO0FBQUUsb0JBQUcsTUFBSSxFQUFFLEtBQUVEO0FBQUEsb0JBQU8sVUFBUSxJQUFFLEtBQUssS0FBSyxDQUFDLEdBQUUsSUFBRSxJQUFFLEtBQUssSUFBSUUsS0FBRSxDQUFDLElBQUUsS0FBSyxLQUFLLElBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLEdBQUUsS0FBS0YsR0FBRSxDQUFDLEtBQUcsS0FBSyxJQUFJRSxLQUFFLENBQUMsSUFBRSxJQUFFLEtBQUdFLEdBQUUsQ0FBQyxJQUFFLENBQUM7QUFBRSx1QkFBTztBQUFBLGNBQUM7QUFBQyxrQkFBSSxJQUFFLDJCQUFVO0FBQUMseUJBQVNMLEdBQUVBLElBQUVDLElBQUU7QUFBQywyQkFBUUMsS0FBRSxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxDQUFDLEdBQUVHLEtBQUUsR0FBRUEsS0FBRSxHQUFFQSxLQUFJLFVBQVFGLEtBQUUsR0FBRUEsS0FBRSxHQUFFQSxLQUFJLFVBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLENBQUFELEdBQUVHLEVBQUMsRUFBRUYsRUFBQyxLQUFHRixHQUFFSSxFQUFDLEVBQUUsQ0FBQyxJQUFFTCxHQUFFLENBQUMsRUFBRUcsRUFBQztBQUFFLHlCQUFPRDtBQUFBLGdCQUFDO0FBQUMseUJBQVNELEdBQUVELElBQUU7QUFBQyx5QkFBTyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBR0EsR0FBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLEtBQUdBLEdBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxLQUFHQSxHQUFFLENBQUMsRUFBRSxDQUFDO0FBQUEsZ0JBQUM7QUFBQyx5QkFBU0UsR0FBRUEsSUFBRUcsSUFBRUYsSUFBRSxHQUFFLEdBQUU7QUFBQywyQkFBUSxJQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksR0FBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQztBQUFFLDJCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxVQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUdELEdBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFBRSxzQkFBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsQ0FBQztBQUFFLG9CQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsSUFBRSxJQUFFLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLElBQUUsSUFBRSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxJQUFFLEtBQUcsSUFBRSxJQUFFLElBQUUsSUFBRyxJQUFFRixHQUFFLEdBQUUsQ0FBQztBQUFFLHNCQUFJLElBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUMsQ0FBQztBQUFFLGtCQUFBRyxHQUFFLENBQUMsTUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUVBLEdBQUUsQ0FBQyxHQUFFLElBQUVILEdBQUUsR0FBRSxDQUFDLElBQUdHLEdBQUUsQ0FBQyxNQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRUEsR0FBRSxDQUFDLEdBQUUsSUFBRUgsR0FBRSxHQUFFLENBQUMsSUFBR0csR0FBRSxDQUFDLE1BQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUMsR0FBRSxJQUFFSCxHQUFFLEdBQUUsQ0FBQztBQUFHLDJCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxVQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxHQUFFLENBQUMsRUFBRSxDQUFDLEtBQUdLLEdBQUUsQ0FBQztBQUFFLHlCQUFPSixHQUFFLENBQUMsSUFBRSxDQUFD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LElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsQ0FBQyxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsQ0FBQyxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxDQUFDLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLENBQUMsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsR0FBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxHQUFFRCxHQUFFLENBQUMsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxFQUFFLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLEdBQUVELEdBQUUsQ0FBQyxJQUFFQyxHQUFFLEVBQUUsSUFBRUQsR0FBRSxDQUFDLElBQUVDLEdBQUUsRUFBRSxJQUFFRCxHQUFFLEVBQUUsSUFBRUMsR0FBRSxFQUFFLElBQUVELEdBQUUsRUFBRSxJQUFFQyxHQUFFLEVBQUUsQ0FBQztBQUFBLGNBQUM7QUFBQyx1QkFBUyxFQUFFRCxJQUFFO0FBQUMsb0JBQUlDLEtBQUVELEdBQUUsT0FBSztBQUFFLHlCQUFRQSxHQUFFLE9BQUssS0FBRyxPQUFLQSxHQUFFLFFBQU0sS0FBRyxPQUFLQSxHQUFFLFFBQU0sT0FBSyxJQUFFLEtBQUssTUFBSUM7QUFBQSxjQUFDO0FBQUMsdUJBQVMsRUFBRUQsSUFBRTtBQUFDLHdCQUFPQSxHQUFFLEdBQUU7QUFBQSxrQkFBQyxLQUFJO0FBQVUsd0JBQUlDLEtBQUUsRUFBRUQsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEtBQUssSUFBSUMsRUFBQyxHQUFFLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEtBQUssSUFBSUEsRUFBQyxHQUFFLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBVSx3QkFBSUEsS0FBRSxFQUFFRCxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxLQUFLLElBQUlDLEVBQUMsR0FBRSxHQUFFLENBQUMsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEtBQUssSUFBSUEsRUFBQyxHQUFFLEdBQUUsS0FBSyxJQUFJQSxFQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFBLGtCQUFTLEtBQUk7QUFBVSx3QkFBSUEsS0FBRSxFQUFFRCxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxLQUFLLElBQUlDLEVBQUMsR0FBRSxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEdBQUUsQ0FBQyxLQUFLLElBQUlBLEVBQUMsR0FBRSxLQUFLLElBQUlBLEVBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFXLHdCQUFJQyxLQUFFRixHQUFFLEVBQUUsQ0FBQyxHQUFFSyxLQUFFTCxHQUFFLEVBQUUsQ0FBQyxHQUFFSSxLQUFFSixHQUFFLEVBQUUsQ0FBQyxHQUFFQyxLQUFFLEVBQUVELEdBQUUsRUFBRSxDQUFDLENBQUMsR0FBRU0sS0FBRUosS0FBRUEsS0FBRUcsS0FBRUEsS0FBRUQsS0FBRUE7QUFBRSx3QkFBRyxNQUFJRSxHQUFFLENBQUFKLEtBQUUsR0FBRUcsS0FBRSxHQUFFRCxLQUFFO0FBQUEsNkJBQVUsTUFBSUUsSUFBRTtBQUFDLDBCQUFJQyxLQUFFLEtBQUssS0FBS0QsRUFBQztBQUFFLHNCQUFBSixNQUFHSyxJQUFFRixNQUFHRSxJQUFFSCxNQUFHRztBQUFBLG9CQUFDO0FBQUMsd0JBQUlDLEtBQUUsS0FBSyxJQUFJUCxLQUFFLENBQUMsR0FBRSxJQUFFTyxLQUFFLEtBQUssSUFBSVAsS0FBRSxDQUFDLEdBQUUsSUFBRU8sS0FBRUE7QUFBRSwyQkFBTSxDQUFDLElBQUUsS0FBR0gsS0FBRUEsS0FBRUQsS0FBRUEsTUFBRyxHQUFFLEtBQUdGLEtBQUVHLEtBQUUsSUFBRUQsS0FBRSxJQUFHLEtBQUdGLEtBQUVFLEtBQUUsSUFBRUMsS0FBRSxJQUFHLEdBQUUsS0FBR0gsS0FBRUcsS0FBRSxJQUFFRCxLQUFFLElBQUcsSUFBRSxLQUFHRixLQUFFQSxLQUFFRSxLQUFFQSxNQUFHLEdBQUUsS0FBR0MsS0FBRUQsS0FBRSxJQUFFRixLQUFFLElBQUcsR0FBRSxLQUFHQSxLQUFFRSxLQUFFLElBQUVDLEtBQUUsSUFBRyxLQUFHQSxLQUFFRCxLQUFFLElBQUVGLEtBQUUsSUFBRyxJQUFFLEtBQUdBLEtBQUVBLEtBQUVHLEtBQUVBLE1BQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVEsMkJBQU0sQ0FBQ0wsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVMsMkJBQU0sQ0FBQ0EsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUywyQkFBTSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFTLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRUEsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxrQkFBRSxLQUFJO0FBQVUsMkJBQU0sQ0FBQ0EsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFQSxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVBLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFPLHdCQUFJLElBQUUsRUFBRUEsR0FBRSxFQUFFLENBQUMsQ0FBQyxHQUFFLElBQUUsRUFBRUEsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLDJCQUFNLENBQUMsR0FBRSxLQUFLLElBQUksQ0FBQyxHQUFFLEdBQUUsR0FBRSxLQUFLLElBQUksQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUSx3QkFBSUMsS0FBRSxFQUFFRCxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEtBQUssSUFBSUMsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBUSx3QkFBSUEsS0FBRSxFQUFFRCxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsMkJBQU0sQ0FBQyxHQUFFLEtBQUssSUFBSUMsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFFLEtBQUk7QUFBWSx3QkFBSUMsS0FBRUYsR0FBRSxFQUFFLENBQUMsRUFBRSxNQUFJLEdBQUVLLEtBQUVMLEdBQUUsRUFBRSxDQUFDLEVBQUUsTUFBSTtBQUFFLDJCQUFNLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUVFLElBQUVHLElBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFhLHdCQUFJSCxLQUFFRixHQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQUk7QUFBRSwyQkFBTSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFRSxJQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsa0JBQUUsS0FBSTtBQUFhLHdCQUFJRyxLQUFFTCxHQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQUk7QUFBRSwyQkFBTSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFF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QUUsQ0FBQyxLQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRUcsR0FBRSxHQUFFRSxHQUFFSixHQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUcsSUFBRSxDQUFDLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxzQkFBSSxJQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRSxDQUFDLEdBQUUsSUFBRSxDQUFDO0FBQUUsb0JBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUUsQ0FBQyxDQUFDO0FBQUUsc0JBQUksSUFBRSxDQUFDO0FBQUUsb0JBQUUsS0FBS0ssR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVGLEdBQUUsRUFBRSxDQUFDLENBQUM7QUFBRSxzQkFBSSxJQUFFLENBQUM7QUFBRSxvQkFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUtGLEdBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFFSyxHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBS0QsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVGLEdBQUUsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsR0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsS0FBS0YsR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLElBQUVLLEdBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxLQUFLTCxHQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRUssR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxFQUFFLEtBQUtELEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFFRixHQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEdBQUUsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDO0FBQUUsc0JBQUksSUFBRUksR0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLHNCQUFHTixHQUFFLEVBQUUsQ0FBQyxHQUFFLENBQUMsSUFBRSxFQUFFLFVBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFJLEdBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHO0FBQUcsc0JBQUksR0FBRSxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUU7QUFBRSx5QkFBTyxJQUFFLFFBQU0sSUFBRSxNQUFHLEtBQUssS0FBSyxDQUFDLEdBQUUsSUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxHQUFFLE9BQUksQ0FBQyxLQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFFLElBQUUsS0FBSyxLQUFLLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFLENBQUMsT0FBSSxJQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxDQUFDLEtBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxJQUFFLElBQUUsS0FBSyxLQUFLLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxJQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxHQUFFLE9BQUksSUFBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFHLElBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBRyxDQUFDLE1BQUksSUFBRSxJQUFFLEtBQUssS0FBSyxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUs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QUcsRUFBRSxDQUFBSyxLQUFFO0FBQUEsNkJBQVUsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEtBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQUEsS0FBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFBQSx5QkFBTTtBQUFDLDBCQUFHLENBQUMsRUFBRSxDQUFDLEtBQUcsQ0FBQyxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsR0FBRTtBQUFDLDRCQUFHLENBQUNKLEdBQUU7QUFBTyw0QkFBSSxJQUFFLEVBQUVKLElBQUVDLEVBQUM7QUFBRSw0QkFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxDQUFDLENBQUMsVUFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFFO0FBQUEsc0JBQUs7QUFBQyxzQkFBQU8sS0FBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFBQSxvQkFBQztBQUFDLDZCQUFRLElBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxLQUFJO0FBQUMsMEJBQUksSUFBRSxZQUFVLE9BQU8sRUFBRSxDQUFDLElBQUVULEdBQUUsZUFBYUEsR0FBRSxpQkFBZ0IsSUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsd0JBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUFBLG9CQUFDO0FBQUMsc0JBQUUsS0FBSyxDQUFDLEdBQUUsRUFBRSxLQUFLLENBQUMsR0FBRSxFQUFFLEtBQUssQ0FB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QUF1QjtVQUFBLEtBQUE7QUFBQWdXLHVCQUFBdHBCLE9BQUE7QUFBQSxtQkFHeEM2UyxRQUFBOEUsUUFBQSxFQUFBNlIsS0FBQSxXQUFBO0FBQUEscUJBQUExRyxhQUFBLEdBQUFEO1lBQUEsQ0FBQTtVQUFBLEtBQUE7QUFBQXlHLHVCQUFBdHBCLE9BQUE7QUFBQSxtQkFDQTZTLFFBQUE4RSxRQUFBLEVBQUE2UixLQUFBLFdBQUE7QUFBQSxxQkFBQXJCLFlBQUEsR0FBQUQ7WUFBQSxDQUFBO1VBQUEsS0FBQTtVQUFBLEtBQUE7QUFBQSxtQkFBQW9CLFdBQUF4b0IsS0FBQTtRQUFBO01BQUEsR0FBQW9vQixTQUFBO0lBQUEsQ0FDUCxDQUFBO0FBQUEsV0FBQSxTQVZNN1YsVUFBQTtBQUFBLGFBQUE0VixPQUFBdmIsTUFBQSxNQUFBdkQsU0FBQTtJQUFBO0VBQUEsRUFBQTtBQVlOLE9BQUtrSixPQUFPO0FBQ2IsR0FBRzsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibmF2aWdhdG9yIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIkRlbm8iLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm93bktleXMiLCAibW9kdWxlIiwgIm93bktleXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImFjdGl2ZVhEb2N1bWVudCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJzZWxmIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICJSYW5nZUVycm9yIiwgIlR5cGVFcnJvciIsICJTeW1ib2wiLCAibW9kdWxlIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAiJCIsICIkIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiJCIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImRlZmluZSIsICJNYXAiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJOdW1iZXIiLCAiJCIsICIkIiwgIiQiLCAiJCIsICJvd25LZXlzIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiX0RPTVRva2VuTGlzdCIsICJpbml0X0RPTVRva2VuTGlzdCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgIkRvY3VtZW50RnJhZ21lbnQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAibW9kdWxlIiwgInVuZGVmaW5lZCIsICJnbG9iYWwiLCAiZXhwb3J0cyIsICJSZXF1ZXN0IiwgImZldGNoIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAiYSIsICJiIiwgImMiLCAiZSIsICJmIiwgImQiLCAiZyIsICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICJFcnJvciIsICJSYW5nZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwgIlN5bnRheEVycm9yIiwgIlR5cGVFcnJvciIsICJtb2R1bGUiLCAibW9kdWxlIiwgIiQiLCAibW9kdWxlIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAiJCIsICIkIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICIkIiwgIm1vZHVsZSIsICIkIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgIkZ1bmN0aW9uIiwgIlN0cmluZyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJkb2N1bWVudCIsICJQcm9taXNlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibW9kdWxlIiwgIiQiLCAiZ2xvYmFsVGhpcyIsICJUeXBlRXJyb3IiLCAiZG9jdW1lbnQiLCAiUHJvbWlzZSIsICJtb2R1bGUiLCAiJCIsICIkIiwgIiQiLCAiJCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ludGF4RXJyb3IiLCAiaW5kZXgiLCAiUmVnRXhwIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImdsb2JhbCIsICJtb2R1bGUiLCAiJCIsICJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICIkIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAiJCIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJlbmNvZGVVUklDb21wb25lbnQiLCAiVVJMU2VhcmNoUGFyYW1zIiwgImZldGNoIiwgIlJlcXVlc3QiLCAiJCIsICJnbG9iYWxUaGlzIiwgIlVSTFNlYXJjaFBhcmFtcyIsICJUeXBlRXJyb3IiLCAicGFyc2VJbnQiLCAiVVJMIiwgIiQiLCAiQ29uc3RhbnRzIiwgImNvbnN0YW50c19kZWZhdWx0IiwgImluaXRfY29uc3RhbnRzIiwgIl9fZXNtIiwgInNyY19XaWtpcGx1c19tb2R1bGVzX3V0aWxzX2NvbnN0YW50c0pzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiY29uY2F0IiwgInZlcnNpb24iLCAid2lraUlkIiwgIl9jcmVhdGVDbGFzcyIsICJrZXkiLCAiZ2V0IiwgIndpbmRvdyIsICJtdyIsICJjb25maWciLCAicmVwbGFjZSIsICJSZXF1ZXN0cyIsICJyZXF1ZXN0c19kZWZhdWx0IiwgImluaXRfcmVxdWVzdHMiLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfdXRpbHNfcmVxdWVzdHNKcyIsICJiYXNlIiwgImxvY2F0aW9uIiwgInByb3RvY29sIiwgImhvc3QiLCAic2NyaXB0UGF0aCIsICJxdWVyeSIsICJfYXN5bmNUb0dlbmVyYXRvciIsICJfcmVnZW5lcmF0b3JSdW50aW1lIiwgIm1hcmsiLCAiX2NhbGxlZSIsICJ1cmwiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgInJlc3BvbnNlIiwgIndyYXAiLCAiX2NhbGxlZSQiLCAiX2NvbnRleHQiLCAicHJldiIsICJuZXh0IiwgIlVSTCIsICJPYmplY3QiLCAia2V5cyIsICJsZW5ndGgiLCAic2VhcmNoUGFyYW1zIiwgImFwcGVuZCIsICJmZXRjaCIsICJjcmVkZW50aWFscyIsICJoZWFkZXJzIiwgInVzZXJBZ2VudCIsICJzZW50IiwgImpzb24iLCAiYWJydXB0IiwgInN0b3AiLCAicG9zdCIsICJwYXlsb2FkIiwgIl9jYWxsZWUyIiwgImZvcm0iLCAiX2kyIiwgIl9PYmplY3QkZW50cmllcyIsICJfT2JqZWN0JGVudHJpZXMkX2kiLCAidmFsdWUiLCAiX2NhbGxlZTIkIiwgIl9jb250ZXh0MiIsICJGb3JtRGF0YSIsICJlbnRyaWVzIiwgIl9zbGljZWRUb0FycmF5IiwgIm1ldGhvZCIsICJib2R5IiwgImkxOG5femhfY25fZGVmYXVsdCIsICJpbml0X2kxOG5femhfY24iLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfdXRpbHNfaTE4blpoQ25KcyIsICJ1bmtub3duX2Vycm9yX25hbWUiLCAiYXBpX3VuYWNjZXNzaWFibGUiLCAiYXBpX3Vud3JpdGVhYmxlIiwgImZhaWxfdG9fZ2V0X3RpbWVzdGFtcCIsICJmYWlsX3RvX2dldF9lZGl0dG9rZW4iLCAiZmFpbF90b19nZXRfcGFnZWluZm8iLCAibm90X2F1dG9jb25maXJtZWRfdXNlciIsICJoaXRfYWJ1c2VmaWx0ZXIiLCAidW5rbm93bl9lZGl0X2Vycm9yIiwgInVua25vd25fZWRpdF9lcnJvcl9tZXNzYWdlIiwgIm5vdGl0bGUiLCAibm90ZXh0IiwgIm5vdG9rZW4iLCAiaW52YWxpZHNlY3Rpb24iLCAicHJvdGVjdGVkdGl0bGUiLCAiY2FudGNyZWF0ZSIsICJjYW50Y3JlYXRlX2Fub24iLCAiYXJ0aWNsZWV4aXN0cyIsICJub2ltYWdlcmVkaXJlY3RfYW5vbiIsICJub2ltYWdlcmVkaXJlY3QiLCAic3BhbWRldGVjdGVkIiwgImZpbHRlcmVkIiwgImNvbnRlbnR0b29iaWciLCAibm9lZGl0X2Fub24iLCAibm9lZGl0IiwgInBhZ2VkZWxldGVkIiwgImVtcHR5cGFnZSIsICJlbXB0eW5ld3NlY3Rpb24iLCAiZWRpdGNvbmZsaWN0IiwgInJldndyb25ncGFnZSIsICJ1bmRvZmFpbHVyZSIsICJtaXNzaW5ndGl0bGUiLCAibXVzdGJlcG9zdGVkIiwgInJlYWRhcGlkZW5pZWQiLCAid3JpdGVhcGlkZW5pZWQiLCAibm9hcGl3cml0ZSIsICJiYWR0b2tlbiIsICJtaXNzaW5ncGFyYW0iLCAiaW52YWxpZHBhcmFtbWl4IiwgImludmFsaWR0aXRsZSIsICJub3N1Y2hwYWdlaWQiLCAicGFnZWNhbm5vdGV4aXN0IiwgIm5vc3VjaHJldmlkIiwgImJhZG1kNSIsICJob29rYWJvcnRlZCIsICJwYXJzZWVycm9yIiwgInN1bW1hcnlyZXF1aXJlZCIsICJibG9ja2VkIiwgInJhdGVsaW1pdGVkIiwgInVua25vd25lcnJvciIsICJub3N1Y2hzZWN0aW9uIiwgInNlY3Rpb25zbm90c3VwcG9ydGVkIiwgImVkaXRub3RzdXBwb3J0ZWQiLCAiYXBwZW5kbm90c3VwcG9ydGVkIiwgInJlZGlyZWN0X2FwcGVuZG9ubHkiLCAiYmFkZm9ybWF0IiwgImN1c3RvbWNzc3Byb3RlY3RlZCIsICJjdXN0b21qc3Byb3RlY3RlZCIsICJjYXNjYWRlcHJvdGVjdGVkIiwgIm5ldHdvcmtfZWRpdF9lcnJvciIsICJyZWRpcmVjdF90b19zdW1tYXJ5IiwgInJlZGlyZWN0X2Zyb21fc3VtbWFyeSIsICJuZWVkX2luaXQiLCAiZmFpbF90b19nZXRfd2lraXRleHQiLCAicXVpY2tlZGl0X3RvcGJ0biIsICJxdWlja2VkaXRfc2VjdGlvbmJ0biIsICJmYWlsX3RvX2luaXRfcXVpY2tlZGl0IiwgImJhY2siLCAiZ290b19lZGl0Ym94IiwgInN1bW1hcnlfcGxhY2Vob2xkIiwgInN1Ym1pdCIsICJwdWJsaXNoX3BhZ2UiLCAicHVibGlzaF9jaGFuZ2UiLCAicHJldmlldyIsICJjYW5jZWwiLCAibWFya19taW5vcmVkaXQiLCAib25jbG9zZV9jb25maXJtIiwgImZhaWxfdG9fZ2V0X3dpa2l0ZXh0X3doZW5fZWRpdCIsICJjYW50X3BhcnNlX3dpa2l0ZXh0IiwgImxvYWRpbmdfcHJldmlldyIsICJzdWJtaXR0aW5nX2VkaXQiLCAiZWRpdF9zdWNjZXNzIiwgImVtcHR5X3BhZ2VfY29uZmlybSIsICJjcm9zc19wYWdlX2VkaXQiLCAiY3Jvc3NfcGFnZV9lZGl0X3N1Ym1pdCIsICJjcm9zc19wYWdlX2VkaXRfZXJyb3IiLCAiaW5zdGFsbF90aXAiLCAiYWNjZXB0IiwgImRlY2xpbmUiLCAiaW5zdGFsbF9maW5pc2giLCAibG9hZGluZyIsICJjYW50X2FkZF9mdW5jYnRuIiwgIndpa2lwbHVzX3NldHRpbmdzIiwgIndpa2lwbHVzX3NldHRpbmdzX2Rlc2MiLCAid2lraXBsdXNfc2V0dGluZ3NfcGxhY2Vob2xkZXIiLCAid2lraXBsdXNfc2V0dGluZ3NfZ3JhbW1hcl9lcnJvciIsICJ3aWtpcGx1c19zZXR0aW5nc19zYXZlZCIsICJyZWRpcmVjdF9mcm9tIiwgInJlZGlyZWN0X2Rlc2MiLCAicmVkaXJlY3Rfc3VtbWFyeV9kZXNjIiwgImVtcHR5X2lucHV0IiwgInJlZGlyZWN0X3NhdmVkIiwgInVuaW5pdGVkIiwgImNhbnRfcGFyc2VfaTE4bmNhY2hlIiwgImNhbnRfbG9hZF9sYW5ndWFnZSIsICJoaXN0b3J5X2VkaXRfd2FybmluZyIsICJjcmVhdGVfcGFnZV90aXAiLCAiY29udGludWUiLCAiZGVmYXVsdF9zdW1tYXJ5X3N1ZmZpeCIsICJJMThuIiwgImkxOG5fZGVmYXVsdCIsICJpbml0X2kxOG4iLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfdXRpbHNfaTE4bkpzIiwgImxhbmd1YWdlIiwgIkpTT04iLCAicGFyc2UiLCAibG9jYWxTdG9yYWdlIiwgIm5hdmlnYXRvciIsICJ0b0xvd2VyQ2FzZSIsICJfdW51c2VkIiwgImJyb3dzZXJMYW5ndWFnZSIsICJpMThuQ2FjaGUiLCAiZ2V0SXRlbSIsICJfaTMiLCAiX09iamVjdCRrZXlzMiIsICJpMThuRGF0YSIsICJfdW51c2VkMiIsICJzZXRJdGVtIiwgInRyYW5zbGF0ZSIsICJwbGFjZWhvbGRlcnMiLCAiYXJndW1lbnRzIiwgInVuZGVmaW5lZCIsICJyZXN1bHQiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgIl9zdGVwJHZhbHVlIiwgImluZGV4IiwgInBsYWNlaG9sZGVyIiwgImVyciIsICJlIiwgImYiLCAiV2lraXBsdXNFcnJvciIsICJMb2ciLCAibG9nX2RlZmF1bHQiLCAiaW5pdF9sb2ciLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfdXRpbHNfbG9nSnMiLCAiX0Vycm9yIiwgIm1lc3NhZ2UiLCAiY29kZSIsICJfdGhpcyIsICJfY2FsbFN1cGVyIiwgIl9pbmhlcml0cyIsICJfd3JhcE5hdGl2ZVN1cGVyIiwgIkVycm9yIiwgImRlYnVnIiwgImNvbnNvbGUiLCAiaW5mbyIsICJlcnJvciIsICJlcnJvckNvZGUiLCAicGF5bG9hZHMiLCAidGVtcGxhdGUiLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiX3N0ZXAyJHZhbHVlIiwgImkiLCAidiIsICJSZWdFeHAiLCAiV2lraSIsICJ3aWtpX2RlZmF1bHQiLCAiaW5pdF93aWtpIiwgInNyY19XaWtpcGx1c19tb2R1bGVzX3NlcnZpY2VzX3dpa2lKcyIsICJfZ2V0RWRpdFRva2VuIiwgIl9jYWxsZWUzIiwgIl9jYWxsZWUzJCIsICJfY29udGV4dDMiLCAiYWN0aW9uIiwgIm1ldGEiLCAiZm9ybWF0IiwgInRva2VucyIsICJjc3JmdG9rZW4iLCAiZ2V0RWRpdFRva2VuIiwgImFwcGx5IiwgIl9nZXRQYWdlSW5mbyIsICJfY2FsbGVlNCIsICJfcmVmIiwgInRpdGxlIiwgInJldmlzaW9uSWQiLCAicGFyYW1zIiwgInBhZ2VLZXkiLCAiY29udGVudG1vZGVsIiwgInBhZ2VJbmZvIiwgIl9jYWxsZWU0JCIsICJfY29udGV4dDQiLCAicHJvcCIsICJydnByb3AiLCAicmV2aWRzIiwgInBhZ2VJbmZvQ2FjaGUiLCAidGltZXN0YW1wIiwgInJldmlkIiwgInRpdGxlcyIsICJwYWdlcyIsICJyZXZpc2lvbnMiLCAiX29iamVjdFNwcmVhZCIsICJ0MCIsICJnZXRQYWdlSW5mbyIsICJfeCIsICJfZ2V0V2lraVRleHQiLCAiX2NhbGxlZTUiLCAiX3JlZjIiLCAic2VjdGlvbiIsICJfY2FsbGVlNSQiLCAiX2NvbnRleHQ1IiwgInJ2c2VjdGlvbiIsICJnZXRXaWtpVGV4dCIsICJfeDIiLCAiX3BhcnNlV2lraVRleHQiLCAiX2NhbGxlZTYiLCAid2lraXRleHQiLCAiX2FyZ3M2IiwgIl9jYWxsZWU2JCIsICJfY29udGV4dDYiLCAidGV4dCIsICJwc3QiLCAicGFyc2VXaWtpVGV4dCIsICJfeDMiLCAiX2VkaXQiLCAiX2NhbGxlZTciLCAiX3JlZjMiLCAiY29udGVudCIsICJlZGl0VG9rZW4iLCAiX3JlZjMkY29uZmlnIiwgIl9yZWYzJGFkZGl0aW9uYWxDb25maSIsICJhZGRpdGlvbmFsQ29uZmlnIiwgIl9hcmdzNyIsICJfY2FsbGVlNyQiLCAiX2NvbnRleHQ3IiwgInRva2VuIiwgImJhc2V0aW1lc3RhbXAiLCAiZWRpdCIsICJ3YXJuaW5nIiwgIl9nZXRMYXRlc3RSZXZpc2lvbklkRm9yUGFnZSIsICJfY2FsbGVlOCIsICJfeWllbGQkdGhpcyRnZXRQYWdlSW4iLCAiX2NhbGxlZTgkIiwgIl9jb250ZXh0OCIsICJnZXRMYXRlc3RSZXZpc2lvbklkRm9yUGFnZSIsICJfeDQiLCAiUGFnZSIsICJwYWdlX2RlZmF1bHQiLCAiaW5pdF9wYWdlIiwgInNyY19XaWtpcGx1c19tb2R1bGVzX2NvcmVfcGFnZUpzIiwgIl9yZWY0IiwgImlzTmV3UGFnZSIsICJfaW5pdCIsICJfY2FsbGVlOSIsICJfcmVmNSIsICJfcmVmNSRlZGl0VG9rZW4iLCAicHJvbWlzZUFyciIsICJfYXJnczkiLCAiX2NhbGxlZTkkIiwgIl9jb250ZXh0OSIsICJnZXRUaW1lc3RhbXAiLCAiZ2V0Q29udGVudE1vZGVsIiwgInB1c2giLCAiUHJvbWlzZSIsICJhbGwiLCAiaW5pdGVkIiwgImluaXQiLCAiX2dldEVkaXRUb2tlbjIiLCAiX2NhbGxlZTEwIiwgIl9jYWxsZWUxMCQiLCAiX2NvbnRleHQxMCIsICJsb2FkZXIiLCAidXNpbmciLCAidXNlciIsICJfZ2V0VGltZXN0YW1wIiwgIl9jYWxsZWUxMSIsICJfeWllbGQkd2lraV9kZWZhdWx0JGciLCAiX2NhbGxlZTExJCIsICJfY29udGV4dDExIiwgIl9nZXRDb250ZW50TW9kZWwiLCAiX2NhbGxlZTEyIiwgIl95aWVsZCR3aWtpX2RlZmF1bHQkZzIiLCAiX2NhbGxlZTEyJCIsICJfY29udGV4dDEyIiwgIl9nZXRXaWtpVGV4dDIiLCAiX2NhbGxlZTEzIiwgIl9yZWY2IiwgIl9yZWY2JHNlY3Rpb24iLCAic2VjIiwgIndpa2lUZXh0IiwgIl9hcmdzMTMiLCAiX2NhbGxlZTEzJCIsICJfY29udGV4dDEzIiwgInNlY3Rpb25DYWNoZSIsICJfcGFyc2VXaWtpVGV4dDIiLCAiX2NhbGxlZTE0IiwgIl9jYWxsZWUxNCQiLCAiX2NvbnRleHQxNCIsICJfeDUiLCAiX2VkaXQyIiwgIl9jYWxsZWUxNSIsICJfY2FsbGVlMTUkIiwgIl9jb250ZXh0MTUiLCAiY3JlYXRlb25seSIsICJfeDYiLCAiTm90aWZpY2F0aW9uIiwgIm5vdGlmaWNhdGlvbl9kZWZhdWx0IiwgImluaXRfbm90aWZpY2F0aW9uIiwgInNyY19XaWtpcGx1c19tb2R1bGVzX2NvcmVfbm90aWZpY2F0aW9uSnMiLCAiJCIsICJkaXNwbGF5IiwgInR5cGUiLCAiY2FsbGJhY2siLCAiYWRkQ2xhc3MiLCAiZmluZCIsICJsYXN0IiwgImZhZGVJbiIsICJiaW5kIiwgImNsZWFyIiwgInNlbGYiLCAib24iLCAic2xpZGVMZWZ0IiwgInN1Y2Nlc3MiLCAiY2hpbGRyZW4iLCAiZmlyc3QiLCAiZmFkZU91dCIsICJyZW1vdmUiLCAic2V0VGltZW91dCIsICJlbXB0eSIsICJlYWNoIiwgImVsZSIsICJkZWxheSIsICJzcGVlZCIsICJjc3MiLCAiYW5pbWF0ZSIsICJsZWZ0IiwgInNsZWVwIiwgInNsZWVwX2RlZmF1bHQiLCAiaW5pdF9zbGVlcCIsICJzcmNfV2lraXBsdXNfbW9kdWxlc191dGlsc19zbGVlcEpzIiwgInRpbWUiLCAicmVzb2x2ZSIsICJwYXJzZVF1ZXJ5IiwgInJlZyIsICJtYXRjaCIsICJleGVjIiwgImRlY29kZVVSSUNvbXBvbmVudCIsICJfdW51c2VkNyIsICJpbml0X2hlbHBlcnMiLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfdXRpbHNfaGVscGVyc0pzIiwgIlVJIiwgInVpX2RlZmF1bHQiLCAiaW5pdF91aSIsICJzcmNfV2lraXBsdXNfbW9kdWxlc19jb3JlX3VpSnMiLCAiY3JlYXRlRGlhbG9nQm94IiwgIndpZHRoIiwgImNsaWVudFdpZHRoIiwgImlubmVyV2lkdGgiLCAiY2xpZW50SGVpZ2h0IiwgImlubmVySGVpZ2h0IiwgImRpYWxvZ1dpZHRoIiwgIk1hdGgiLCAibWluIiwgImRpYWxvZ0JveCIsICJ0b3AiLCAiZG9jdW1lbnQiLCAic2Nyb2xsVG9wIiwgImh0bWwiLCAicGFyZW50IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAib25iZWZvcmV1bmxvYWQiLCAiYmluZERyYWdnaW5nIiwgImVsZW1lbnQiLCAibW91c2Vkb3duIiwgImJhc2VYIiwgImNsaWVudFgiLCAiYmFzZVkiLCAiY2xpZW50WSIsICJiYXNlT2Zmc2V0WCIsICJvZmZzZXQiLCAiYmFzZU9mZnNldFkiLCAiZTIiLCAidW5iaW5kIiwgIm9mZiIsICJhZGRGdW5jdGlvbkJ1dHRvbiIsICJpZCIsICJidXR0b24iLCAic2tpbiIsICJhdHRyIiwgImluc2VydFNpbXBsZVJlZGlyZWN0QnV0dG9uIiwgIm9uQ2xpY2siLCAiaW5zZXJ0U2V0dGluZ3NQYW5lbEJ1dHRvbiIsICJpbnNlcnRUb3BRdWlja0VkaXRFbnRyeSIsICJ0b3BCdG4iLCAidG9wQnRuTGluayIsICJzZWN0aW9uTnVtYmVyIiwgInRhcmdldFBhZ2VOYW1lIiwgImN1cnJlbnRQYWdlTmFtZSIsICJhZnRlciIsICJpbnNlcnRTZWN0aW9uUXVpY2tFZGl0RW50cmllcyIsICJzZWN0aW9uQnRuIiwgImVkaXRVUkwiLCAic2VjdGlvblRhcmdldE5hbWUiLCAiY2xvbmVOb2RlIiwgImNsb25lIiwgInNlY3Rpb25OYW1lIiwgInRyaW0iLCAiX3NlY3Rpb25CdG4iLCAiYmVmb3JlIiwgIl91bnVzZWQ4IiwgImluc2VydExpbmtFZGl0RW50cmllcyIsICJocmVmIiwgImNsYXNzIiwgIl9wYXJhbXMkc2VjdGlvbiIsICJzaG93UXVpY2tFZGl0UGFuZWwiLCAiX3JlZjciLCAiX3JlZjckdGl0bGUiLCAiX3JlZjckY29udGVudCIsICJfcmVmNyRzdW1tYXJ5IiwgInN1bW1hcnkiLCAiX3JlZjckb25CYWNrIiwgIm9uQmFjayIsICJfcmVmNyRvblBhcnNlIiwgIm9uUGFyc2UiLCAiX3JlZjckb25FZGl0IiwgIm9uRWRpdCIsICJfcmVmNyRlc2NFeGl0IiwgImVzY0V4aXQiLCAicXVpY2tFZGl0UGFuZWxWaXNpYmxlIiwgImhpZGVRdWlja0VkaXRQYW5lbCIsICJiYWNrQnRuIiwgImp1bXBCdG4iLCAiaW5wdXRCb3giLCAicHJldmlld0JveCIsICJzdW1tYXJ5Qm94IiwgImVkaXRTdWJtaXRCdG4iLCAicHJldmlld1N1Ym1pdEJ0biIsICJpc01pbm9yRWRpdCIsICJtYXJnaW4iLCAiZWRpdEJvZHkiLCAidmFsIiwgIl9jYWxsZWUxNiIsICJwcmVsb2FkQmFubmVyIiwgIl9jYWxsZWUxNiQiLCAiX2NvbnRleHQxNiIsICJfY2FsbGVlMTciLCAidGltZXIiLCAiZWRpdEJhbm5lciIsICJ1c2VUaW1lIiwgIl9jYWxsZWUxNyQiLCAiX2NvbnRleHQxNyIsICJEYXRlIiwgIm5vdyIsICJpcyIsICJ0b1N0cmluZyIsICJyZWxvYWQiLCAibG9nIiwgImZpbmlzaCIsICJjdHJsS2V5IiwgIndoaWNoIiwgInNoaWZ0S2V5IiwgInRyaWdnZXIiLCAicHJldmVudERlZmF1bHQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInNob3dTaW1wbGVSZWRpcmVjdFBhbmVsIiwgIl90aGlzMiIsICJfcmVmMTAiLCAiX3JlZjEwJG9uRWRpdCIsICJfcmVmMTAkb25TdWNjZXNzIiwgIm9uU3VjY2VzcyIsICJpbnB1dCIsICJzdW1tYXJ5SW5wdXRUaXRsZSIsICJzdW1tYXJ5SW5wdXQiLCAiYXBwbHlCdG4iLCAiY2FuY2VsQnRuIiwgImNvbnRpbnVlQnRuIiwgImRpYWxvZyIsICJfY2FsbGVlMTkiLCAiX2NhbGxlZTE5JCIsICJfY29udGV4dDE5IiwgImZvcmNlT3ZlcndyaXRlIiwgImhpZGVTaW1wbGVSZWRpcmVjdFBhbmVsIiwgIl9jYWxsZWUxOCIsICJfY2FsbGVlMTgkIiwgIl9jb250ZXh0MTgiLCAic2hvd1NldHRpbmdzUGFuZWwiLCAiX3RoaXMzIiwgIl9yZWYxMyIsICJfcmVmMTMkb25TdWJtaXQiLCAib25TdWJtaXQiLCAiV2lraXBsdXNfU2V0dGluZ3MiLCAic2V0dGluZ3MiLCAic3RyaW5naWZ5IiwgIl91bnVzZWQ5IiwgIl9jYWxsZWUyMCIsICJzYXZlZEJhbm5lciIsICJfY2FsbGVlMjAkIiwgIl9jb250ZXh0MjAiLCAiaGlkZVNldHRpbmdzUGFuZWwiLCAiYmluZFByZWxvYWRFdmVudHMiLCAib25QcmVsb2FkIiwgIlNldHRpbmdzIiwgInNldHRpbmdzX2RlZmF1bHQiLCAiaW5pdF9zZXR0aW5ncyIsICJzcmNfV2lraXBsdXNfbW9kdWxlc191dGlsc19zZXR0aW5nc0pzIiwgImdldFNldHRpbmciLCAib2JqZWN0IiwgInciLCAiX3VudXNlZDExIiwgImN1c3RvbVNldHRpbmdGdW5jdGlvbiIsICJGdW5jdGlvbiIsICJfdW51c2VkMTIiLCAiX3VudXNlZDEzIiwgIl9pNCIsICJfT2JqZWN0JGtleXMzIiwgImtleTIiLCAiX3VudXNlZDE0IiwgImluaXRfd2lraXBsdXMiLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfd2lraXBsdXNMZXNzIiwgIm1vZHVsZXNfZXhwb3J0cyIsICJpbml0X21vZHVsZXMiLCAic3JjX1dpa2lwbHVzX21vZHVsZXNfaW5kZXhKcyIsICJfY2FsbGVlMjgiLCAiUGFnZXMiLCAiaXNDdXJyZW50UGFnZUVtcHR5IiwgImdldFBhZ2UiLCAiY3VycmVudFBhZ2UiLCAiaGFuZGxlUXVpY2tFZGl0QnV0dG9uQ2xpY2tlZCIsICJoYW5kbGVTaW1wbGVSZWRpcmVjdEJ1dHRvbkNsaWNrZWQiLCAiaGFuZGxlU2V0dGluZ3NCdXR0b25DbGlja2VkIiwgImhhbmRsZVByZWxvYWQiLCAiX2NhbGxlZTI4JCIsICJfY29udGV4dDI4IiwgImFydGljbGVJZCIsICJfcmVmMTciLCAiX2NhbGxlZTIxIiwgIl9yZWYxNiIsICJyZXZpc2lvbklkMiIsICJuZXdQYWdlIiwgIl9jYWxsZWUyMSQiLCAiX2NvbnRleHQyMSIsICJfeDciLCAidXNlckdyb3VwcyIsICJpbmNsdWRlcyIsICJpc0FydGljbGUiLCAiX1dpa2lwbHVzUGFnZXMiLCAiX3JlZjE4IiwgIl9jYWxsZWUyMyIsICJfcmVmMTkiLCAiaXNPdGhlclBhZ2UiLCAicGFnZSIsICJjdXN0b21TdW1tYXJ5IiwgInNlY3Rpb25Db250ZW50IiwgImlzRWRpdEhpc3RvcnlSZXZpc2lvbiIsICJlc2NUb0V4aXQiLCAiY3VzdG9tRWRpdFRhZ3MiLCAiZGVmYXVsdEVkaXRUYWdzIiwgImVkaXRUYWdzIiwgInNob3VsZFNob3dDcmVhdGVQYWdlVGlwIiwgIl9hcmdzMjMiLCAiX2NhbGxlZTIzJCIsICJfY29udGV4dDIzIiwgImxhdGVzdFJldmlzaW9uSWQiLCAiY2xlYXJUaW1lb3V0IiwgIl9vbkVkaXQiLCAiX2NhbGxlZTIyIiwgIl9yZWYyMCIsICJzdW1tYXJ5MiIsICJlZGl0UGF5bG9hZCIsICJfY2FsbGVlMjIkIiwgIl9jb250ZXh0MjIiLCAidGFncyIsICJqb2luIiwgIm1pbm9yIiwgIm5vdG1pbm9yIiwgIl94OCIsICJfcmVmMjEiLCAiX2NhbGxlZTI1IiwgIl9jYWxsZWUyNSQiLCAiX2NvbnRleHQyNSIsICJfb25FZGl0MiIsICJfY2FsbGVlMjQiLCAiX3JlZjIyIiwgIl9yZWYyMiRmb3JjZU92ZXJ3cml0ZSIsICJjdXJyZW50UGFnZU5hbWUyIiwgIl9jYWxsZWUyNCQiLCAiX2NvbnRleHQyNCIsICJjb250ZW50MiIsICJ1dGlsIiwgIndpa2lVcmxlbmNvZGUiLCAiX3g5IiwgIl9yZWYyMyIsICJhcnRpY2xlUGF0aCIsICJfcmVmMjQiLCAiX2NhbGxlZTI2IiwgIl9jYWxsZWUyNiQiLCAiX2NvbnRleHQyNiIsICJfcmVmMjUiLCAiX3JlZjI3IiwgIl9jYWxsZWUyNyIsICJfcmVmMjYiLCAiX2NhbGxlZTI3JCIsICJfY29udGV4dDI3IiwgIl94MTAiLCAicmVzaXplX2V4cG9ydHMiLCAiaW5pdF9yZXNpemUiLCAic3JjX1dpa2lwbHVzX3Jlc2l6ZVRzIiwgIl9jYWxsZWUyOSIsICIkYm9keSIsICJfY2FsbGVlMjkkIiwgIl9jb250ZXh0MjkiLCAicmVhZHlTdGF0ZSIsICJvbmNlIiwgIndpbmRvd1dpZHRoIiwgIiR3aWtpcGx1c0ludGVyYm94IiwgIldpa2lwbHVzIiwgIl9tdyRjb25maWckZ2V0IiwgIndnQWN0aW9uIiwgIndnSXNBcnRpY2xlIiwgIl9yZWYyOSIsICJfY2FsbGVlMzAiLCAiX213JHVzZXIkb3B0aW9ucyRnZXQiLCAiaXNWZUVuYWJsZSIsICJfY2FsbGVlMzAkIiwgIl9jb250ZXh0MzAiLCAib3B0aW9ucyIsICJ0aGVuIl0KfQo=